#![allow(non_camel_case_types)]
use core::ffi::{c_char, c_int};
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _dftd3_error {
_unused: [u8; 0],
}
#[doc = " Error handle class"]
pub type dftd3_error = *mut _dftd3_error;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _dftd3_structure {
_unused: [u8; 0],
}
#[doc = " Molecular structure data class"]
pub type dftd3_structure = *mut _dftd3_structure;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _dftd3_model {
_unused: [u8; 0],
}
#[doc = " Dispersion model class"]
pub type dftd3_model = *mut _dftd3_model;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _dftd3_gcp {
_unused: [u8; 0],
}
#[doc = " Counter-poisecorrection parameters class"]
pub type dftd3_gcp = *mut _dftd3_gcp;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _dftd3_param {
_unused: [u8; 0],
}
#[doc = " Damping parameter class"]
pub type dftd3_param = *mut _dftd3_param;
unsafe extern "C" {
#[cfg(feature = "api-v0_2")]
#[doc = " Obtain library version as major * 10000 + minor * 100 + patch"]
pub fn dftd3_get_version() -> c_int;
#[cfg(feature = "api-v0_2")]
#[doc = " Create new error handle object"]
pub fn dftd3_new_error() -> dftd3_error;
#[cfg(feature = "api-v0_2")]
#[doc = " Check error handle status"]
pub fn dftd3_check_error(arg1: dftd3_error) -> c_int;
#[cfg(feature = "api-v0_2")]
#[doc = " Get error message from error handle"]
pub fn dftd3_get_error(arg1: dftd3_error, arg2: *mut c_char, arg3: *const c_int);
#[cfg(feature = "api-v0_2")]
#[doc = " Delete error handle object"]
pub fn dftd3_delete_error(arg1: *mut dftd3_error);
#[cfg(feature = "api-v0_2")]
#[doc = " Create new molecular structure data (quantities in Bohr)"]
pub fn dftd3_new_structure(
arg1: dftd3_error,
arg2: c_int,
arg3: *const c_int,
arg4: *const f64,
arg5: *const f64,
arg6: *const bool,
) -> dftd3_structure;
#[cfg(feature = "api-v0_2")]
#[doc = " Delete molecular structure data"]
pub fn dftd3_delete_structure(arg1: *mut dftd3_structure);
#[cfg(feature = "api-v0_2")]
#[doc = " Update coordinates and lattice parameters (quantities in Bohr)"]
pub fn dftd3_update_structure(
arg1: dftd3_error,
arg2: dftd3_structure,
arg3: *const f64,
arg4: *const f64,
);
#[cfg(feature = "api-v0_2")]
#[doc = " Create new D3 dispersion model"]
pub fn dftd3_new_d3_model(arg1: dftd3_error, arg2: dftd3_structure) -> dftd3_model;
#[cfg(feature = "api-v0_5")]
#[doc = " Set realspace cutoffs (quantities in Bohr)"]
pub fn dftd3_set_model_realspace_cutoff(
arg1: dftd3_error,
arg2: dftd3_model,
arg3: f64,
arg4: f64,
arg5: f64,
);
#[cfg(feature = "api-v0_2")]
#[doc = " Delete dispersion model"]
pub fn dftd3_delete_model(arg1: *mut dftd3_model);
#[cfg(feature = "api-v0_4")]
#[doc = " Create new zero damping parameters"]
pub fn dftd3_new_zero_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Load zero damping parameters from internal storage"]
pub fn dftd3_load_zero_damping(arg1: dftd3_error, arg2: *mut c_char, arg3: bool)
-> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Create new rational damping parameters"]
pub fn dftd3_new_rational_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Load rational damping parameters from internal storage"]
pub fn dftd3_load_rational_damping(
arg1: dftd3_error,
arg2: *mut c_char,
arg3: bool,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Create new modified zero damping parameters"]
pub fn dftd3_new_mzero_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
arg8: f64,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Load modified zero damping parameters from internal storage"]
pub fn dftd3_load_mzero_damping(
arg1: dftd3_error,
arg2: *mut c_char,
arg3: bool,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Create new modified rational damping parameters"]
pub fn dftd3_new_mrational_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
) -> dftd3_param;
#[cfg(feature = "api-v0_4")]
#[doc = " Load modified rational damping parameters from internal storage"]
pub fn dftd3_load_mrational_damping(
arg1: dftd3_error,
arg2: *mut c_char,
arg3: bool,
) -> dftd3_param;
#[cfg(feature = "api-v0_5")]
#[doc = " Create new optimized power damping parameters"]
pub fn dftd3_new_optimizedpower_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
arg8: f64,
) -> dftd3_param;
#[cfg(feature = "api-v0_5")]
#[doc = " Load optimized power damping parameters from internal storage"]
pub fn dftd3_load_optimizedpower_damping(
arg1: dftd3_error,
arg2: *mut c_char,
arg3: bool,
) -> dftd3_param;
#[cfg(feature = "api-v1_3")]
#[doc = " Create new CSO damping parameters"]
pub fn dftd3_new_cso_damping(
arg1: dftd3_error,
arg2: f64,
arg3: f64,
arg4: f64,
arg5: f64,
arg6: f64,
arg7: f64,
arg8: f64,
) -> dftd3_param;
#[cfg(feature = "api-v1_3")]
#[doc = " Load CSO damping parameters from internal storage"]
pub fn dftd3_load_cso_damping(arg1: dftd3_error, arg2: *mut c_char, arg3: bool) -> dftd3_param;
#[cfg(feature = "api-v0_2")]
#[doc = " Delete damping parameters"]
pub fn dftd3_delete_param(arg1: *mut dftd3_param);
#[cfg(feature = "api-v1_3")]
#[doc = " Load geometric counter-poise parameters from internal storage"]
pub fn dftd3_load_gcp_param(
arg1: dftd3_error,
arg2: dftd3_structure,
arg3: *mut c_char,
arg4: *mut c_char,
) -> dftd3_gcp;
#[cfg(feature = "api-v1_3")]
#[doc = " Set realspace cutoffs (quantities in Bohr)"]
pub fn dftd3_set_gcp_realspace_cutoff(arg1: dftd3_error, arg2: dftd3_gcp, arg3: f64, arg4: f64);
#[cfg(feature = "api-v1_3")]
#[doc = " Delete counter-poise parameters"]
pub fn dftd3_delete_gcp(arg1: *mut dftd3_gcp);
#[cfg(feature = "api-v0_2")]
#[doc = " Evaluate the dispersion energy and its derivatives"]
pub fn dftd3_get_dispersion(
arg1: dftd3_error,
arg2: dftd3_structure,
arg3: dftd3_model,
arg4: dftd3_param,
arg5: *mut f64,
arg6: *mut f64,
arg7: *mut f64,
);
#[cfg(feature = "api-v0_5")]
#[doc = " Evaluate the pairwise representation of the dispersion energy"]
pub fn dftd3_get_pairwise_dispersion(
arg1: dftd3_error,
arg2: dftd3_structure,
arg3: dftd3_model,
arg4: dftd3_param,
arg5: *mut f64,
arg6: *mut f64,
);
#[cfg(feature = "api-v1_3")]
#[doc = " Evaluate the dispersion energy and its derivatives"]
pub fn dftd3_get_counterpoise(
arg1: dftd3_error,
arg2: dftd3_structure,
arg3: dftd3_gcp,
arg4: *mut f64,
arg5: *mut f64,
arg6: *mut f64,
);
}