All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- 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.