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.
| 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 CInt::integrate and CInt::integrate_row_major. It is somehow similar to PySCF's mol.intor(intor, aosym, shls_slice), but the user shall check output shape and strides. 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;
// int1e_ipkin: the integral of kinetic energy operator with derivative on the first orbital
// [mu, nu, comp], column-major, same data memory layout to PySCF's 2/3-center intor
let : = cint_data.integrate.into;
assert_eq!;
// [comp, mu, nu], row-major, same shape to PySCF intor
let : = cint_data.integrate_row_major.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.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.1", = ["build_from_source", "static"] }
The source code will be automatically downloaded from github, and cargo will handle the building process.
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.