Source code for tad_dftd3.damping.rational

# This file is part of tad-dftd3.
# SPDX-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
r"""
Rational (Becke-Johnson) damping function
=========================================

This module defines the rational damping function, also known as Becke-Johnson
damping.

.. math::

    f^n_{\text{damp}}\left(R_0^{\text{AB}}\right) =
    \dfrac{R^n_{\text{AB}}}{R^n_{\text{AB}} +
    \left( a_1 R_0^{\text{AB}} + a_2 \right)^n}
"""
from typing import Dict

import torch

from .. import defaults
from ..typing import DD, Tensor

__all__ = ["rational_damping"]


[docs] def rational_damping( order: int, distances: Tensor, qq: Tensor, param: Dict[str, Tensor], ) -> Tensor: """ Rational damped dispersion interaction between pairs. Parameters ---------- order : int Order of the dispersion interaction, e.g. 6 for dipole-dipole, 8 for dipole-quadrupole and so on. distances : Tensor Pairwise distances between atoms in the system. qq : Tensor Quotient of C8 and C6 dispersion coefficients. param : dict[str, Tensor] DFT-D3 damping parameters. Returns ------- Tensor Values of the damping function. """ dd: DD = {"device": distances.device, "dtype": distances.dtype} a1 = param.get("a1", torch.tensor(defaults.A1, **dd)) a2 = param.get("a2", torch.tensor(defaults.A2, **dd)) return 1.0 / (distances.pow(order) + (a1 * torch.sqrt(qq) + a2).pow(order))