(git:374b731)
Loading...
Searching...
No Matches
semi_empirical_mpole_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 Definition of the semi empirical multipole integral expansions types
10!> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
11! **************************************************************************************************
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! **************************************************************************************************
30 LOGICAL, DIMENSION(3) :: task
31 INTEGER :: indi, indj
32 REAL(kind=dp) :: c
33 REAL(kind=dp), DIMENSION(3) :: d
34 REAL(kind=dp), DIMENSION(3, 3) :: qc ! quadrupole cartesian
35 REAL(kind=dp), DIMENSION(5) :: qs ! quadrupole spherical
36 ! alternative definition used in GKS integral routines
37 REAL(kind=dp) :: cs
38 REAL(kind=dp), DIMENSION(3) :: ds
39 REAL(kind=dp), DIMENSION(3, 3) :: qq ! quadrupole cartesian
41
42! **************************************************************************************************
43!> \brief Semi-empirical integral multipole expansion type - pointer type
44!> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
45! **************************************************************************************************
49
50! **************************************************************************************************
51!> \brief Global Multipolar NDDO information type
52!> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
53! **************************************************************************************************
55 REAL(kind=dp), DIMENSION(:), POINTER :: charge, efield0
56 REAL(kind=dp), DIMENSION(:, :), POINTER :: dipole, efield1, efield2
57 REAL(kind=dp), DIMENSION(:, :, :), POINTER :: quadrupole
58 END TYPE nddo_mpole_type
59
60 PUBLIC :: semi_empirical_mpole_type, &
67
68CONTAINS
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 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 cpassert(.NOT. ASSOCIATED(mpole))
84 ALLOCATE (mpole(ndim))
85 DO i = 1, ndim
86 NULLIFY (mpole(i)%mpole)
87 CALL semi_empirical_mpole_create(mpole(i)%mpole)
88 END DO
89
91
92! **************************************************************************************************
93!> \brief Deallocate the semi-empirical mpole type
94!> \param mpole ...
95!> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
96! **************************************************************************************************
98 TYPE(semi_empirical_mpole_p_type), DIMENSION(:), &
99 POINTER :: mpole
100
101 INTEGER :: i
102
103 IF (ASSOCIATED(mpole)) THEN
104 DO i = 1, SIZE(mpole)
105 CALL semi_empirical_mpole_release(mpole(i)%mpole)
106 END DO
107 DEALLOCATE (mpole)
108 END IF
109
110 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 SUBROUTINE semi_empirical_mpole_create(mpole)
118 TYPE(semi_empirical_mpole_type), POINTER :: mpole
119
120 cpassert(.NOT. ASSOCIATED(mpole))
121 ALLOCATE (mpole)
122 mpole%task = .false.
123 mpole%indi = 0
124 mpole%indj = 0
125 mpole%c = huge(0.0_dp)
126 mpole%d = huge(0.0_dp)
127 mpole%qc = huge(0.0_dp)
128 mpole%qs = huge(0.0_dp)
129 mpole%cs = huge(0.0_dp)
130 mpole%ds = huge(0.0_dp)
131 mpole%qq = huge(0.0_dp)
132 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 SUBROUTINE semi_empirical_mpole_release(mpole)
140 TYPE(semi_empirical_mpole_type), POINTER :: mpole
141
142 IF (ASSOCIATED(mpole)) THEN
143 DEALLOCATE (mpole)
144 END IF
145
146 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 SUBROUTINE nddo_mpole_create(nddo_mpole)
154 TYPE(nddo_mpole_type), POINTER :: nddo_mpole
155
156 cpassert(.NOT. ASSOCIATED(nddo_mpole))
157 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 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 SUBROUTINE nddo_mpole_release(nddo_mpole)
172 TYPE(nddo_mpole_type), POINTER :: nddo_mpole
173
174 IF (ASSOCIATED(nddo_mpole)) THEN
175 IF (ASSOCIATED(nddo_mpole%charge)) THEN
176 DEALLOCATE (nddo_mpole%charge)
177 END IF
178 IF (ASSOCIATED(nddo_mpole%dipole)) THEN
179 DEALLOCATE (nddo_mpole%dipole)
180 END IF
181 IF (ASSOCIATED(nddo_mpole%quadrupole)) THEN
182 DEALLOCATE (nddo_mpole%quadrupole)
183 END IF
184 IF (ASSOCIATED(nddo_mpole%efield0)) THEN
185 DEALLOCATE (nddo_mpole%efield0)
186 END IF
187 IF (ASSOCIATED(nddo_mpole%efield1)) THEN
188 DEALLOCATE (nddo_mpole%efield1)
189 END IF
190 IF (ASSOCIATED(nddo_mpole%efield2)) THEN
191 DEALLOCATE (nddo_mpole%efield2)
192 END IF
193 DEALLOCATE (nddo_mpole)
194 END IF
195
196 END SUBROUTINE nddo_mpole_release
197
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of the semi empirical multipole integral expansions types.
subroutine, public nddo_mpole_release(nddo_mpole)
Deallocate NDDO multipole type.
subroutine, public semi_empirical_mpole_p_create(mpole, ndim)
Allocate semi-empirical mpole type.
subroutine, public semi_empirical_mpole_p_release(mpole)
Deallocate the semi-empirical mpole type.
subroutine, public nddo_mpole_create(nddo_mpole)
Allocate NDDO multipole type.
Global Multipolar NDDO information type.
Semi-empirical integral multipole expansion type - pointer type.
Semi-empirical integral multipole expansion type.