All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project generally adheres to Semantic Versioning.
- Overhauled type hinting system
- Added kspacing default to Espresso non_scf_job
- Fixed breaking change from monty 07.12.2024
- Fixed a variety of incompatible type hints
- Added a function
from quacc import get_settings
to fetch the current settings on a thread - Added a mechanism to update the settings on-the-fly via a special
settings_swap
keyword argument that can be passed to the decorators when a workflow engine is used. - Support for MD workflows
- Fixed an edge-case that can occur in multithreading environments where in-memory changes to the
QuaccSettings
could carry over to a concurrent thread - Made the detection of intermediate step directories more robust
- The global
SETTINGS
variable is gone! Modifying a global variable can cause havoc in multithreaded environments and was never compatible with workflow engines. Refer to the Modifying Settings page for the recommended approach. For most users without an active workflow engine, this will be thewith change_settings()
context manager.
- Pinned numpy version to < 2.0 (for now...)
- VASP: Added a new logging statement to specifically highlight which parameters were swapped, not just which recommendations were made
- VASP: Removed EFERMI="midgap" co-pilot swap since it does not influence the results and prevents VASP 5.x compatability
- Fixed MD5-based
Atoms
hashing to work on FIPS-encrypted OSs
- Update the default
shear_strain
value inquacc.atoms.defects.make_deformations_from_bulk
to match that of Pymatgen - Internal refactoring of the runners to be class-based
- Fixed an issue where the
Atoms
object in the output schema could get a stray calculator attached to it when passed between@job
s
- Added support for controlling which properties to calculate with MLP static jobs
- Bumped minimum version of pymatgen
- No longer need to install
master
branch of ASE - Modified Espresso and ONETEP settings to support new ASE profile features
- Removed
nsteps
from theOptSchema
- The
RESULTS_DIR
andSCRATCH_DIR
settings can now be relative paths, if desired
- Failed calculations are now stored in a
failed-quacc-12345-
directory to distinguish these tasks from the running tasks intmp-quacc-12345-
- The output schema is now written to a serialized JSON file instead of pickle for security and ease-of-use reasons. It can be rehydrated via
loadfn("quacc_results.json.gz")
whereloadfn
is frommonty.serialization import loadfn
- The
fmax
attribute was moved from the base level to theparameters_opt
section since it is an input parameter
- File shuttling after a completed calculation is now faster since we simply rename the directory instead of moving each individual file
- Added a context handler,
quacc.settings.change_settings
, that can be used to modify global settings temporarily - Added
quacc.calculators.vasp.params.MPtoASEConverter
to convert between Pymatgen- and Atomate2-style input parameters to ASE-compatabile parameters
- Fixed copying of WAVECAR between steps of the QMOF recipes
- Overhauled the MP recipes to ensure better compatability with atomate2 workflows
- The workflow engine must be directly specified with
WORKFLOW_ENGINE
, as noted in the docs - Changed
VASP_MAG_CUTOFF
from 0.05 to 0.02 - Removed the
preset
keyword argument from the QMOF recipes
- Removed the
pmg_input_set
keyword argument from theVasp
calculator
- Added support for Parsl "special" keyword arguments (e.g.
timeout
,parsl_resource_specification
)
- Fixed bug where the common phonon subflow would generate a
Phonopy
object based on the unrelaxed, rather than relaxed, structure - Sped up the common phonon subflow by removing duplicate
get_phonopy()
calls
- Added quasi IRC recipes to ORCA and Q-Chem
- Added frequency recipe to ORCA
- Fixed various type hints
- Improved performance for the common phonon flow
- Improved performance for ideal gas thermo calculations
- Fixed file extension for the optimizer trajectories, which should have been
.json
instead of.pckl
- Removed the
atoms_info
field from theAtomsSchema
since this is already available in the database via Pymatgen'sMSONAtoms
serialization
- Only call
jsanitize
once before uploading to theStore
- Added new Espresso recipes to perform electron-phonon calculations and Fourier interpolation of the phonon potential
- Fixed potential issues with I/O settings and Espresso
- Fixed passing of custom decorators in the Espresso
grid_phonon_flow
- Calculator executable commands are now
str
type instead ofPath
- Removed
slowconv
from the default parameters of the ORCA recipes - The Q-Chem calculator now uses the TaskDoc from emmet in its
results
attribute
- Fixed user setting of logger level
- Fixed a glob-based issue with
copy_decompress_files
- Added an optional MP compatability checker for MP recipes
- Summaries for intermediate ASE optimization steps are now stored in the output schema for VASP and cclib-based recipes when
store_intermediate_results=True
- Added a
WRITE_PICKLE
setting, which by default, will write out a.pkl
file containing the result schema to the directory
- Updated
ruff
settings - The Gaussian and ORCA
static_job
routines do a force calculation by default now
- Fixed input file formatting for
orcablocks
in ORCA recipes
- Removed the
CHDIR
setting
- Added a
non_scf_job
for VASP
- There are no more
os.chdir
calls to ensure thread safety - Use
pymatgen.io.ase.MSONAtoms
to make MSONableAtoms
- Changed default NEDOS value from 5001 to 3001 for VASP static jobs (10x the default)
- Fixed multithreaded
@task
distribution with VASP and Q-Chem - Fixed a bug where, with Prefect, the
State
would raise an indexing error when passing around deferreddict
entries - Fixed a bug when
job_parameters
andjob_decorators
are both passed tocustomize_funcs()
- Raise a
ValueError
when the user providesSCRATCH_DIR
orRESULTS_DIR
as a relative path
- Fixed pickle-ability of the schemas
- Fixed multithreaded
@task
distribution with GULP, Espresso, and common phonon flow recipes - Fixed concurrency issues with VASP/Q-Chem due to refactoring
- Removed the
quacc.schemas.atoms._quacc_sanitize
function
- Added MP compatability corrections in VASP MP recipes
- Added various phonon recipes for Espresso
- Added various DOS recipes for Espresso
- Fixed a rare edge case where final magmoms would not be moved to initial magmoms of next run in MP VASP recipes
- Added an option to prevent
os.chdir
calls for multithread safety - Added a common elastic calculation
- Switched to
ruff
for formatting, replacing the need forblack
andisort
- Changed VASP double relaxes to be flows and not jobs
- Changed the behavior of
quacc.utils.files.copy_decompress_files
- Fixed
copy_files
handling with workflow engines - Fixed MP VASP double relaxes, where the same relaxation was done twice by mistake
- Fixed use of
**calc_kwargs
in MP flow recipes
- Added a
store_intermediate_results
keyword option toquacc.runners.ase.run_opt()
to allow for storing of the logfiles in intermediate geometry optimization steps. - Added support for Pymatgen-based input sets in VASP jobs
- Added an MP meta-GGA VASP static job
- Added MP GGA relax job, MP GGA static job, and MP GGA relax flow
- Added a validity checker on CLI parameters
- Changed the default ASE optimizer from
FIRE
toBFGS
for most recipes - Changed the VASP
DoubleRelaxSchema
to be consistent between flows - Refactored VASP and Q-Chem execution commands in custom calculators
- Fixed
dir_name
in VASP output schema - Fixed auto-detection of the Prefect workflow engine in settings
- Fixed compatability of MP meta-GGA workflow with that in atomate2
- Using environment variables to set a setting to
None
now works as expected - Overall, more intuitive and robust handling of settings across the various input methods
- PDOS jobs and flows for Espresso
- Modified the Espresso results schema to be DB-compatible
- The
PRIMARY_STORE
setting has changed toSTORE
and is now formatted more intuitively - Uses 2024 stable release of
black
- Fixed usage of
MontyStore
as the data store option
- Removed the deprecated "q-chem legacy" recipes
- Added a
supercell_matrix
keyword argument to the phonon recipes. - More data is now generated, parsed, and stored in phonon workflows, including total DOS and the automatically generated band structure
- The
seekpath
dependency is now required for phonon workflows, as reflected in thequacc[phonons]
optional dependencies - Changed the
min_length: float | None
keyword argument in phonon flows tomin_lengths: float | tuple[float, float, float] | None
for greater flexibility. The default value is now set to 20.0 instead of 15.0 as well.
- Fixed occasional edge cases where the charge/spin multiplicity checker would raise a
ValueError
in generating theRunSchema
- Fixed phonon flow with MACE-MP-0 when
dispersion=True
- Added phonon job for MLPs
- Added an ASE relax job recipe for ONETEP
- Added a non-SCF job for Quantum Espresso
- Added a DOS job for Quantum Espresso
- Added a DOS flow for Quantum Espresso
- Redesigned the
common_phonon_flow
to accept new keyword arguments that enable symmetry reduction. A pre-relaxation step is now also carried out by default.
- Ensures the "restart" keyword argument is not set when a SciPy optimizer is used
- Fixed the
ONETEP_CMD
setting to bestr
instead ofPath
when used to instantiate the calculator - Quantum Espresso restarts are now disabled between steps in ASE relaxations
- Various bug fixes for the Espresso
grid_phonon_flow
- Fixed redundant
Structure
info in theRunSchema
- The
CREATE_UNIQUE_DIR
setting is now set toTrue
by default. - The temporary directory name and its symlink have been slightly updated to have "tmp-" and "symlink-" at the front of the name instead of the end for easier file navigation.
- Updated the "trajectory" entry in the
OptSchema
to belist[Atoms]
instead oflist[AtomsSchema]
- Fixed an occasional race condition that occurs when running concurrent calculations in multi-threaded mode
- The temporary directory made when a
@job
runs now has a name consistent with the folder where the results will ultimately be stored. - Significant speedup in generating the
OptSchema
- Support for ONETEP recipes (@nekkrad)
- New Espresso recipe for ASE external relaxations (@tomdemeyere)
- Fixed bug where autoamtic k-point schemes in VASP would return
kpts
aslist[float]
instead oflist[int]
- VASP runs now respect the
CHECK_CONVERGENCE
global setting when set toFalse
- Fixed bug where the gamma-point only version of VASP was being called if
kpts
wasNone
butkspacing
was notNone
- Removed the broken TRICs support with Sella
- Removed the
covalent_to_db
function
- A new
grid_phonon
recipe in Espresso (@tomdemeyere) - Preliminary support for the Prefect workflow engine, again, but this time without it breaking everything
- Raised the default logger level from
WARNING
toINFO
- Codes calling Custodian can be used in Jupyter Notebooks
- Fixed an error in the Espresso
phonon_flow
when using themaster
branch of ASE - Fixed a few erroneous type hints
- Fixed the
typer
depenendecy inpyproject.toml
to betyper[all]
like it was supposed to be - Fixed a bug when passing decorator keyword arguments when using Dask
- ORCA and GULP recipes now use a more intuitive and concise
list[str]
input argument format instead of adict
format when overriding defaults
- Fixed concurrency issues with Dask subflows
- Adds a new
ase_relax_job
for ORCA - Adds a new
relax_job
andpost_processing_job
for Quantum Espresso quacc.wflow_tools.customizers.strip_decorator
andquacc.wflow_tools.customizers.redecorate
are imported in the base__init__.py
for easy user access- The CLI now has color
- The test suite's SCRATCH_DIR and RESULTS_DIR are now fixed to a given location
- The default Espresso preset has been changed to "sssp_1.3.0_pbe_efficiency"
- To remove calculator defaults entirely,
quacc.Remove
is recommended in place ofNone
- The
quacc.wflow_tools.customizers.strip_decorator
function is recommended instead of calling.__wrapped__
- Fixed Dask subflows that were calling
.compute()
- Fixed various bugs in the Espresso calculator and recipes
- Created a
quacc.wflow_tools.customizers
module to aid in customizing pre-made recipes.
- Overhauled how sub-jobs in recipes can be dynamically modified by the user to increase flexibility.
- Changed default
fmax
forquacc.recipes.mlp.core.relax_job
to 0.05. - Renamed the
quacc.utils.dicts.merge_dicts
function to._recursive_dict_pair_merge
to better reflect its functionality. - Renamed the
quacc.utils.dicts.merge_several_dicts
function to.recursive_dict_merge
to better reflect its functionality.
- Increased support of
~/
throughout quacc file handling mechanisms - Fixed an infinite recursion error when
copy_decompress_files_from_dir
was run in the current working directory.
- The
WORKFLOW_ENGINE
quacc setting now acceptsNone
. - A
DEBUG
quacc setting as been added.
- The way to run complex, dynamic flows has been modified to rely on
functools.partial()
instead of kwargs. See the updated documentation. - Refactored test suite
- Added ML interatomic potential recipes
- ASE optimization log files and pickle files are written to disk by default
- Deprecated the old Q-Chem recipes and replaced them with the updated versions
- Officially drop support of the Prefect workflow engine
- Added core Quantum ESPRESSO recipes and custom calculator. (@tomdemeyere)
- Added a new function,
quacc.utils.files.copy_decompress_files_from_dir
- The
copy_files
kwarg in most recipes can now include a directory - Renamed
quacc.utils.files.copy_decompress
toquacc.utils.files.copy_decompress_files
- Quacc settings that are paths now have
~/
expanded in most cases
- Added preliminary support for the
Dask
workflow engine via Dask Delayed and Dask Distributed.
- Renamed
CREATE_UNIQUE_WORKDIR
toCREATE_UNIQUE_DIR
to better reflect its utility. - The default for the
SCRATCH_DIR
setting is nowNone
instead of~/.quacc_scratch
. In other words, the default is to not use a scratch directory. This should help with onboarding, and the ability to set it asNone
may be broadly of interest. Setting theSCRATCH_DIR
to a givenPath
will still work as expected. - Files are no longer recursively copied from
SCRATCH_DIR
toRESULTS_DIR
. Instead, they are recursively moved. This should speed up I/O operations.
- Fixed a missing
phonopy_kwargs
keyword argument inquacc.recipes.common.phonons
- Added a Jenkins-based test suite that runs tests on HPC resources without mocking for Gaussian, GULP, ORCA, and VASP (minimal)
- Added a TBLite phonon recipe
- Changed the
auto_kpts
kwarg in theVasp
calculator topmg_kpts
- Internal refactoring of recipes to have a separate
_base.py
module when appropriate - Removed the unnecessary
Atoms
arg from thecalc_setup
function
- Fixed slow initial import (3 s --> 1 s)
- Fixed a few broken type hints
- Fixed functional and basis set strings in Gaussian recipes
- Uses number of physical cores instead of logical cores as default for molecular DFT recipes
- Switched to using the PyPI release of NewtonNet (1.1).
- NewtonNet recipes don't run a Hessian calculation by default unless needed
- Fixed circular import issue when running Q-Chem calculations.
- Removed unsupported
qchem_internal_relax_job
- Added
quacc.recipes.common
, includingquacc.recipes.common.slabs
,quacc.recipes.common.defects
, andquacc.recipes.common.phonons
- Added phonopy schema in
quacc.schemas.phonons
- Added EMT phonon workflow
- The method for specifying swaps to the default calculator arguments in recipes has been overhauled. In place of the previous
calc_swaps: dict
approach, additional parameters can be specified via the**kwargs
. In practice, this means in recipes you can doscf = "diis", max_steps=100
instead ofcalc_swaps={"scf":"diis", "max_steps":100}
, for instance. - Moved
quacc.runners.calc
toquacc.runners.ase
- Moved
quacc.runners.prep
toquacc.schemas.prep
- Reduced code duplication across complex flows
- Fixed support for the most recent version of ASE as of 11/2/2023
- Added more type hints for input keyword arguments
- Added the
quacc info
command-line argument for error reporting
- Consolidated VASP INCAR co-pilot settings
- Internal refactoring of the Q-Chem and VASP calculators
- All
Path
-based settings have.expanduser()
applied
- Improved error handling
- DFTB+
MaxSccIterations
set to 200 by default - SCC errors in DFTB+ relaxations will be reported with higher priority than a relaxation error
- Changed prefix of scratch directories to have the datetime in it for easier debugging
- DFTB+ recipes now won't crash when
kpts=None
for structures with PBCs
- Changed minimum version of Parsl
- Added type-hinting for schemas
- Recipes now take
Atoms
instead ofAtoms | dict
as input - Recipes no longer require the use of
fetch_atoms
- Standardized schema fields
- Removed the
fetch_atoms
function
- Fixed VASP recipes to always respect
calc_swaps
. - Fixed setting multiple cores in Custodian for Q-Chem runs.
- Added a new
VibThermoSchema
that merges theVibSchema
andThermoSchema
as a convenience
- The output of recies no longer automatically removes blank lists/dicts/sets to maintain a consistent schema.
- The tblite
freq_job
and ljfreq_job
now useVibThermoSchema
as the output - Changed default
SCRATCH_DIR
fromPath.cwd() / ".scratch"
toPath("~/.scratch")
- Added a new documentation section for worked examples on HPC.
- Updated the minimum required versions for Pymatgen and emmet-core to reflect Pydantic 2 update.
- Added
symprec=1e-8
to the default parameters of VASP relaxation jobs. - VASP bulk recipes now use "BulkSet" as the default preset instead of
None
. - VASP slab recipes now use "SlabSet" as the default preset instead of
None
.
- Fixed pip version conflict when installing Covalent dependencies.
- Migration to Pydantic 2 is complete, along with the corresponding dependencies.
- Pydantic field type validation has been improved.
- Moved
quacc.utils.atoms
/.slabs
/.defects
intoquacc.atoms.core
/.slabs
/.defects
- Moved
quacc.custodian
toquacc.calculators.custodian
- Moved
quacc.utils.thermo.ideal_gas
toquacc.builders.thermo.run_ideal_gas
- Renamed
quacc.schemas.ase.summarize_thermo
toquacc.schemas.ase.summarize_ideal_gas_thermo
- Changed default
SCRATCH_DIR
from/tmp
toPath.cwd() / .scratch
- Refactored decorator handling to be more concise
- Renamed
[optimizers]
extras to[sella]
- Moved
quacc.utils.wflows
intoquacc.wflow_tools.decorators
andquacc.wflow_tools.prefect
- Moved
quacc.utils.db
intoquacc.wflow_tools.db
- Moved
quacc.utils.calc
toquacc.runners.ase
- Moved
quacc.presets
toquacc.calculators.presets
- Fixed parsing of
RESULTS_DIR
andSCRATCH_DIR
paths when they contain~
- Symlinks are no longer created if
RESULTS_DIR == SCRATCH_DIR
since this is redundant - If
RESULTS_DIR
orSCRATCH_DIR
are not present, they will be automatically made
- Decorators are now applied at import time rather than at function-call time.
- Fixed compatibility with FireWorks.
- Fixed I/O issue on Windows and NFS file systems where Sella optimizations would crash.
- Added a
freq_job
recipe in Q-Chem (@samblau) - Added support for TRICs in Sella calculations (@samblau)
- Refactored all recipes to prevent code duplication
- Set
LREAL = False
in VASPBulkSet.yaml
- Add support for
Path
objects everywhere possible.
- Charge and spin multiplicity are now required arguments in molecular DFT calculators.
- Slab recipes now use
make_slabs_from_bulk
instead ofmake_max_slabs_from_bulk
- Use the
logging
module when warnings do not need to be immediately addressed. - Functions are no longer used as kwargs in recipes to help with (de)serialization in certain workflow engines.
- Removed
make_max_slabs_from_bulk
function.
- Added support for the Redun workflow engine.
- Added a simple CLI for (un)setting YAML config parameters.
- Internal refactoring of the
Vasp
calculator.
- Removed the demonstration Jobflow EMT slab recipe.
- Updated VASP co-pilot rules and
BulkSet.yaml
in accordance with recent MP benchmarking (#849). - Moved
fetch_atoms
toquacc.schemas
.
- VASP: Fixed a scenario where SIGMA was set to 0.05 if the user provided SIGMA > 0.05. This was supposed to happen when ISMEAR = 0 but was previously done when ISMEAR = -5, which is not influenced by SIGMA.
- Fixed
mp_metagga_relax_flow
to use a#!Python @flow
decorator instead of#!Python @job
- Fixed the Q-Chem Quasi-IRC job to run as one
#!Python @job
instead of two.
- Added new defect EMT workflows (@rwexler)
- Added new defect utilities (@rwexler)
- Added a custom Q-Chem calculator based on Pymatgen and Custodian. (@samblau)
- Added Q-chem core recipes. (@samblau)
- Added the ability to pass option
run_kwargs
to the.run()
method of the ASE optimizers.
- Removed the need to call
ct.dispatch
when launching Covalent workflows. - Renamed
quacc.util
toquacc.utils
- Refactored and standardized the NewtonNet recipes to match the other recipes
- The
WORKFLOW_ENGINE
setting can now be set dynamically, as expected.
- Changed package handling in
pyproject.toml
to better handle pip installs.
- Added NewtonNet recipes and better sella support (@kumaranu)
- Standardized
relax_cell
to beFalse
by default for all recipes. - Update the default
SIGMA
andISMEAR
inMPScanSet
to match the new values to be used in Atomate2.
- Fixed a bug on Windows where the trajectory file would not be closed after a relaxation, causing permission errors.
- Removed atomate2 as a dependency.
- Removed experimental Prefect support.
- Added a quacc global setting,
WORKFLOW_ENGINE
, to set the workflow manager. - Added support for the new
covalent-hpc-plugin
inpyproject.toml
.
- Quacc recipes are now decorated with generic
#!Python @job
,#!Python @subflow
, or#!Python @flow
decorators to be workflow engine-agnostic. - Covalent is now an optional dependency to allow the base
quacc
package to be dependency-light. - Default VASP pseudopotentials changed to
setups_pbe54.yaml
. - Changed
quacc.recipes.emt.jobflow
andquacc.recipes.emt.prefect
toquacc.recipes.emt._jobflow
andquacc.recipes.emt._prefect
- Set
LMAXMIX
based on theZ
value, not the s/p/d/f-block type. - Do not set automatically
LMAXTAU
to 8 for f-containing elements inVasp
calculator.
- Removed
quacc.recipes.emt.parsl
since it is now obsolete. - Removed
quacc config
command-line option.
- Added a
PRIMARY_STORE
quacc setting that, when specified, will automatically store all results in the specified Maggma store.
- The trajectory is now stored in
quacc.schemas.cclib.summarize_run
. - By default, results are now stored in a fixed
RESULTS_DIR
, which defaults to the current working directory.
- Fix path-related issues when running in local multi-threaded mode.
- Psi4 recipes now use
uks
for unrestricted calculations instead ofuhf
.
- Added support for Prefect.
- Added
quacc.wflow_tools
module.
- Made slab-related kwargs more consistent, such as by changing
slab_relax_electron
/slab_relax_app
to justslab_relax
regardless of workflow manager.
- Added this
CHANGELOG.md
file. - Added the
quacc.recipes.emt.parsl
module. - Added a CLI for
quacc
along with aquacc config
option to configure Covalent appropriately upon install. - Added generic type hints for schemas.
- Added a
CREATE_UNIQUE_DIR
global setting to have quacc automatically make a unique working directory for each calculation. - Added
CHECK_CONVERGENCE
to global settings.
- The
quacc
directory is now found in asrc
basefolder. - All recipes now support the
Atoms
object being passed in as anAtomsSchema
. - The
slab_relax_job
kwarg inrecipes.emt.slabs
andrecipes.vasp.slabs
workflows can no longer be set toNone
, as there are few situations where this would be desired. - Class-based recipes have been converted to functions since they don't save state or have inheritance.
- Switched the docs from Furo to Material for MkDocs.
- Expanded upon Parsl documentation.
- Modified tutorials and added example configs for Slurm.
- Temporary directories are cleaned up after the run is completed.
- Removed
quacc.recipes.vasp.jobflow
module to prioritize Covalent and Parsl.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.1.0 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.6 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.5 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.4 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.3 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.2 for more details.
See https://github.com/quantum-accelerators/quacc/releases/tag/v0.0.1 for more details.