DFTD3ZeroDampingParam

Struct DFTD3ZeroDampingParam 

Source
pub struct DFTD3ZeroDampingParam {
    pub s6: f64,
    pub s8: f64,
    pub s9: f64,
    pub rs6: f64,
    pub rs8: f64,
    pub alp: f64,
}
Expand description

Original DFT-D3 damping function with variant.

Original DFT-D3 damping function 1, based on a variant proposed by Chai and Head-Gordon 2. Since it is damping the dispersion energy to zero at short distances it is usually called zero damping scheme for simplicity. However, due to this short-range limit of the dispersion energy a repulsive contribution to the gradient can arise, which is considered artificial 3.

§Common API documentation for custom damping parameter specification

If your task is to retrive damping parameters of some specific xc-functionals, you may wish to try dftd3_load_param function.

In this crate, you may have three ways to define customized parameters:

  • By DFTD3***DampingParam struct. In this way, all parameters (include optional parameters with default value) must be provided. For example of B3-Zero:

    let param = DFTD3ZeroDampingParam {
        s6: 1.0,
        s8: 1.683,
        rs6: 1.139,
        rs8: 1.0,
        alp: 14.0,
        s9: if atm { 1.0 } else { 0.0 },
    };
    let param = param.new_param();
    // this will give param: DFTD3Param
  • By DFTD3***DampingParamBuilder struct. In this way, optional parameters can be omitted. For example of B3-Zero:

    let param = DFTD3ZeroDampingParamBuilder::default()
        .s8(1.683)
        .rs6(1.139)
        .s9(if atm { 1.0 } else { 0.0 })
        .init();
    // this will give param: DFTD3Param
  • By DFTD3Param utility. In this way, all parameters must be provided. For example of B3-Zero:

    let param = DFTD3Param::new_zero_damping(
        1.0,                         // s6
        1.683,                       // s8
        if atm { 1.0 } else { 0.0 }, // s9
        1.139,                       // rs6
        1.0,                         // rs8
        14.0,                        // alp
    );

Please note that different DFT-D3 versions may have different parameters, for example modified zero damping have another parameter bet for beta, and rational damping (D3-BJ) have parameter name a1, a2 instead of rs6, rs8.


  1. S. Grimme, J. Antony, S. Ehrlich, and H. Krieg. A consistent and accurate ab initio parametrization of density functional dispersion correction (DFT-D) for the 94 elements H-Pu. J. Chem. Phys., 132:154104, 2010. doi: 10.1063/1.3382344

  2. Chai, J.-D.; Head-Gordon, M. Long-range corrected hybrid density functionals with damped atom–atom dispersion corrections. Phys. Chem. Chem. Phys., 2008, 10(44), 6615–6620. doi: 10.1039/B810189B

  3. Grimme, S.; Ehrlich, S.; Goerigk, L. Effect of the damping function in dispersion corrected density functional theory. J. Comput. Chem., 2011, 32, 1456–1465. doi: 10.1002/jcc.21759

Fields§

§s6: f64

optional, default 1.0

§s8: f64§s9: f64

optional, default 1.0

§rs6: f64§rs8: f64

optional, default 1.0

§alp: f64

optional, default 14.0

Trait Implementations§

Source§

impl Clone for DFTD3ZeroDampingParam

Source§

fn clone(&self) -> DFTD3ZeroDampingParam

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl DFTD3LoadParamAPI for DFTD3ZeroDampingParam

Source§

impl DFTD3ParamAPI for DFTD3ZeroDampingParam

Source§

impl Debug for DFTD3ZeroDampingParam

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.