Change Log#


  • Add verbose options to io.parse_energies() and snb-parse, also used in snb-plot and snb-analyse, and set to False by default to reduce verbosity of certain SnB CLI commands.

  • Use doped functions to make oxi-state guessing (and thus defect initialisation) more efficient.

  • Miscellaneous efficiency and robustness updates.

  • Testing updates.


  • distortion_metadata.json for each defect now saved to the individual defect folders (as well as the combined total distortion metadata in the top level folder) – more likely to be retained by the user when ``scp``ing around etc.

  • Minor updates:
    • Refactor _format_defect_name to format_defect_name from doped (now a public function)

    • Update snb-run to avoid possible ‘file exists’ warning

    • Update tutorials/notebooks to specify vasp_nkred_std to streamline workflow

    • Remove unnecessary tutorials folder with duplicate tutorial notebook (to reduce workload).

    • Add Binder/Colab buttons to run tutorials in the cloud from docs

    • Default verbosity updates (quieten some unnecessary info messages)

    • Make distortion_metadata overwriting/combining more robust and less (unnecessarily) verbose

  • Bugfix of snb-run from v3.3.0: If max number of electronic steps (NELM) threshold was reached in an ionic step, it would be falsely recognised as converged (due to unconverged being in the OUTCAR). This would only affect snb-run behaviour in some cases with v3.3.0, and if so the user should be warned anyway with Bond_Distortion_X not fully relaxed when later running snb-parse/snb-plot/snb-groundstate. Now fixed. To double check, one can update ShakeNBreak and just re-run snb-run, and any affected distortions will be correctly determined as unconverged and be re-submitted.


  • Add Dimer distortion as a targeted distortion for dimer reconstructions. It pushes two of the defect NN to a distance of 2 A.

  • Add option distorted_atoms to the Distortion class to allow users to specify the indexes of the atoms to distort.

  • Update tests to check the new functionality.

  • Update get_homoionic_bonds to detect homoionic bonds between different cations/anions (rather than just bonds between the same element)

  • Fix issue with snb-generate when no defect name was specified (by adding unrelaxed=True when calling get_defect_name_from_entry)

  • Update functions that read OUTCARs to be able to read OUTCAR.gz files too

  • Update energies parsing to still work when all distortions are high energy, but warn the user about this (i.e. only Unperturbed)

  • Update snb-run to add early-on detection of distortions that are stuck in high energy basins and rename them to “High_Energy” to avoid continuing their relaxation

  • Miscellaneous efficiency improvements and bug fixes


  • Ensure the sorted pymatgen Structure is created for the VASP input (fixes a rare bug in v3.2.1 and v3.2.2 where for certain structures the order of elements in the POSCAR was not properly sorted, which is usually fine, but messed with the ROPT INCAR setting).

  • Plotting format updates (make legend frame more transparent to make datapoints behind it easier to see).

  • Update tests

  • Update docs (note about handling AFM systems)


  • Consolidate SnB/doped INCAR defaults and remove redundant settings.

  • Ensure backwards compatiblity in defect folder name handling.

  • Fix bug in get_site_magnetizations.


  • Update CLI config handling.

  • Remove shakenbreak.vasp module and use doped VASP file writing functions directly.

  • Add INCAR/KPOINTS/POTCAR file writing tests. now deleted as these tests are now automatically run in if `POTCAR`s available.


  • Following the major release of doped v2.0, now compatible with the new pymatgen defects code (pymatgen>2022.7.25), this update:

    • Allows input of doped DefectsGenerator object to Distortions

    • Updates the tutorials to reflect the current recommended workflow of generating defects with doped and then applying ShakeNBreak, no longer requiring separate virtual environments 🎉


  • Update dependencies, as hiphive=1.2 has been released, making ShakeNBreak compatible with `python=3.11`🎉


  • Switch to semantic versioning

  • Update rattling functions to handle primitive bulk materials as well as supercells.

  • Add check to snb-run if there are multiple `OUTCAR`s present with one or less ionic steps, and if this is also the case for the current run -> warn the user.

  • Small fixes, formatting and docs updates.


  • Add snb-mag function, and automatically check the magnetisation from ISPIN = 2 OUTCAR files when continuing relaxations with snb-run (and change to ISPIN = 1 if magnetisation is negligible).

  • Update handling of minimum distances and oxidation states, to deal with single-atom primitive unit cells and systems where pymatgen cannot guess the oxidation state (e.g. single-elements, intermetallics etc).

  • Docs updates


  • Make parsing of `DefectEntry`s more robust.

  • Update dependencies (now supporting python=3.10 due to numba updates)

  • Refactor CITATION.cff to

  • Update docs, formatting and cleanup.


  • Update numpy requirement to numpy>=1.21.2 to fix numpy.typing.NDArray import error.

  • Add News & Views free-to-read link to docs


  • Updates to snb-run (copy job from parent directory if present, switch to ALGO = All if poor electronic convergence…)

  • Make format_defect_name() more robust

  • Update docs and with published article links

  • Formatting and cleanup

  • Make oxidation state guessing more efficient (previously was causing bottleneck with large cells)

  • Fix oxidation state guessing for rare elements

  • Add note to Tips docs page about bulk phase transformation behaviour

  • Refactor to json rather than pickle


  • Change numpy version requirement in docs/requirements.txt to numpy>=1.21 to work with numpy.typing.NDArray.


  • Refactor Distortions() class to take in DefectEntry objects as input, rather than Defect objects, to be

compatible with pymatgen-analysis-defects. - Fix ticks and ticklabels in plots


  • Specify pandas version in requirements.txt to equal or higher than 1.1.0

  • Refactor snb-regenerate to execute when no arguments are specified (rather than showing help message)


  • Add ‘Studies using ShakeNBreak’ and ‘How to Cite’ to readme and docs.


  • Add JOSS badge to docs


  • Minor updates to and paper.bib


Main changes: - Add example notebook showing how to generate interstitials and apply SnB to them. - Fix typo in example notebook and docs. - Add comment about font installation to Installation guide. - Update with suggestions from editor.


Add docs plots.


Docs tutorial update.


Main changes:

  • Refactor Distortions() to a list or simple-format dict of Defect objects as input. Same for Distortions.from_structures()

  • Update defect naming to {}_s{Defect.defect_site_index} for vacancies/substitutions and {}_m{Defect.multiplicity} for interstitials. Append “a”, “b”, “c” etc in cases of inequivalent defects

  • Make ShakeNBreak compatible with most recent pymatgen and pymatgen-analysis-defects packages.

  • Update legend format in plots and site index/multiplicity labelling, make default format png.

  • Update default charge state setting to match pymatgen-analysis-defects oxi state + padding approach.

  • A lot of additional warning and error catches.

  • Miscellaneous warnings and docs updates.


Main changes:

  • Refactor ShakeNBreak to make it compatible with pymatgen>=2022.8.23. Now Distortions takes in pymatgen.analysis.defects.core.Defect objects.

  • Add Distortions.from_dict() and Distortions.from_structures() to generate defect distortions from a dictionary of defects (in doped format) or from a list of defect structures, respectively.


Main changes:

  • Update rattling procedure; stdev be automatically set to 10% bulk bond length and seed alternated for different distortions (set to 100*distortion_factor) to avoid rare ‘stuck rattle’ occurrences.

  • Refactor pickle usages to JSON serialisation to be more robust to package (i.e. pymatgen) updates.

  • Update snb-regenerate to be more robust, can be continually rerun without generating duplicate calculations.

  • Update snb-run to consider calculations with >50 ionic steps and <2 meV energy change as converged.

  • Minor changes, efficiency improvements and bug fixes.


Just bumping version number to test updated GH Actions pip-install-test workflow.


Main changes:

  • Updated defect name handling to work for all conventions

  • More robust snb-generate and plotting behaviour

  • Add CLI summary GIF to docs and README

  • Updated snb-run behaviour to catch high-energies and forces error to improve efficiency

  • Many miscellaneous tests and fixes

  • Docs updates


Main changes:

  • Fonts now included in package_data so can be installed with pip from PyPI

  • Refactoring distortion_plots plot saving to saving to defect directories, and preventing overwriting of previous plots

  • Miscellaneous tests and fixes

  • Add summary GIF to docs and README

  • Handling for partial oxidation state input

  • Setting EDIFFG = -0.01 and local_rattle = False as default


Main changes:

  • Update CLI commands (snb-parse, analyse, plot and groundstate can all now be run with no arguments within a defect folder)

  • Update custom font

  • Update groundstate() tests

  • Update plotting


Main changes:

  • Test for pip install

  • Automatic release and upload to pypi

  • Add ShakeNBreak custom font, and automatise its installation

  • Update ShakeNBreak default INCAR for VASP relaxations

  • Formatting


Main changes:

  • Docs formatting

  • Update pymatgen version to v2022.7.25, while refactoring to be compatible with v2022.8.23 takes place.


Release with full code functionality (CLI and Python), pre JOSS submission.


Release with final module architecture of the code. Implemented command-line interface and I/O to codes other than VASP.


First release with full functionality present, except CLI and I/O to codes other than VASP.


Initial version of the package.


  • Script files:

    • BDM

    • distortions

    • energy_lowering_distortions

    • plot_BDM

    • analyse_defects

    • champion_defects_rerun