(git:ccc2433)
atprop_types.F
Go to the documentation of this file.
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 ! **************************************************************************************************
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
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  SUBROUTINE atprop_create(atprop_env)
53  TYPE(atprop_type), POINTER :: atprop_env
54 
55  CALL atprop_release(atprop_env)
56  ALLOCATE (atprop_env)
57 
58  END SUBROUTINE atprop_create
59 
60 ! **************************************************************************************************
61 !> \brief ...
62 !> \param atprop_env ...
63 !> \param natom ...
64 ! **************************************************************************************************
65  SUBROUTINE atprop_init(atprop_env, natom)
66  TYPE(atprop_type), INTENT(INOUT) :: atprop_env
67  INTEGER, INTENT(IN) :: natom
68 
69  IF (atprop_env%energy) THEN
70  CALL atprop_array_init(atprop_env%atener, natom)
71  CALL atprop_array_release(atprop_env%ateb)
72  CALL atprop_array_release(atprop_env%atevdw)
73  CALL atprop_array_release(atprop_env%ategcp)
74  CALL atprop_array_release(atprop_env%atecc)
75  CALL atprop_array_release(atprop_env%atecoul)
76  CALL atprop_array_release(atprop_env%ateself)
77  CALL atprop_array_release(atprop_env%atexc)
78  CALL atprop_array_release(atprop_env%ate1c)
79  END IF
80 
81  IF (atprop_env%stress) THEN
82  IF (ASSOCIATED(atprop_env%atstress)) THEN
83  cpassert(SIZE(atprop_env%atstress, 3) == natom)
84  ELSE
85  ALLOCATE (atprop_env%atstress(3, 3, natom))
86  END IF
87  atprop_env%atstress = 0._dp
88  END IF
89 
90  END SUBROUTINE atprop_init
91 
92 ! **************************************************************************************************
93 !> \brief ...
94 !> \param atarray ...
95 !> \param natom ...
96 ! **************************************************************************************************
97  SUBROUTINE atprop_array_init(atarray, natom)
98  REAL(kind=dp), DIMENSION(:), POINTER :: atarray
99  INTEGER, INTENT(IN) :: natom
100 
101  IF (ASSOCIATED(atarray)) THEN
102  cpassert(SIZE(atarray) == natom)
103  ELSE
104  ALLOCATE (atarray(natom))
105  END IF
106  atarray = 0._dp
107 
108  END SUBROUTINE atprop_array_init
109 
110 ! **************************************************************************************************
111 !> \brief ...
112 !> \param atarray ...
113 ! **************************************************************************************************
114  SUBROUTINE atprop_array_release(atarray)
115  REAL(kind=dp), DIMENSION(:), POINTER :: atarray
116 
117  IF (ASSOCIATED(atarray)) THEN
118  DEALLOCATE (atarray)
119  END IF
120 
121  END SUBROUTINE atprop_array_release
122 
123 ! **************************************************************************************************
124 !> \brief ...
125 !> \param array_a ...
126 !> \param array_b ...
127 ! **************************************************************************************************
128  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  IF (ASSOCIATED(array_b)) THEN
133  array_a = array_a + array_b
134  END IF
135 
136  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  SUBROUTINE atprop_release(atprop_env)
144  TYPE(atprop_type), POINTER :: atprop_env
145 
146  IF (ASSOCIATED(atprop_env)) THEN
147  ! energy
148  CALL atprop_array_release(atprop_env%atener)
149  CALL atprop_array_release(atprop_env%ateb)
150  CALL atprop_array_release(atprop_env%ateself)
151  CALL atprop_array_release(atprop_env%atexc)
152  CALL atprop_array_release(atprop_env%atevdw)
153  CALL atprop_array_release(atprop_env%ategcp)
154  CALL atprop_array_release(atprop_env%atecc)
155  CALL atprop_array_release(atprop_env%ate1c)
156  CALL atprop_array_release(atprop_env%atecoul)
157  ! stress
158  IF (ASSOCIATED(atprop_env%atstress)) THEN
159  DEALLOCATE (atprop_env%atstress)
160  END IF
161  ! atprop type
162  DEALLOCATE (atprop_env)
163  END IF
164  NULLIFY (atprop_env)
165  END SUBROUTINE atprop_release
166 
167 END MODULE atprop_types
Holds information on atomic properties.
Definition: atprop_types.F:14
subroutine, public atprop_array_add(array_a, array_b)
...
Definition: atprop_types.F:129
subroutine, public atprop_create(atprop_env)
...
Definition: atprop_types.F:53
subroutine, public atprop_release(atprop_env)
releases the atprop
Definition: atprop_types.F:144
subroutine, public atprop_array_init(atarray, natom)
...
Definition: atprop_types.F:98
subroutine, public atprop_init(atprop_env, natom)
...
Definition: atprop_types.F:66
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34