LCOV - code coverage report
Current view: top level - src/subsys - atprop_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:9843133) Lines: 51 52 98.1 %
Date: 2024-05-10 06:53:45 Functions: 6 7 85.7 %

          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 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             :       LOGICAL                                   :: stress = .FALSE.
      34             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atener => NULL()
      35             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ateb => NULL()
      36             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atexc => NULL()
      37             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ateself => NULL()
      38             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atevdw => NULL()
      39             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ategcp => NULL()
      40             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atecc => NULL()
      41             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: ate1c => NULL()
      42             :       REAL(KIND=dp), DIMENSION(:), POINTER      :: atecoul => NULL()
      43             :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER  :: atstress => NULL()
      44             :    END TYPE atprop_type
      45             : 
      46             : CONTAINS
      47             : 
      48             : ! **************************************************************************************************
      49             : !> \brief ...
      50             : !> \param atprop_env ...
      51             : ! **************************************************************************************************
      52        9367 :    SUBROUTINE atprop_create(atprop_env)
      53             :       TYPE(atprop_type), POINTER                         :: atprop_env
      54             : 
      55        9367 :       CALL atprop_release(atprop_env)
      56        9367 :       ALLOCATE (atprop_env)
      57             : 
      58        9367 :    END SUBROUTINE atprop_create
      59             : 
      60             : ! **************************************************************************************************
      61             : !> \brief ...
      62             : !> \param atprop_env ...
      63             : !> \param natom ...
      64             : ! **************************************************************************************************
      65       95860 :    SUBROUTINE atprop_init(atprop_env, natom)
      66             :       TYPE(atprop_type), INTENT(INOUT)                   :: atprop_env
      67             :       INTEGER, INTENT(IN)                                :: natom
      68             : 
      69       95860 :       IF (atprop_env%energy) THEN
      70         978 :          CALL atprop_array_init(atprop_env%atener, natom)
      71         978 :          CALL atprop_array_release(atprop_env%ateb)
      72         978 :          CALL atprop_array_release(atprop_env%atevdw)
      73         978 :          CALL atprop_array_release(atprop_env%ategcp)
      74         978 :          CALL atprop_array_release(atprop_env%atecc)
      75         978 :          CALL atprop_array_release(atprop_env%atecoul)
      76         978 :          CALL atprop_array_release(atprop_env%ateself)
      77         978 :          CALL atprop_array_release(atprop_env%atexc)
      78         978 :          CALL atprop_array_release(atprop_env%ate1c)
      79             :       END IF
      80             : 
      81       95860 :       IF (atprop_env%stress) THEN
      82         868 :          IF (ASSOCIATED(atprop_env%atstress)) THEN
      83         846 :             CPASSERT(SIZE(atprop_env%atstress, 3) == natom)
      84             :          ELSE
      85          66 :             ALLOCATE (atprop_env%atstress(3, 3, natom))
      86             :          END IF
      87      373630 :          atprop_env%atstress = 0._dp
      88             :       END IF
      89             : 
      90       95860 :    END SUBROUTINE atprop_init
      91             : 
      92             : ! **************************************************************************************************
      93             : !> \brief ...
      94             : !> \param atarray ...
      95             : !> \param natom ...
      96             : ! **************************************************************************************************
      97        9001 :    SUBROUTINE atprop_array_init(atarray, natom)
      98             :       REAL(KIND=dp), DIMENSION(:), POINTER               :: atarray
      99             :       INTEGER, INTENT(IN)                                :: natom
     100             : 
     101        9001 :       IF (ASSOCIATED(atarray)) THEN
     102        6542 :          CPASSERT(SIZE(atarray) == natom)
     103             :       ELSE
     104        7377 :          ALLOCATE (atarray(natom))
     105             :       END IF
     106      130396 :       atarray = 0._dp
     107             : 
     108        9001 :    END SUBROUTINE atprop_array_init
     109             : 
     110             : ! **************************************************************************************************
     111             : !> \brief ...
     112             : !> \param atarray ...
     113             : ! **************************************************************************************************
     114       92127 :    SUBROUTINE atprop_array_release(atarray)
     115             :       REAL(KIND=dp), DIMENSION(:), POINTER               :: atarray
     116             : 
     117       92127 :       IF (ASSOCIATED(atarray)) THEN
     118        2459 :          DEALLOCATE (atarray)
     119             :       END IF
     120             : 
     121       92127 :    END SUBROUTINE atprop_array_release
     122             : 
     123             : ! **************************************************************************************************
     124             : !> \brief ...
     125             : !> \param array_a ...
     126             : !> \param array_b ...
     127             : ! **************************************************************************************************
     128        1120 :    SUBROUTINE atprop_array_add(array_a, array_b)
     129             :       REAL(KIND=dp), DIMENSION(:), INTENT(INOUT)         :: array_a
     130             :       REAL(KIND=dp), DIMENSION(:), INTENT(IN), POINTER   :: array_b
     131             : 
     132        1120 :       IF (ASSOCIATED(array_b)) THEN
     133       19206 :          array_a = array_a + array_b
     134             :       END IF
     135             : 
     136        1120 :    END SUBROUTINE atprop_array_add
     137             : 
     138             : ! **************************************************************************************************
     139             : !> \brief releases the atprop
     140             : !> \param atprop_env the object to release
     141             : !> \author fawzi
     142             : ! **************************************************************************************************
     143       18734 :    SUBROUTINE atprop_release(atprop_env)
     144             :       TYPE(atprop_type), POINTER                         :: atprop_env
     145             : 
     146       18734 :       IF (ASSOCIATED(atprop_env)) THEN
     147             :          ! energy
     148        9367 :          CALL atprop_array_release(atprop_env%atener)
     149        9367 :          CALL atprop_array_release(atprop_env%ateb)
     150        9367 :          CALL atprop_array_release(atprop_env%ateself)
     151        9367 :          CALL atprop_array_release(atprop_env%atexc)
     152        9367 :          CALL atprop_array_release(atprop_env%atevdw)
     153        9367 :          CALL atprop_array_release(atprop_env%ategcp)
     154        9367 :          CALL atprop_array_release(atprop_env%atecc)
     155        9367 :          CALL atprop_array_release(atprop_env%ate1c)
     156        9367 :          CALL atprop_array_release(atprop_env%atecoul)
     157             :          ! stress
     158        9367 :          IF (ASSOCIATED(atprop_env%atstress)) THEN
     159          22 :             DEALLOCATE (atprop_env%atstress)
     160             :          END IF
     161             :          ! atprop type
     162        9367 :          DEALLOCATE (atprop_env)
     163             :       END IF
     164       18734 :       NULLIFY (atprop_env)
     165       18734 :    END SUBROUTINE atprop_release
     166             : 
     167           0 : END MODULE atprop_types

Generated by: LCOV version 1.15