pbqff automates the construction of quartic force fields (QFFs) and the process of generating spectral data from them
Assuming you have the Rust toolchain installed, run
make install.full
As you can see in the Makefile, this simply runs
cargo build --features vers --release # indirectly through target/release/pbqff
sudo ln -sf $(realpath target/release/pbqff) $(PREFIX)/pbqff
sudo ln -sf $(realpath qffbuddy/qffbuddy.py) $(PREFIX)/qffbuddy
sudo cp $< $(MANDIR)/pbqff.1
to build the binary in release mode, and link it into the PREFIX
directory,
which is presumably on your $PATH
, under the name pbqff
. It also links
qffbuddy
into this directory and builds the man
page and installs that in
MANDIR
. PREFIX
defaults to /usr/bin
, which should work fine on Linux, but
on macOS, you will likely need to use /usr/local/bin
. MANDIR
defaults to
/usr/local/share/man/man1
, but you can override this as well. For example,
fully specifying the defaults would look something like this:
make install.full PREFIX=/usr/bin MANDIR=/usr/local/share/man/man1
If you don't care about qffbuddy
or the manual, you can use the plain
install
recipe, which defers to cargo install
. Depending on your Rust
installation, this will likely put the binary in $HOME/.cargo/bin
, which you
may need to add to your PATH
.
You can also build a PDF copy of the manual with make man/rpbqff.pdf
.
If you're installing pbqff
on a "normal" machine, you're very likely to have
most of these programs already. But if you install on a fresh, minimal Ubuntu
installation (like I do in this
video), you might need to install
some or all of these:
- curl (for rustup install)
- rust nightly toolchain
- git
- make
- openssl (on arch) or libssl-dev (on ubuntu) (for vers feature)
- pkg-config (for locating openssl)
- gcc (for linking)
- python3, python3-tk, idle3 (for qffbuddy)
- cmake, gfortran, libblas-dev, liblapack-dev (for MOPAC)
For installing or building pbqff
itself, you can skip this last set, which are
required for building MOPAC from source. However, if you want to run the tests
for pbqff
, you will need MOPAC installed at /opt/mopac/mopac
, so these
dependencies are necessary in that case.
pbqff supports running QFFs in the following coordinate systems:
- Symmetry-internal coordinates (SICs) via intder
- Cartesian coordinates
- Normal coordinates
The normal coordinates are determined automatically by running a Cartesian harmonic force field.
pbqff supports Molpro and Mopac for computing single-point energies and the PBS and Slurm queuing systems via psqs
An example input file for a Mopac QFF on c-C3H2 looks like:
geometry = """
C
C 1 CC
C 1 CC 2 CCC
H 2 CH 1 HCC 3 180.0
H 3 CH 1 HCC 2 180.0
CC = 1.42101898
CCC = 55.60133141
CH = 1.07692776
HCC = 147.81488230
"""
optimize = true
charge = 0
step_size = 0.005
coord_type = "sic"
program = "mopac"
queue = "slurm"
sleep_int = 2
job_limit = 2048
chunk_size = 1
template = """scfcrt=1.D-21 aux(precision=14 comp xp xs xw) PM6 THREADS=1 \
external=testfiles/params.dat"""
check_int = 100%
An optional GUI for preparing input files and running pbqff is also included in the qffbuddy directory
For pbqff
itself, please cite B. R. Westbrook and R. C. Fortenberry. "pbqff:
Push-Button Quartic Force Fields." J. Chem. Theory Comput., 2023. DOI:
10.1021/acs.jctc.3c00129
@article{Westbrook23_pbqff,
author = {Brent R. Westbrook and Ryan C. Fortenberry},
title = {pbqff: Push-Button Quartic Force Fields},
journal = {J. Chem. Theory Comput.},
volume = 19,
number = 9,
pages = {2606-2615},
year = 2023,
}
If you use symmetry-internal coordinates, you may also want to cite the original
INTDER
code by Wesley Allen:
@misc{intder,
author = {W. D. Allen and coworkers},
note = {$INTDER\ 2005$ is a General Program Written by W. D. Allen and Coworkers, which Performs Vibrational Analysis and Higher-Order Non-Linear Transformations.},
year = {2005}
}
And for the original VPT2 code in SPECTRO
, you can cite
@incollection{spectro91,
address = {Greenwich, Connecticut},
author = {J. F. Gaw and A. Willets and W. H. Green and N. C. Handy},
booktitle = {Advances in Molecular Vibrations and Collision Dynamics},
editor = {Joel M. Bowman and Mark A. Ratner},
pages = {170-185},
publisher = {JAI Press, Inc.},
title = {{SPECTRO: A} Program for the Derivation of Spectroscopic Constants From Provided Quartic Force Fields and Cubic Dipole Fields},
year = {1991}
}
I still need to pick a license for this project, but for now here's an important disclaimer from the MIT License:
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
I am happy to look at issues and want to fix them, but my responses may be delayed.
- factor out commonality in first part of
CoordType::run
- use or delete
Fitted
traitFindiff
actually has some default methods that make it useful, butFitted
doesn't provide any default methods and isn't used as a bound