libcint 0.2.3

FFI binding and GTO wrapper for libcint (C library)
Documentation
use crate::cint::CIntKind;
use crate::ffi::cecp_ffi::*;
use crate::ffi::wrapper_traits::panic_spinor;
use crate::ffi::wrapper_traits::Integrator;
use crate::impl_integrator;
use core::any::Any;
use core::ffi::{c_int, c_void};

impl_integrator!(
    ECPscalar,
    ECPscalar_optimizer,
    ECPscalar_sph,
    ECPscalar_cart,
    panic_spinor,
    true,
    true,
    false,
    1,
    1,
    2,
    vec![0, 0, 0, 0, 0, 1, 0, 1],
    "ECP",
    "ECPscalar",
    CIntKind::Ecp
);
impl_integrator!(
    ECPso,
    ECPso_optimizer,
    ECPso_sph,
    ECPso_cart,
    ECPso_spinor,
    true,
    true,
    true,
    3,
    1,
    2,
    vec![0, 0, 0, 0, 0, 3, 0, 1],
    "ECP",
    "ECPso",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_ignuc,
    ECPscalar_ignuc_optimizer,
    ECPscalar_ignuc_sph,
    ECPscalar_ignuc_cart,
    panic_spinor,
    true,
    true,
    false,
    3,
    3,
    2,
    vec![1, 0, 0, 0, 1, 1, 0, 3],
    "ECP",
    "ECPscalar_ignuc",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_ipnuc,
    ECPscalar_ipnuc_optimizer,
    ECPscalar_ipnuc_sph,
    ECPscalar_ipnuc_cart,
    panic_spinor,
    true,
    true,
    false,
    3,
    3,
    2,
    vec![1, 0, 0, 0, 1, 1, 0, 3],
    "ECP",
    "ECPscalar_ipnuc",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_ipipnuc,
    ECPscalar_ipipnuc_optimizer,
    ECPscalar_ipipnuc_sph,
    ECPscalar_ipipnuc_cart,
    panic_spinor,
    true,
    true,
    false,
    9,
    9,
    2,
    vec![2, 0, 0, 0, 2, 1, 0, 9],
    "ECP",
    "ECPscalar_ipipnuc",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_ipnucip,
    ECPscalar_ipnucip_optimizer,
    ECPscalar_ipnucip_sph,
    ECPscalar_ipnucip_cart,
    panic_spinor,
    true,
    true,
    false,
    9,
    9,
    2,
    vec![1, 1, 0, 0, 2, 1, 0, 9],
    "ECP",
    "ECPscalar_ipnucip",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_iprinv,
    ECPscalar_iprinv_optimizer,
    ECPscalar_iprinv_sph,
    ECPscalar_iprinv_cart,
    panic_spinor,
    true,
    true,
    false,
    3,
    3,
    2,
    vec![1, 1, 0, 0, 2, 1, 0, 3],
    "ECP",
    "ECPscalar_iprinv",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_ipiprinv,
    ECPscalar_ipiprinv_optimizer,
    ECPscalar_ipiprinv_sph,
    ECPscalar_ipiprinv_cart,
    panic_spinor,
    true,
    true,
    false,
    9,
    9,
    2,
    vec![2, 0, 0, 0, 2, 1, 0, 9],
    "ECP",
    "ECPscalar_ipiprinv",
    CIntKind::Ecp
);
impl_integrator!(
    ECPscalar_iprinvip,
    ECPscalar_iprinvip_optimizer,
    ECPscalar_iprinvip_sph,
    ECPscalar_iprinvip_cart,
    panic_spinor,
    true,
    true,
    false,
    9,
    9,
    2,
    vec![2, 0, 0, 0, 2, 1, 0, 9],
    "ECP",
    "ECPscalar_iprinvip",
    CIntKind::Ecp
);

pub fn get_ecp_integrator(name: &str) -> Option<Box<dyn Integrator>> {
    match name {
        "ecpscalar" => Some(Box::new(ECPscalar)),
        "ecpso" => Some(Box::new(ECPso)),
        "ecpscalar_ignuc" => Some(Box::new(ECPscalar_ignuc)),
        "ecpscalar_ipnuc" => Some(Box::new(ECPscalar_ipnuc)),
        "ecpscalar_ipipnuc" => Some(Box::new(ECPscalar_ipipnuc)),
        "ecpscalar_ipnucip" => Some(Box::new(ECPscalar_ipnucip)),
        "ecpscalar_iprinv" => Some(Box::new(ECPscalar_iprinv)),
        "ecpscalar_ipiprinv" => Some(Box::new(ECPscalar_ipiprinv)),
        "ecpscalar_iprinvip" => Some(Box::new(ECPscalar_iprinvip)),
        _ => None,
    }
}