(git:374b731)
Loading...
Searching...
No Matches
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
26
27! **************************************************************************************************
28!> \brief type for the atomic properties
29!> \author fawzi
30! **************************************************************************************************
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
46CONTAINS
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
167END MODULE atprop_types
Holds information on atomic properties.
subroutine, public atprop_array_add(array_a, array_b)
...
subroutine, public atprop_create(atprop_env)
...
subroutine, public atprop_release(atprop_env)
releases the atprop
subroutine, public atprop_array_init(atarray, natom)
...
subroutine, public atprop_init(atprop_env, natom)
...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
type for the atomic properties