LCOV - code coverage report
Current view: top level - src - semi_empirical_mpole_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:42dac4a) Lines: 98.1 % 52 51
Test Date: 2025-07-25 12:55:17 Functions: 66.7 % 9 6

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Definition of the semi empirical multipole integral expansions types
      10              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      11              : ! **************************************************************************************************
      12              : MODULE semi_empirical_mpole_types
      13              : 
      14              :    USE kinds,                           ONLY: dp
      15              : #include "./base/base_uses.f90"
      16              : 
      17              :    IMPLICIT NONE
      18              : 
      19              :    PRIVATE
      20              : 
      21              : ! *** Global parameters ***
      22              : 
      23              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'semi_empirical_mpole_types'
      24              : 
      25              : ! **************************************************************************************************
      26              : !> \brief Semi-empirical integral multipole expansion type
      27              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      28              : ! **************************************************************************************************
      29              :    TYPE semi_empirical_mpole_type
      30              :       LOGICAL, DIMENSION(3)                    :: task = .FALSE.
      31              :       INTEGER                                  :: indi = -1, indj = -1
      32              :       REAL(KIND=dp)                            :: c = -1.0_dp
      33              :       REAL(KIND=dp), DIMENSION(3)              :: d = -1.0_dp
      34              :       REAL(KIND=dp), DIMENSION(3, 3)            :: qc = -1.0_dp ! quadrupole cartesian
      35              :       REAL(KIND=dp), DIMENSION(5)              :: qs = -1.0_dp ! quadrupole spherical
      36              :       ! alternative definition used in GKS integral routines
      37              :       REAL(KIND=dp)                            :: cs = -1.0_dp
      38              :       REAL(KIND=dp), DIMENSION(3)              :: ds = -1.0_dp
      39              :       REAL(KIND=dp), DIMENSION(3, 3)            :: qq = -1.0_dp ! quadrupole cartesian
      40              :    END TYPE semi_empirical_mpole_type
      41              : 
      42              : ! **************************************************************************************************
      43              : !> \brief Semi-empirical integral multipole expansion type - pointer type
      44              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      45              : ! **************************************************************************************************
      46              :    TYPE semi_empirical_mpole_p_type
      47              :       TYPE(semi_empirical_mpole_type), POINTER :: mpole => NULL()
      48              :    END TYPE semi_empirical_mpole_p_type
      49              : 
      50              : ! **************************************************************************************************
      51              : !> \brief Global Multipolar NDDO information type
      52              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      53              : ! **************************************************************************************************
      54              :    TYPE nddo_mpole_type
      55              :       REAL(KIND=dp), DIMENSION(:), POINTER     :: charge => NULL(), efield0 => NULL()
      56              :       REAL(KIND=dp), DIMENSION(:, :), POINTER   :: dipole => NULL(), efield1 => NULL(), efield2 => NULL()
      57              :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER :: quadrupole => NULL()
      58              :    END TYPE nddo_mpole_type
      59              : 
      60              :    PUBLIC :: semi_empirical_mpole_type, &
      61              :              semi_empirical_mpole_p_type, &
      62              :              semi_empirical_mpole_p_create, &
      63              :              semi_empirical_mpole_p_release, &
      64              :              nddo_mpole_type, &
      65              :              nddo_mpole_create, &
      66              :              nddo_mpole_release
      67              : 
      68              : CONTAINS
      69              : 
      70              : ! **************************************************************************************************
      71              : !> \brief Allocate semi-empirical mpole type
      72              : !> \param mpole ...
      73              : !> \param ndim ...
      74              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      75              : ! **************************************************************************************************
      76         2240 :    SUBROUTINE semi_empirical_mpole_p_create(mpole, ndim)
      77              :       TYPE(semi_empirical_mpole_p_type), DIMENSION(:), &
      78              :          POINTER                                         :: mpole
      79              :       INTEGER, INTENT(IN)                                :: ndim
      80              : 
      81              :       INTEGER                                            :: i
      82              : 
      83         2240 :       CPASSERT(.NOT. ASSOCIATED(mpole))
      84        50738 :       ALLOCATE (mpole(ndim))
      85        46258 :       DO i = 1, ndim
      86        44018 :          NULLIFY (mpole(i)%mpole)
      87        46258 :          CALL semi_empirical_mpole_create(mpole(i)%mpole)
      88              :       END DO
      89              : 
      90         2240 :    END SUBROUTINE semi_empirical_mpole_p_create
      91              : 
      92              : ! **************************************************************************************************
      93              : !> \brief Deallocate the semi-empirical mpole type
      94              : !> \param mpole ...
      95              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
      96              : ! **************************************************************************************************
      97         3964 :    SUBROUTINE semi_empirical_mpole_p_release(mpole)
      98              :       TYPE(semi_empirical_mpole_p_type), DIMENSION(:), &
      99              :          POINTER                                         :: mpole
     100              : 
     101              :       INTEGER                                            :: i
     102              : 
     103         3964 :       IF (ASSOCIATED(mpole)) THEN
     104        46258 :          DO i = 1, SIZE(mpole)
     105        46258 :             CALL semi_empirical_mpole_release(mpole(i)%mpole)
     106              :          END DO
     107         2240 :          DEALLOCATE (mpole)
     108              :       END IF
     109              : 
     110         3964 :    END SUBROUTINE semi_empirical_mpole_p_release
     111              : 
     112              : ! **************************************************************************************************
     113              : !> \brief Allocate semi-empirical mpole type
     114              : !> \param mpole ...
     115              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
     116              : ! **************************************************************************************************
     117        44018 :    SUBROUTINE semi_empirical_mpole_create(mpole)
     118              :       TYPE(semi_empirical_mpole_type), POINTER           :: mpole
     119              : 
     120        44018 :       CPASSERT(.NOT. ASSOCIATED(mpole))
     121      1980810 :       ALLOCATE (mpole)
     122       176072 :       mpole%task = .FALSE.
     123        44018 :       mpole%indi = 0
     124        44018 :       mpole%indj = 0
     125        44018 :       mpole%c = HUGE(0.0_dp)
     126       176072 :       mpole%d = HUGE(0.0_dp)
     127       572234 :       mpole%qc = HUGE(0.0_dp)
     128       264108 :       mpole%qs = HUGE(0.0_dp)
     129        44018 :       mpole%cs = HUGE(0.0_dp)
     130       176072 :       mpole%ds = HUGE(0.0_dp)
     131       572234 :       mpole%qq = HUGE(0.0_dp)
     132        44018 :    END SUBROUTINE semi_empirical_mpole_create
     133              : 
     134              : ! **************************************************************************************************
     135              : !> \brief Deallocate the semi-empirical mpole type
     136              : !> \param mpole ...
     137              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
     138              : ! **************************************************************************************************
     139        44018 :    SUBROUTINE semi_empirical_mpole_release(mpole)
     140              :       TYPE(semi_empirical_mpole_type), POINTER           :: mpole
     141              : 
     142        44018 :       IF (ASSOCIATED(mpole)) THEN
     143        44018 :          DEALLOCATE (mpole)
     144              :       END IF
     145              : 
     146        44018 :    END SUBROUTINE semi_empirical_mpole_release
     147              : 
     148              : ! **************************************************************************************************
     149              : !> \brief Allocate NDDO multipole type
     150              : !> \param nddo_mpole ...
     151              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
     152              : ! **************************************************************************************************
     153           32 :    SUBROUTINE nddo_mpole_create(nddo_mpole)
     154              :       TYPE(nddo_mpole_type), POINTER                     :: nddo_mpole
     155              : 
     156           32 :       CPASSERT(.NOT. ASSOCIATED(nddo_mpole))
     157           32 :       ALLOCATE (nddo_mpole)
     158              :       NULLIFY (nddo_mpole%charge)
     159              :       NULLIFY (nddo_mpole%dipole)
     160              :       NULLIFY (nddo_mpole%quadrupole)
     161              :       NULLIFY (nddo_mpole%efield0)
     162              :       NULLIFY (nddo_mpole%efield1)
     163              :       NULLIFY (nddo_mpole%efield2)
     164           32 :    END SUBROUTINE nddo_mpole_create
     165              : 
     166              : ! **************************************************************************************************
     167              : !> \brief Deallocate NDDO multipole type
     168              : !> \param nddo_mpole ...
     169              : !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
     170              : ! **************************************************************************************************
     171           64 :    SUBROUTINE nddo_mpole_release(nddo_mpole)
     172              :       TYPE(nddo_mpole_type), POINTER                     :: nddo_mpole
     173              : 
     174           64 :       IF (ASSOCIATED(nddo_mpole)) THEN
     175           32 :          IF (ASSOCIATED(nddo_mpole%charge)) THEN
     176           32 :             DEALLOCATE (nddo_mpole%charge)
     177              :          END IF
     178           32 :          IF (ASSOCIATED(nddo_mpole%dipole)) THEN
     179           32 :             DEALLOCATE (nddo_mpole%dipole)
     180              :          END IF
     181           32 :          IF (ASSOCIATED(nddo_mpole%quadrupole)) THEN
     182           32 :             DEALLOCATE (nddo_mpole%quadrupole)
     183              :          END IF
     184           32 :          IF (ASSOCIATED(nddo_mpole%efield0)) THEN
     185           32 :             DEALLOCATE (nddo_mpole%efield0)
     186              :          END IF
     187           32 :          IF (ASSOCIATED(nddo_mpole%efield1)) THEN
     188           32 :             DEALLOCATE (nddo_mpole%efield1)
     189              :          END IF
     190           32 :          IF (ASSOCIATED(nddo_mpole%efield2)) THEN
     191           32 :             DEALLOCATE (nddo_mpole%efield2)
     192              :          END IF
     193           32 :          DEALLOCATE (nddo_mpole)
     194              :       END IF
     195              : 
     196           64 :    END SUBROUTINE nddo_mpole_release
     197              : 
     198            0 : END MODULE semi_empirical_mpole_types
        

Generated by: LCOV version 2.0-1