Package: occpy
Open Computational Chemistry (OCC)A next generation quantum chemistry and crystallography program and library.Note: occ is in early development, and is undergoing substantial changes regularly - it is not stable, and features are being added & developed rapidly.FeaturesQuantum chemistryOcc is already a fairly fully featured program for ground-state single point calculations in quantum chemistry, including:Hartree-Fock (Restricted, Unrestricted and General Spinorbitals)Density-Functional Theory (Restricted & Unrestricted Spinorbitals)The LDA, GGA and meta-GGA approximations are supportedGlobal hybrid functionals (range-separated will be added in the future)Density fitting (RI-JK) using an auxiliary basis for all above methodsImplicit solvation via SMDSeminumerical exchange (i.e. chain of spheres/COSX) has been implemented, but the performance is not yet good enough to be useful.Property calculations that are currently availableMolecular and atomic multipole moments up to hexadecapole (only Mulliken partitioning is implemented)Electrostatic potential calculationsElectron density (of course)CHELPG chargesI've recently added an implementation of the XDM dispersion model, which will be properly interfaced and made convenient to use
in the future.Not yet implemented:Gradients (and optimization of geometries)Perturbation theory (e.g. MP2)Coupled-cluster methodsCrystal structuresReading CIF files (via gemmi)Fast periodic bond detection, generation of symmetry unique molecules, dimers and more...CrystalExplorer model energiesAutomatic direct space summation of lattice energies for neutral molecular crystals including Wolf summation.Hirshfeld surfaces, and promolecule surfacesMiscSpherical harmonic transforms using FFTsMolecular point group detection/determinationReading/writing Gaussian fchk files (including MO normalization and reordering of basis functions)Reading molden files (including MO normalization and reordering of basis functions)Writing numpy.npyarraysReading QCSchema formatted JSON files.Reading basic Gaussian input filesMarching cubesMorton codes for linear-hashed octreesElectronegativity equilibration method for chargesFirst steps have been taken, with a proof of concept python interface for convenience & scripting using pybind11.Compilationocc requires a compliant C++17 compiler e.g. GCC-10 or newer.Dependenciesocc makes use of the the following open source libraries:cxxoptsEigen3(eigen3-dev)fmtgau2gridgemmiLBFGS++libcintlibxcnanoflannnlohmann/jsonpocketFFTscnlibspdlogAnd for the library tests/benchmarks:catch2Getting the source codeFirst clone the repository:git clone https://github.com/peterspackman/occ.gitGetting dependenciesMost of the dependencies can be downloaded and compiled viaCPM,
but you may wish to use system installed dependencies forlibxcandeigen3which will be searched for by default.
Noteoccrequires eigen version 3.4 or newer, which most operating systems do not package by default.Caching dependency downloadsIf you wish to download and compile all dependencies, but you're a developer or want to avoid downloading
the dependencies every new build, I'd recommend setting up a source cache for CPM
via the environment variableCPM_SOURCE_CACHEe.g. adding the following to your environment.export CPM_SOURCE_CACHE="$HOME/.cache/cpm"For building the repository I highly recommend usingninjarather
than make.Once the dependencies are installed, start an out-of-source build e.g.mkdir build && cd build
cmake .. -GNinjaOR, if you'd rather download all dependencies you could call cmake with:cmake .. -GNinja \
    -DUSE_SYSTEM_LIBXC=OFF \
    -DUSE_SYSTEM_EIGEN=OFFGenerally, speedups can be achieved by allowing the compiler to optimize for your platform using-march=nativeor similar flags.Finally, to build the binaryocc, runningninja occwill result in the binary being built under thebindirectory wherever
your build directory is locatedUsageAll following usage is a work in progress, expect significant changes
constantly for the time-being while the exact input format is decided.occBy defaultocc -hwill print out its usage options, but basic usage
given a geometry e.g.h2o.xyzformat would be:occ h2o.xyz b3lyp 6-31gBasis set locationsnoteThe path theoccwill use to search for basis sets can be configured with theOCC_BASIS_PATHenvironment variable,
or you can simply make the basis set available in your working directory.