libcint FFI Bindings and Wrapper
This project contains libcint (C language) FFI bindings, wrapper and build-from-source.
libcint is a C library for GTO (gaussian-type orbital) electronic integral, can be applied in computational chemistry, and has already been applied extensively in PySCF.
This is an alpha version and will soon be promoted to v0.1. After some documentation update and probably symmetry enhancements, a version v0.1 will be released.
| Resources | Badges |
|---|---|
| Crate | |
| API Document | |
| FFI Binding (libcint) | v6.1.2 |
| FFI Binding (qcint) | v6.1.2 |
| ECP Source Code (PySCF) | v2.9.0 |
This crate is not official bindgen project, nither libcint, PySCF, nor REST. It is originally intended to be some pioneer work for possible future development of rest_libcint wrapper.
Minimal Example
The most important function is be CInt::integrate. It is somehow similar to PySCF's mol.intor(intor, aosym, shls_slice). For more information on usage of crate libcint, we refer to API Documentation.
use *;
// This is for testing and development purpose only.
// For actual usage, you should initialize `CInt` with your own molecule data.
let cint_data: CInt = init_h2o_def2_tzvp;
// Obtain the integral of kinetic energy operator with derivative on the first orbital:
let : = cint_data.integrate.into;
assert_eq!;
Installation and Cargo Features
Install with pre-compiled libcint.so (recommended)
If you have already compiled libcint.so, then put path of this shared library in CINT_DIR or LD_LIBRARY_PATH (or REST_EXT_DIR). Then you just use this library in your Cargo.toml file by
[]
= { = "0.0.1" }
Install and also build-from-source
If you have not compiled libcint.so or libcint.a, then you are suggested to use this library by specifying some cargo features:
[]
= { = "0.0.1", = ["build_from_source", "static"] }
If access to github is not available, you can use environment variable CINT_SRC to specify source mirror of sunqm/libcint or sunqm/qcint.
Cargo features
- Default features: None of any listed below (use library provided by system or user, using sunqm/libcint, dynamic linking, without F12 and 4c1e support).
build_from_source: Trigger of C language library libcint building. This performs by CMake; source code will be automatically downloaded from github (if environment variableCINT_SRCnot specified).static: Use static library for linking. This will require static linklibcint.a, and dynamic linklibquadmath.so.qcint: Use sunqm/qcint instead of sunqm/libcint. Some integrals will not be available ifqcintdoes not supports that. This will also change URL source if cargo featurebuild_from_sourcespecified.with_f12: Whether F12 integrals (int2e_stg,int2e_yp, etc.) are supported.with_4c1e: Whether 4c1e integrals (int4c1e, etc.) are supported.
Shell environment variables
CINT_DIR,LD_LIBRARY_PATH,REST_EXT_DIR: Your compiled library path oflibcint.soandlibcint.a. This crate will try to find if this library is in directory root, ordirectory_root/lib. May override the library built by cargo featurebuild_from_source.CINT_SRC: Source of libcint or qcint (must be a git repository). Only works with cargo featurebuild_from_source.CINT_VIR: Version of libcint or qcint (e.g.v6.1.2, must starts withvprefix). Only works with cargo featurebuild_from_source.
50 lines RHF with Rust
This is a full example code to compute the RHF/def2-TZVP energy of H2O molecule, using
- This crate,
libcint, as electronic integral library (corresponding to some parts ofpyscf.gto); - RSTSR as tensor library (corresponding to NumPy and SciPy).
You will see that except for import and preparation, the code with core algorithms is 27 lines (see also directory examples/h2o_rhf). For comparison, the same code in Python is 23 lines (see also pyscf_h2o_rhf.py).
use *;
use *;
pub type Tsr = ;
pub type TsrView<'a> = ;
/// Obtain integrals (in row-major, same to PySCF but reverse of libcint)
License
This repository is licensed under Apache-2.0, the same to PySCF and REST.
- ECP part of code is directly copied and slightly modified from PySCF.
- Code for filling shell blocks of integrals is modified from an early version of rest_libcint.