(git:34ef472)
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 ! **************************************************************************************************
29  TYPE semi_empirical_mpole_type
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
40  END TYPE semi_empirical_mpole_type
41 
42 ! **************************************************************************************************
43 !> \brief Semi-empirical integral multipole expansion type - pointer type
44 !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
45 ! **************************************************************************************************
46  TYPE semi_empirical_mpole_p_type
47  TYPE(semi_empirical_mpole_type), POINTER :: mpole
48  END TYPE semi_empirical_mpole_p_type
49 
50 ! **************************************************************************************************
51 !> \brief Global Multipolar NDDO information type
52 !> \author Teodoro Laino [tlaino] - 08.2008 Zurich University
53 ! **************************************************************************************************
54  TYPE nddo_mpole_type
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, &
61  semi_empirical_mpole_p_type, &
64  nddo_mpole_type, &
67 
68 CONTAINS
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 
90  END SUBROUTINE semi_empirical_mpole_p_create
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.