Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for a Q-Chem calculator and recipes (Part 1) #393

Merged
merged 290 commits into from
Aug 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
1ff5343
parameters in test_static_Job
samblau Jun 15, 2023
6fc0822
key calculator fixes
samblau Jun 15, 2023
2ceaf07
mock + tests working!
samblau Jun 15, 2023
c3d224b
fix test issue
samblau Jun 15, 2023
91bf9bf
Merge branch 'main' into sam_dev
samblau Jun 15, 2023
bec5b46
add sella skipifs
samblau Jun 15, 2023
0d7ba6c
Merge branch 'main' into sam_dev
samblau Jun 15, 2023
f496c51
go back to filename, but currently broken
samblau Jun 15, 2023
f0f8717
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 15, 2023
d7bb742
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 16, 2023
b12ee5a
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 16, 2023
44aeac1
Merge branch 'main' into sam_dev
samblau Jun 17, 2023
5a957ce
switch from string to optimizer object
samblau Jun 17, 2023
e5a574c
Cleanup time!!!!
Andrew-S-Rosen Jun 17, 2023
c22ee9b
Try this conftest fix?
Andrew-S-Rosen Jun 17, 2023
31b8bfa
DEBUG
Andrew-S-Rosen Jun 17, 2023
7a67281
fix sam's messy messy paths
Andrew-S-Rosen Jun 17, 2023
ad20f52
one final spring cleaning
Andrew-S-Rosen Jun 17, 2023
ca43843
Leave a few notes for Sam
Andrew-S-Rosen Jun 17, 2023
9ba7fd0
Fix docs to match MAIN
Andrew-S-Rosen Jun 17, 2023
3d36fe6
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 17, 2023
661337e
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 17, 2023
e99d907
ts_job and fix test_qchem_recipes
samblau Jun 17, 2023
dfd8805
Address deepsource's suggestions
samblau Jun 17, 2023
d40227d
fix test and deepsource
samblau Jun 17, 2023
9d4a31f
fuckin deepsource
samblau Jun 17, 2023
4fadf57
possible fix?
samblau Jun 17, 2023
f77ceaa
isort/black
Andrew-S-Rosen Jun 17, 2023
99d2a1d
smarter monkeypatching
samblau Jun 17, 2023
ad6fe59
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 17, 2023
dcf34cd
Starting IRC
samblau Jun 17, 2023
a168293
maybe everything will pass?
samblau Jun 17, 2023
0d84932
uncomment tests
samblau Jun 17, 2023
dda345e
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 18, 2023
6ab6270
re-comment out ts test for now
samblau Jun 18, 2023
a566901
commenting out sella qchem tests
samblau Jun 18, 2023
6ebe7cb
charge and spin good, nelectrons bad
samblau Jun 18, 2023
c7f58ab
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 18, 2023
27295f6
charge, spin, ad nelectrons all working
samblau Jun 18, 2023
8501bc8
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 18, 2023
fab1343
starting quasi_irc
samblau Jun 18, 2023
f97eb9c
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 19, 2023
4f91b8d
Merge branch 'main' into sam_dev
samblau Jun 19, 2023
9750daa
add orbital coeff parsing, writing
samblau Jun 20, 2023
c217045
Merge branch 'main' into sam_dev
samblau Jun 20, 2023
85844f7
qcinput_nearly_equal
samblau Jun 20, 2023
ab580e7
deepsource
samblau Jun 20, 2023
5dc2811
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 20, 2023
f9afea6
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 20, 2023
576fbdb
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 20, 2023
3d241dd
isort+black
Andrew-S-Rosen Jun 20, 2023
1d35772
Cleaner test suite
Andrew-S-Rosen Jun 20, 2023
41057e0
Typehint fix
Andrew-S-Rosen Jun 20, 2023
780b78a
Fix misspellings of defaults
Andrew-S-Rosen Jun 20, 2023
c5ceed4
Merge branch 'main' into sam_dev
samblau Jun 21, 2023
b802c39
improve coverage + fix bug
samblau Jun 21, 2023
64c7d8d
addressing some comments
samblau Jun 21, 2023
faed5cf
deepsource
samblau Jun 21, 2023
a4fc838
Merge branch 'main' into sam_dev
samblau Jun 22, 2023
b242d42
debugging
samblau Jun 22, 2023
9370dcf
debugging Q-Chem SCF read
samblau Jun 22, 2023
77015ab
Fix tests given scf_guess = read
samblau Jun 22, 2023
5aac5b3
Merge branch 'main' into sam_dev
samblau Jun 22, 2023
5afc1cf
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 24, 2023
49b2b39
Update tests.yaml
Andrew-S-Rosen Jun 24, 2023
18d835e
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 24, 2023
54c155b
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 24, 2023
ea88c69
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 25, 2023
18372c4
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 25, 2023
9f7cb5f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 25, 2023
f2f6d72
fuckin charge and spin
samblau Jun 25, 2023
8971904
more charge and spin
samblau Jun 25, 2023
1fce0da
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jun 25, 2023
e1d1b65
Responding to comments
samblau Jun 26, 2023
43263cb
Finish renaming kwargs
samblau Jun 26, 2023
8babf02
Addressing comments
samblau Jun 26, 2023
e9affab
More code review changes
samblau Jun 27, 2023
48f4c1b
Deepsource
samblau Jun 27, 2023
dce78e7
Merge branch 'main' into sam_dev
samblau Jun 27, 2023
89ecca3
messing with quasi_irc_job
samblau Jun 27, 2023
57c6fc0
add keep_going=True to IRC
samblau Jun 27, 2023
4851b57
Finish quasi_irc_job changes + docstring
samblau Jun 27, 2023
024a592
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 1, 2023
e3d396e
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 1, 2023
4d7123d
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 2, 2023
cf72acb
Merge branch 'main' into sam_dev
samblau Jul 2, 2023
5f10ec6
Merge branch 'main' into sam_dev
samblau Jul 3, 2023
191523d
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 4, 2023
a179c2c
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 4, 2023
8816716
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 4, 2023
4329999
isort+black
Andrew-S-Rosen Jul 4, 2023
f92f3b8
calculator cleanup
Andrew-S-Rosen Jul 4, 2023
546f97b
refactor
Andrew-S-Rosen Jul 4, 2023
51b7d13
fix test
Andrew-S-Rosen Jul 4, 2023
9653d09
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 4, 2023
b6a1ab3
remove traj
Andrew-S-Rosen Jul 4, 2023
315319c
more refactor
Andrew-S-Rosen Jul 4, 2023
ce90d82
add missing code comments
Andrew-S-Rosen Jul 4, 2023
c584f7e
prettier
Andrew-S-Rosen Jul 4, 2023
2ad818e
sanity check
Andrew-S-Rosen Jul 4, 2023
afc778e
more refactor
Andrew-S-Rosen Jul 4, 2023
9c5745c
fix test
Andrew-S-Rosen Jul 4, 2023
0d557ae
even more refactor!!
Andrew-S-Rosen Jul 4, 2023
73440da
fix test
Andrew-S-Rosen Jul 4, 2023
18ec2ca
more refactor!!
Andrew-S-Rosen Jul 4, 2023
f13e0cc
simplify
Andrew-S-Rosen Jul 4, 2023
5bf3385
atoms is not a kwarg
Andrew-S-Rosen Jul 4, 2023
072588a
atoms is still not a kwarg!
Andrew-S-Rosen Jul 4, 2023
43c158d
fix deepsource
Andrew-S-Rosen Jul 4, 2023
a3cfb29
deepsource
Andrew-S-Rosen Jul 4, 2023
1e776f5
fix test
Andrew-S-Rosen Jul 4, 2023
02cdd91
standardize name
Andrew-S-Rosen Jul 4, 2023
5a5f92a
more refactor!
Andrew-S-Rosen Jul 4, 2023
a55c6d3
fix tests
Andrew-S-Rosen Jul 4, 2023
c69ba02
Fix tests
Andrew-S-Rosen Jul 4, 2023
fdc9c96
fix test
Andrew-S-Rosen Jul 4, 2023
a4f5704
change ! --> .
Andrew-S-Rosen Jul 4, 2023
c5079c3
cleanup
Andrew-S-Rosen Jul 4, 2023
a8b733b
update tests
Andrew-S-Rosen Jul 4, 2023
a1cce4a
fix test
Andrew-S-Rosen Jul 4, 2023
63116a6
fix opt kwargs
Andrew-S-Rosen Jul 4, 2023
369fe2b
fix valuerror
Andrew-S-Rosen Jul 4, 2023
1b9eed6
fix valueerror
Andrew-S-Rosen Jul 4, 2023
8b26a33
fix kwargs
Andrew-S-Rosen Jul 4, 2023
a0e3a1c
fix opt flags
Andrew-S-Rosen Jul 4, 2023
8d32188
remove unneeded function call
Andrew-S-Rosen Jul 4, 2023
aef2898
fix tests
Andrew-S-Rosen Jul 4, 2023
ae3a150
switch test suite
Andrew-S-Rosen Jul 4, 2023
c302839
fix env var
Andrew-S-Rosen Jul 4, 2023
f73f504
reintroduce env var
Andrew-S-Rosen Jul 4, 2023
04936cb
adjust monkeypatch
Andrew-S-Rosen Jul 4, 2023
3dee187
fix type
Andrew-S-Rosen Jul 4, 2023
8bd3c99
plz fix <3
Andrew-S-Rosen Jul 4, 2023
2decbc3
fix setting>?
Andrew-S-Rosen Jul 4, 2023
27ce0f5
temp workaround
Andrew-S-Rosen Jul 4, 2023
e0c5400
no delenv
Andrew-S-Rosen Jul 4, 2023
02b1d4f
revert
Andrew-S-Rosen Jul 4, 2023
5b7c436
fix
Andrew-S-Rosen Jul 5, 2023
f18a9e9
update codecov
Andrew-S-Rosen Jul 5, 2023
58af9c6
fix teardown
Andrew-S-Rosen Jul 5, 2023
3489330
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 5, 2023
34e7bf9
fix failing test
Andrew-S-Rosen Jul 5, 2023
8e5181f
fix codecov?
Andrew-S-Rosen Jul 5, 2023
8feb091
codecov fix
Andrew-S-Rosen Jul 5, 2023
6532c0f
better test suite
Andrew-S-Rosen Jul 5, 2023
53591b1
fix codecov
Andrew-S-Rosen Jul 5, 2023
daa7c93
better test suite handling
Andrew-S-Rosen Jul 5, 2023
f6ae3a8
deepsource
Andrew-S-Rosen Jul 5, 2023
ed94af3
loosen tests
Andrew-S-Rosen Jul 5, 2023
d583bb2
less tight tests
Andrew-S-Rosen Jul 5, 2023
a27d46b
fix test suite
Andrew-S-Rosen Jul 5, 2023
e59b85b
fix codecov
Andrew-S-Rosen Jul 5, 2023
5014bb0
update test suite
Andrew-S-Rosen Jul 5, 2023
593b999
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 5, 2023
6fdcb43
Delete test_sella.py
Andrew-S-Rosen Jul 5, 2023
a9f7498
Update tests.yaml
Andrew-S-Rosen Jul 5, 2023
a652772
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 5, 2023
6ee315c
fix merge conflicts
Andrew-S-Rosen Jul 7, 2023
719b2df
fix merge conflict
Andrew-S-Rosen Jul 7, 2023
af8d898
fix conflict
Andrew-S-Rosen Jul 7, 2023
9b4ac12
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
219abe4
restore docs
Andrew-S-Rosen Jul 7, 2023
f7383f2
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
49fe149
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
ffc6469
refactor
Andrew-S-Rosen Jul 7, 2023
51f6723
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
999ed79
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
8805a8f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
810e23f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 7, 2023
a4c4685
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 8, 2023
d5b870f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 9, 2023
61078c3
Fix
Andrew-S-Rosen Jul 9, 2023
73c164f
fix changelog
Andrew-S-Rosen Jul 9, 2023
b8da90a
update changelog
Andrew-S-Rosen Jul 9, 2023
1494829
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 9, 2023
d20caa9
update test suite
Andrew-S-Rosen Jul 9, 2023
87ebb94
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
f41eded
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
9274b21
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
ccf42ea
Merge branch 'sam_dev2' into sam_dev
Andrew-S-Rosen Jul 10, 2023
24b124a
Fix pydantic mutability
Andrew-S-Rosen Jul 10, 2023
192f93f
put back check_convergence
Andrew-S-Rosen Jul 10, 2023
0c89d2f
deepsource
Andrew-S-Rosen Jul 10, 2023
a221dfe
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
74da283
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
f37a37f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 10, 2023
a105b99
Update .codecov.yml
Andrew-S-Rosen Jul 11, 2023
ff02361
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 11, 2023
cce644d
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 14, 2023
d80e87d
Update .codecov.yml
Andrew-S-Rosen Jul 14, 2023
3955cff
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 16, 2023
03fdc75
clean up pytest
Andrew-S-Rosen Jul 16, 2023
6a9426b
deepsource
Andrew-S-Rosen Jul 16, 2023
e25e893
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 16, 2023
57f8570
Merge branch 'main' into sam_dev
Andrew-S-Rosen Jul 18, 2023
77071ea
Merge branch 'main' into sam_dev
samblau Jul 18, 2023
e5a8ba5
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 1, 2023
e55dc24
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 1, 2023
b489938
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 10, 2023
f2852ae
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 12, 2023
50cb7bb
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 17, 2023
6af3491
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 19, 2023
60b65cc
Update core.py
Andrew-S-Rosen Aug 19, 2023
105ab6c
Update tests.yaml
Andrew-S-Rosen Aug 19, 2023
cc38292
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 20, 2023
69711b7
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 20, 2023
a527088
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 20, 2023
4e555aa
Update .codecov.yml
Andrew-S-Rosen Aug 20, 2023
5fa39e3
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 21, 2023
169bd25
Merge branch 'main' into sam_dev
samblau Aug 21, 2023
0850cbb
Fix codecov
Andrew-S-Rosen Aug 21, 2023
fc84897
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 22, 2023
9aeef40
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 22, 2023
a241ecf
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 23, 2023
f2d65d0
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 24, 2023
b1fe0cd
Update codes.md
Andrew-S-Rosen Aug 24, 2023
31edb06
Update cclib.py
Andrew-S-Rosen Aug 24, 2023
1c4822d
Update settings.py
Andrew-S-Rosen Aug 24, 2023
2e03cb9
Update settings.py
Andrew-S-Rosen Aug 24, 2023
39a2468
Rename test_atoms.py to test_util_atoms.py
Andrew-S-Rosen Aug 25, 2023
f04f301
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 25, 2023
74e4a5a
Update tests.yaml
Andrew-S-Rosen Aug 25, 2023
4cb702c
Delete __init__.py
Andrew-S-Rosen Aug 25, 2023
e1889cc
Update test_qchem_recipes.py
Andrew-S-Rosen Aug 25, 2023
ae6d56b
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 25, 2023
044c253
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 25, 2023
6e84ea3
Update codes.md
Andrew-S-Rosen Aug 25, 2023
a99cbb7
Update core.py
Andrew-S-Rosen Aug 25, 2023
6f93978
Update core.py
Andrew-S-Rosen Aug 25, 2023
c09fd42
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 25, 2023
8ea22b9
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 25, 2023
a51b798
fix
Andrew-S-Rosen Aug 26, 2023
033dac5
fix
Andrew-S-Rosen Aug 26, 2023
666fa4f
fix
Andrew-S-Rosen Aug 26, 2023
72d1069
fix
Andrew-S-Rosen Aug 26, 2023
3ba2cba
isort
Andrew-S-Rosen Aug 26, 2023
7edf927
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 26, 2023
8eb1a1b
fetch
Andrew-S-Rosen Aug 26, 2023
0da1597
Merge remote-tracking branch 'samblau/sam_dev' into sam_dev
Andrew-S-Rosen Aug 26, 2023
70d99e0
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 26, 2023
27bcf0f
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 27, 2023
c5c5368
update tests
Andrew-S-Rosen Aug 27, 2023
41ebfc4
fix test
Andrew-S-Rosen Aug 27, 2023
5e9a7de
Merge branch 'main' into sam_dev
Andrew-S-Rosen Aug 27, 2023
2138643
fix test
Andrew-S-Rosen Aug 27, 2023
077015f
Update tests.yaml
Andrew-S-Rosen Aug 27, 2023
6f323e3
update tests
Andrew-S-Rosen Aug 27, 2023
952b78d
qchem
Andrew-S-Rosen Aug 27, 2023
97e9605
add Q-Chem to docs
Andrew-S-Rosen Aug 27, 2023
63d01d6
fix changelog
Andrew-S-Rosen Aug 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,47 @@ jobs:
uses: codecov/codecov-action@v3
if: github.repository == 'Quantum-Accelerators/quacc'

tests-qchem:
strategy:
fail-fast: true
matrix:
python-version: ["3.11"]
runs-on: ubuntu-latest

defaults:
run:
shell: bash -l {0}

steps:
- name: Check out repo
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: pip
cache-dependency-path: setup.py

- name: Set up conda
uses: conda-incubator/setup-miniconda@v2
with:
python-version: ${{ matrix.python-version }}
activate-environment: quacc-env

- name: Install pip packages
run: pip install .[strict,dev,optimizers]

- name: Install conda packages
run: conda install -c conda-forge openbabel

- name: Run tests with pytest
run: pytest -k 'qchem' --cov=quacc --cov-report=xml

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
if: github.repository == 'Quantum-Accelerators/quacc'

tests-covalent:
runs-on: ubuntu-latest
strategy:
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

## [Unreleased]

### Added

- Added a custom Q-Chem calculator based on Pymatgen and Custodian.
- Added Q-chem core recipes.
- Added the ability to pass option `run_kwargs` to the `.run()` method of the ASE optimizers.

### Changed

- Renamed `quacc.util` to `quacc.utils`
Expand Down Expand Up @@ -96,6 +102,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Added a CLI for `quacc` along with a `quacc config` option to configure Covalent appropriately upon install.
- Added generic type hints for schemas.
- Added a `CREATE_UNIQUE_WORKDIR` global setting to have quacc automatically make a unique working directory for each calculation.
- Added `CHECK_CONVERGENCE` to global settings.

### Changed

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The three main goals of quacc are to:

3. Enable a seamless interface between the [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/) and the software infrastructure powering the [Materials Project](https://materialsproject.org).

Quacc currently has pre-made recipes for the following packages: DFTB+, Gaussian, GULP, NewtonNet, ORCA, Psi4, tblite, and VASP. It's simple to add your favorite!
Quacc currently has pre-made recipes for the following packages: DFTB+, Gaussian, GULP, NewtonNet, ORCA, Psi4, Q-Chem, tblite, and VASP. It's simple to add your favorite!

## Documentation

Expand Down
13 changes: 13 additions & 0 deletions docs/install/codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,19 @@ QUACC_ORCA_CMD=/path/to/my/orca/orca

If you plan to use Psi4 with quacc, you will need to install it prior to use. This can be done as described in the [Psi4 installation guide](https://psicode.org/installs/latest/).

## Q-Chem

!!! Note

[Q-Chem](https://www.q-chem.com/) is a powerful, general-purpose molecular DFT code with a variety of features.

If you plan to use Q-Chem with Quacc, you will need to install `openbabel` and `sella` (recommended) prior to use. This can be done as follows:

```bash
conda install -c conda-forge openbabel
pip install quacc[optimizers]
```

## tblite

!!! Note
Expand Down
3 changes: 3 additions & 0 deletions docs/user/recipes/qchem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Q-Chem

🚧 Under Construction 🚧
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ nav:
- user/recipes/newtonnet.md
- user/recipes/orca.md
- user/recipes/psi4.md
- user/recipes/qchem.md
- user/recipes/tblite.md
- user/recipes/vasp.md
- user/settings.md
Expand Down
207 changes: 207 additions & 0 deletions src/quacc/calculators/qchem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
"""A Q-Chem calculator built on Pymatgen and Custodian functionality"""
from __future__ import annotations

import inspect
import os
import struct

from ase import Atoms, units
from ase.calculators.calculator import FileIOCalculator
from monty.io import zopen
from pymatgen.io.ase import AseAtomsAdaptor
from pymatgen.io.qchem.outputs import QCOutput
from pymatgen.io.qchem.sets import ForceSet

from quacc.custodian import qchem as custodian_qchem
from quacc.utils.atoms import check_charge_and_spin


class QChem(FileIOCalculator):
"""

Parameters
----------
atoms
The Atoms object to be used for the calculation.
cores
Number of cores to use for the Q-Chem calculation.
charge
The total charge of the molecular system.
Effectively defaults to zero.
spin_multiplicity
The spin multiplicity of the molecular system.
Effectively defaults to the lowest spin state given the molecular structure and charge.
qchem_input_params
Dictionary of Q-Chem input parameters to be passed to pymatgen.io.qchem.sets.ForceSet.
**fileiocalculator_kwargs
Additional arguments to be passed to ase.calculators.calculator.FileIOCalculator.

Returns
-------
Atoms
The ASE Atoms object with attached Q-Chem calculator.
"""

implemented_properties = ["energy", "forces"]

def __init__(
self,
atoms: Atoms,
charge: None | int = None,
spin_multiplicity: None | int = None,
method: str | None = None,
cores: int = 1,
qchem_input_params: dict | None = None,
**fileiocalculator_kwargs,
):
# Assign variables to self
self.atoms = atoms
self.cores = cores
self.charge = charge
self.spin_multiplicity = spin_multiplicity
self.qchem_input_params = qchem_input_params or {}
self.fileiocalculator_kwargs = fileiocalculator_kwargs

# Sanity checks
if "directory" in self.fileiocalculator_kwargs:
raise NotImplementedError("The directory kwarg is not supported.")

if "overwrite_inputs" not in self.qchem_input_params:
self.qchem_input_params["overwrite_inputs"] = {}

if self.charge is None and self.spin_multiplicity is not None:
raise ValueError("If setting spin_multiplicity, must also specify charge.")

if self.qchem_input_params.get("smd_solvent") and self.qchem_input_params.get(
"pcm_dielectric"
):
raise ValueError("PCM and SMD cannot be employed simultaneously.")

if "rem" not in self.qchem_input_params["overwrite_inputs"]:
self.qchem_input_params["overwrite_inputs"]["rem"] = {}
if (
method
and "method" not in self.qchem_input_params["overwrite_inputs"]["rem"]
):
self.qchem_input_params["overwrite_inputs"]["rem"]["method"] = method

# We will save the parameters that have been passed to the Q-Chem calculator via FileIOCalculator's
# self.default_parameters
self.default_parameters = {
"cores": self.cores,
"charge": self.charge,
"spin_multiplicity": self.spin_multiplicity,
}

# We also want to save the contents of self.qchem_input_params. However, the overwrite_inputs
# key will have a corresponding value which is either an empty dictionary or a nested dict of
# dicts, requiring a bit of careful unwrapping.
for key in self.qchem_input_params:
if key == "overwrite_inputs":
for subkey in self.qchem_input_params[key]:
for subsubkey in self.qchem_input_params[key][subkey]:
self.default_parameters[
f"overwrite_{subkey}_{subsubkey}"
] = self.qchem_input_params[key][subkey][subsubkey]
else:
self.default_parameters[key] = self.qchem_input_params[key]

charge, spin_multiplicity = check_charge_and_spin(
atoms, self.charge, self.spin_multiplicity
)
self.charge = charge
self.spin_multiplicity = spin_multiplicity

# Get Q-Chem executable command
self.command = self._manage_environment()

# Instantiate previous orbital coefficients
self.prev_orbital_coeffs = None

# Instantiate the calculator
FileIOCalculator.__init__(
self,
restart=None,
ignore_bad_restart_file=FileIOCalculator._deprecated,
label=None,
atoms=self.atoms,
**self.fileiocalculator_kwargs,
)

def _manage_environment(self) -> str:
"""
Manage the environment for the Q-Chem calculator.

Returns
-------
str
The command flag to pass to the Q-Chem calculator.
"""

# Return the command flag
run_qchem_custodian_file = os.path.abspath(inspect.getfile(custodian_qchem))
return f"python {run_qchem_custodian_file} {self.cores}"

def write_input(self, atoms, properties=None, system_changes=None):
FileIOCalculator.write_input(self, atoms, properties, system_changes)
atoms.charge = self.charge
atoms.spin_multiplicity = self.spin_multiplicity
mol = AseAtomsAdaptor.get_molecule(atoms)
if self.prev_orbital_coeffs is not None:
with open("53.0", mode="wb") as file:
for val in self.prev_orbital_coeffs:
data = struct.pack("d", val)
file.write(data)
if "overwrite_inputs" not in self.qchem_input_params:
self.qchem_input_params["overwrite_inputs"] = {}

Check warning on line 156 in src/quacc/calculators/qchem.py

View check run for this annotation

Codecov / codecov/patch

src/quacc/calculators/qchem.py#L156

Added line #L156 was not covered by tests
if "rem" not in self.qchem_input_params["overwrite_inputs"]:
self.qchem_input_params["overwrite_inputs"]["rem"] = {}

Check warning on line 158 in src/quacc/calculators/qchem.py

View check run for this annotation

Codecov / codecov/patch

src/quacc/calculators/qchem.py#L158

Added line #L158 was not covered by tests
if "scf_guess" not in self.qchem_input_params["overwrite_inputs"]["rem"]:
self.qchem_input_params["overwrite_inputs"]["rem"]["scf_guess"] = "read"
qcin = ForceSet(mol, qchem_version=6, **self.qchem_input_params)
qcin.write("mol.qin")

def read_results(self):
data = QCOutput("mol.qout").data
self.results["energy"] = data["final_energy"] * units.Hartree
tmp_grad_data = []
# Read the gradient scratch file in 8 byte chunks
with zopen("131.0", mode="rb") as file:
binary = file.read()
for ii in range(int(len(binary) / 8)):
tmp_grad_data.append(
struct.unpack("d", binary[ii * 8 : (ii + 1) * 8])[0]
)
# Reshape the gradient into N x 3
grad = []
for ii in range(int(len(tmp_grad_data) / 3)):
grad.append(
[
float(tmp_grad_data[ii * 3]),
float(tmp_grad_data[ii * 3 + 1]),
float(tmp_grad_data[ii * 3 + 2]),
]
)
# Ensure that the scratch values match the correct values from the output file
# but with higher precision
if data["pcm_gradients"] is not None:
gradient = data["pcm_gradients"][0]
else:
gradient = data["gradients"][0]
for ii, subgrad in enumerate(grad):
for jj, val in enumerate(subgrad):
if abs(gradient[ii, jj] - val) > 1e-6:
raise ValueError(

Check warning on line 194 in src/quacc/calculators/qchem.py

View check run for this annotation

Codecov / codecov/patch

src/quacc/calculators/qchem.py#L194

Added line #L194 was not covered by tests
"Difference between gradient value in scratch file vs. output file should not be this large."
)
gradient[ii, jj] = val
# Convert gradient to force + deal with units
self.results["forces"] = gradient * (-units.Hartree / units.Bohr)
self.prev_orbital_coeffs = []
# Read orbital coefficients scratch file in 8 byte chunks
with zopen("53.0", mode="rb") as file:
binary = file.read()
for ii in range(int(len(binary) / 8)):
self.prev_orbital_coeffs.append(
struct.unpack("d", binary[ii * 8 : (ii + 1) * 8])[0]
)