LCOV - code coverage report
Current view: top level - src - qs_dispersion_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:ccc2433) Lines: 29 30 96.7 %
Date: 2024-04-25 07:09:54 Functions: 1 5 20.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : !> \brief Definition of disperson types for DFT calculations
      10             : !> \author JGH (20.10.2008)
      11             : ! **************************************************************************************************
      12             : MODULE qs_dispersion_types
      13             : 
      14             :    USE input_section_types,             ONLY: section_vals_type
      15             :    USE kinds,                           ONLY: default_string_length,&
      16             :                                               dp
      17             :    USE qs_neighbor_list_types,          ONLY: neighbor_list_set_p_type,&
      18             :                                               release_neighbor_list_sets
      19             : #include "./base/base_uses.f90"
      20             : 
      21             :    IMPLICIT NONE
      22             : 
      23             :    PRIVATE
      24             : 
      25             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_dispersion_types'
      26             : 
      27             : ! **************************************************************************************************
      28             :    INTEGER, PARAMETER                       :: dftd2_pp = 1
      29             :    INTEGER, PARAMETER                       :: dftd3_pp = 2
      30             : 
      31             :    TYPE qs_dispersion_type
      32             :       INTEGER                                :: TYPE
      33             :       INTEGER                                :: pp_type
      34             :       INTEGER                                :: nl_type
      35             :       CHARACTER(LEN=default_string_length)  :: ref_functional
      36             :       REAL(KIND=dp)                          :: scaling
      37             :       REAL(KIND=dp)                          :: rc_disp
      38             :       REAL(KIND=dp)                          :: exp_pre
      39             :       TYPE(section_vals_type), POINTER       :: dftd_section
      40             :       LOGICAL                                :: verbose !extended output
      41             :       CHARACTER(LEN=default_string_length)  :: parameter_file_name
      42             :       CHARACTER(LEN=default_string_length)  :: kernel_file_name
      43             :       !DFT-D3 global parameters
      44             :       INTEGER                                :: max_elem !elements parametrized
      45             :       INTEGER                                :: maxc !max coordination number references per element
      46             :       REAL(KIND=dp)                          :: k1, k2, k3 !ad hoc parameters
      47             :       REAL(KIND=dp)                          :: alp !ad hoc parameters
      48             :       REAL(KIND=dp)                          :: s6, s8, sr6 !scaling parameters
      49             :       REAL(KIND=dp)                          :: a1, a2 !BJ scaling parameters
      50             :       REAL(KIND=dp)                          :: eps_cn
      51             :       LOGICAL                                :: doabc !neglect C9 terms
      52             :       LOGICAL                                :: c9cnst !use constant c9 terms
      53             :       LOGICAL                                :: lrc !calculate a long range correction
      54             :       LOGICAL                                :: srb !calculate a short range bond correction
      55             :       REAL(KIND=dp), DIMENSION(4)            :: srb_params ! parameters for SRB (s,g,t1,t2)
      56             :       TYPE(neighbor_list_set_p_type), &
      57             :          DIMENSION(:), POINTER                :: sab_vdw, sab_cn ! neighborlists for pair interactions
      58             :       REAL(KIND=dp), DIMENSION(:, :, :, :, :), POINTER &
      59             :          :: c6ab
      60             :       INTEGER, DIMENSION(:), POINTER           :: maxci
      61             :       REAL(KIND=dp), DIMENSION(:, :), POINTER  :: r0ab
      62             :       REAL(KIND=dp), DIMENSION(:), POINTER    :: rcov !covalent radii
      63             :       REAL(KIND=dp), DIMENSION(:), POINTER    :: r2r4 !atomic <r^2>/<r^4> values
      64             :       REAL(KIND=dp), DIMENSION(:), POINTER    :: cn !coordination numbers (defaults)
      65             :       TYPE(cn_kind_list), DIMENSION(:), POINTER &
      66             :          :: cnkind
      67             :       TYPE(cn_atom_list), DIMENSION(:), POINTER &
      68             :          :: cnlist
      69             :       ! KG molecular corrections
      70             :       LOGICAL                                :: domol
      71             :       REAL(KIND=dp)                          :: kgc8 !s8 scaling parameter
      72             :       !vdW-DF variables
      73             :       REAL(KIND=dp)                          :: pw_cutoff
      74             :       REAL(KIND=dp)                          :: b_value, c_value, scale_rvv10 !parameters for the rVV10 functional
      75             :       INTEGER                                :: nqs, nr_points
      76             :       !! The number of q points and radial points
      77             :       !! used in generating the kernel phi(q1*r, q2*r)
      78             :       !! (see DION 14-16 and SOLER 3)
      79             :       REAL(KIND=dp)                          :: r_max, q_cut, q_min, dk
      80             :       !! The maximum value of r, the maximum and minimum
      81             :       !! values of q and the k-space spacing of grid points.
      82             :       !! Note that, during a vdW run, values of q0 found
      83             :       !! larger than q_cut will be saturated (SOLER 6-7) to
      84             :       !! q_cut
      85             :       REAL(KIND=dp), DIMENSION(:), POINTER    :: q_mesh !! The values of all the q points used
      86             :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER &
      87             :          :: kernel !! A matrix holding the Fourier transformed kernel function
      88             :       !! for each pair of q values.  The ordering is
      89             :       !! kernel(k_point, q1_value, q2_value)
      90             :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER &
      91             :          :: d2phi_dk2 !! A matrix holding the second derivatives of the above
      92             :       !! kernel matrix at each of the q points.  Stored as
      93             :       !! d2phi_dk2(k_point, q1_value, q2_value)
      94             :       REAL(KIND=dp), DIMENSION(:, :), POINTER  :: d2y_dx2 !! 2nd derivatives of q_mesh for interpolation
      95             :       INTEGER, DIMENSION(:, :), POINTER  :: d3_exclude_pair
      96             :       INTEGER  :: nd3_exclude_pair
      97             :    END TYPE qs_dispersion_type
      98             : 
      99             :    TYPE qs_atom_dispersion_type
     100             :       INTEGER                                :: TYPE
     101             :       LOGICAL                                :: defined
     102             :       REAL(KIND=dp)                          :: vdw_radii !van der Waals radii
     103             :       REAL(KIND=dp)                          :: c6 !c6 coefficients
     104             :    END TYPE qs_atom_dispersion_type
     105             : 
     106             :    TYPE cn_kind_list
     107             :       REAL(KIND=dp)                          :: cnum
     108             :       INTEGER                                :: kind
     109             :    END TYPE cn_kind_list
     110             :    TYPE cn_atom_list
     111             :       REAL(KIND=dp)                          :: cnum
     112             :       INTEGER                                :: natom
     113             :       INTEGER, DIMENSION(:), POINTER          :: atom
     114             :    END TYPE cn_atom_list
     115             : 
     116             : ! **************************************************************************************************
     117             : 
     118             :    PUBLIC :: qs_atom_dispersion_type, qs_dispersion_type
     119             :    PUBLIC :: dftd2_pp, dftd3_pp
     120             :    PUBLIC :: qs_dispersion_release
     121             : 
     122             : ! **************************************************************************************************
     123             : CONTAINS
     124             : ! **************************************************************************************************
     125             : !> \brief ...
     126             : !> \param dispersion_env ...
     127             : ! **************************************************************************************************
     128        6805 :    SUBROUTINE qs_dispersion_release(dispersion_env)
     129             : 
     130             :       TYPE(qs_dispersion_type), POINTER                  :: dispersion_env
     131             : 
     132             :       INTEGER                                            :: i
     133             : 
     134        6805 :       IF (ASSOCIATED(dispersion_env)) THEN
     135        6782 :          IF (ASSOCIATED(dispersion_env%maxci)) THEN
     136             :             ! DFT-D3 arrays
     137         324 :             DEALLOCATE (dispersion_env%maxci)
     138         324 :             DEALLOCATE (dispersion_env%c6ab)
     139         324 :             DEALLOCATE (dispersion_env%r0ab)
     140         324 :             DEALLOCATE (dispersion_env%rcov)
     141         324 :             DEALLOCATE (dispersion_env%r2r4)
     142         324 :             DEALLOCATE (dispersion_env%cn)
     143         324 :             IF (ASSOCIATED(dispersion_env%cnkind)) THEN
     144           6 :                DEALLOCATE (dispersion_env%cnkind)
     145             :             END IF
     146         324 :             IF (ASSOCIATED(dispersion_env%cnlist)) THEN
     147           6 :                DO i = 1, SIZE(dispersion_env%cnlist)
     148           6 :                   DEALLOCATE (dispersion_env%cnlist(i)%atom)
     149             :                END DO
     150           2 :                DEALLOCATE (dispersion_env%cnlist)
     151             :             END IF
     152             :          END IF
     153             :          ! vdD-DF
     154        6782 :          IF (ASSOCIATED(dispersion_env%q_mesh)) THEN
     155          46 :             DEALLOCATE (dispersion_env%q_mesh)
     156             :          END IF
     157        6782 :          IF (ASSOCIATED(dispersion_env%kernel)) THEN
     158          46 :             DEALLOCATE (dispersion_env%kernel)
     159             :          END IF
     160        6782 :          IF (ASSOCIATED(dispersion_env%d2phi_dk2)) THEN
     161          46 :             DEALLOCATE (dispersion_env%d2phi_dk2)
     162             :          END IF
     163        6782 :          IF (ASSOCIATED(dispersion_env%d2y_dx2)) THEN
     164          46 :             DEALLOCATE (dispersion_env%d2y_dx2)
     165             :          END IF
     166        6782 :          IF (ASSOCIATED(dispersion_env%d3_exclude_pair)) THEN
     167           2 :             DEALLOCATE (dispersion_env%d3_exclude_pair)
     168             :          END IF
     169             :          ! neighborlists
     170        6782 :          CALL release_neighbor_list_sets(dispersion_env%sab_vdw)
     171        6782 :          CALL release_neighbor_list_sets(dispersion_env%sab_cn)
     172             : 
     173        6782 :          DEALLOCATE (dispersion_env)
     174             : 
     175             :       END IF
     176             : 
     177        6805 :    END SUBROUTINE qs_dispersion_release
     178             : 
     179           0 : END MODULE qs_dispersion_types
     180             : 

Generated by: LCOV version 1.15