LCOV - code coverage report
Current view: top level - src/subsys - atprop_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:42dac4a) Lines: 97.8 % 45 44
Test Date: 2025-07-25 12:55:17 Functions: 85.7 % 7 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 Holds information on atomic properties
      10              : !> \par History
      11              : !>      07.2011 created
      12              : !> \author JHU
      13              : ! **************************************************************************************************
      14              : MODULE atprop_types
      15              : 
      16              :    USE kinds,                           ONLY: dp
      17              : #include "../base/base_uses.f90"
      18              : 
      19              :    IMPLICIT NONE
      20              :    PRIVATE
      21              : 
      22              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'atprop_types'
      23              : 
      24              :    PUBLIC :: atprop_type, atprop_create, atprop_release, atprop_init
      25              :    PUBLIC :: atprop_array_init, atprop_array_add
      26              : 
      27              : ! **************************************************************************************************
      28              : !> \brief type for the atomic properties
      29              : !> \author fawzi
      30              : ! **************************************************************************************************
      31              :    TYPE atprop_type
      32              :       LOGICAL                                   :: energy = .FALSE.
      33              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atener => NULL()
      34              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ateb => NULL()
      35              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atexc => NULL()
      36              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ateself => NULL()
      37              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atevdw => NULL()
      38              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ategcp => NULL()
      39              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atecc => NULL()
      40              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ate1c => NULL()
      41              :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atecoul => NULL()
      42              :    END TYPE atprop_type
      43              : 
      44              : CONTAINS
      45              : 
      46              : ! **************************************************************************************************
      47              : !> \brief ...
      48              : !> \param atprop_env ...
      49              : ! **************************************************************************************************
      50        10227 :    SUBROUTINE atprop_create(atprop_env)
      51              :       TYPE(atprop_type), POINTER                         :: atprop_env
      52              : 
      53        10227 :       CALL atprop_release(atprop_env)
      54        10227 :       ALLOCATE (atprop_env)
      55              : 
      56        10227 :    END SUBROUTINE atprop_create
      57              : 
      58              : ! **************************************************************************************************
      59              : !> \brief ...
      60              : !> \param atprop_env ...
      61              : !> \param natom ...
      62              : ! **************************************************************************************************
      63        99085 :    SUBROUTINE atprop_init(atprop_env, natom)
      64              :       TYPE(atprop_type), INTENT(INOUT)                   :: atprop_env
      65              :       INTEGER, INTENT(IN)                                :: natom
      66              : 
      67        99085 :       IF (atprop_env%energy) THEN
      68          978 :          CALL atprop_array_init(atprop_env%atener, natom)
      69          978 :          CALL atprop_array_release(atprop_env%ateb)
      70          978 :          CALL atprop_array_release(atprop_env%atevdw)
      71          978 :          CALL atprop_array_release(atprop_env%ategcp)
      72          978 :          CALL atprop_array_release(atprop_env%atecc)
      73          978 :          CALL atprop_array_release(atprop_env%atecoul)
      74          978 :          CALL atprop_array_release(atprop_env%ateself)
      75          978 :          CALL atprop_array_release(atprop_env%atexc)
      76          978 :          CALL atprop_array_release(atprop_env%ate1c)
      77              :       END IF
      78              : 
      79        99085 :    END SUBROUTINE atprop_init
      80              : 
      81              : ! **************************************************************************************************
      82              : !> \brief ...
      83              : !> \param atarray ...
      84              : !> \param natom ...
      85              : ! **************************************************************************************************
      86         9225 :    SUBROUTINE atprop_array_init(atarray, natom)
      87              :       REAL(KIND=dp), DIMENSION(:), POINTER               :: atarray
      88              :       INTEGER, INTENT(IN)                                :: natom
      89              : 
      90         9225 :       IF (ASSOCIATED(atarray)) THEN
      91         6720 :          CPASSERT(SIZE(atarray) == natom)
      92              :       ELSE
      93         7515 :          ALLOCATE (atarray(natom))
      94              :       END IF
      95       132394 :       atarray = 0._dp
      96              : 
      97         9225 :    END SUBROUTINE atprop_array_init
      98              : 
      99              : ! **************************************************************************************************
     100              : !> \brief ...
     101              : !> \param atarray ...
     102              : ! **************************************************************************************************
     103        99867 :    SUBROUTINE atprop_array_release(atarray)
     104              :       REAL(KIND=dp), DIMENSION(:), POINTER               :: atarray
     105              : 
     106        99867 :       IF (ASSOCIATED(atarray)) THEN
     107         2505 :          DEALLOCATE (atarray)
     108              :       END IF
     109              : 
     110        99867 :    END SUBROUTINE atprop_array_release
     111              : 
     112              : ! **************************************************************************************************
     113              : !> \brief ...
     114              : !> \param array_a ...
     115              : !> \param array_b ...
     116              : ! **************************************************************************************************
     117         1120 :    SUBROUTINE atprop_array_add(array_a, array_b)
     118              :       REAL(KIND=dp), DIMENSION(:), INTENT(INOUT)         :: array_a
     119              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN), POINTER   :: array_b
     120              : 
     121         1120 :       IF (ASSOCIATED(array_b)) THEN
     122        19206 :          array_a = array_a + array_b
     123              :       END IF
     124              : 
     125         1120 :    END SUBROUTINE atprop_array_add
     126              : 
     127              : ! **************************************************************************************************
     128              : !> \brief releases the atprop
     129              : !> \param atprop_env the object to release
     130              : !> \author fawzi
     131              : ! **************************************************************************************************
     132        20454 :    SUBROUTINE atprop_release(atprop_env)
     133              :       TYPE(atprop_type), POINTER                         :: atprop_env
     134              : 
     135        20454 :       IF (ASSOCIATED(atprop_env)) THEN
     136              :          ! energy
     137        10227 :          CALL atprop_array_release(atprop_env%atener)
     138        10227 :          CALL atprop_array_release(atprop_env%ateb)
     139        10227 :          CALL atprop_array_release(atprop_env%ateself)
     140        10227 :          CALL atprop_array_release(atprop_env%atexc)
     141        10227 :          CALL atprop_array_release(atprop_env%atevdw)
     142        10227 :          CALL atprop_array_release(atprop_env%ategcp)
     143        10227 :          CALL atprop_array_release(atprop_env%atecc)
     144        10227 :          CALL atprop_array_release(atprop_env%ate1c)
     145        10227 :          CALL atprop_array_release(atprop_env%atecoul)
     146              :          ! atprop type
     147        10227 :          DEALLOCATE (atprop_env)
     148              :       END IF
     149        20454 :       NULLIFY (atprop_env)
     150        20454 :    END SUBROUTINE atprop_release
     151              : 
     152            0 : END MODULE atprop_types
        

Generated by: LCOV version 2.0-1