15 #include "./base/base_uses.f90"
23 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'semi_empirical_mpole_types'
29 TYPE semi_empirical_mpole_type
30 LOGICAL,
DIMENSION(3) :: task
33 REAL(KIND=
dp),
DIMENSION(3) :: d
34 REAL(KIND=
dp),
DIMENSION(3, 3) :: qc
35 REAL(KIND=
dp),
DIMENSION(5) :: qs
38 REAL(KIND=
dp),
DIMENSION(3) :: ds
39 REAL(KIND=
dp),
DIMENSION(3, 3) :: qq
40 END TYPE semi_empirical_mpole_type
46 TYPE semi_empirical_mpole_p_type
47 TYPE(semi_empirical_mpole_type),
POINTER :: mpole
48 END TYPE semi_empirical_mpole_p_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
60 PUBLIC :: semi_empirical_mpole_type, &
61 semi_empirical_mpole_p_type, &
77 TYPE(semi_empirical_mpole_p_type),
DIMENSION(:), &
79 INTEGER,
INTENT(IN) :: ndim
83 cpassert(.NOT.
ASSOCIATED(mpole))
84 ALLOCATE (mpole(ndim))
86 NULLIFY (mpole(i)%mpole)
87 CALL semi_empirical_mpole_create(mpole(i)%mpole)
98 TYPE(semi_empirical_mpole_p_type),
DIMENSION(:), &
103 IF (
ASSOCIATED(mpole))
THEN
104 DO i = 1,
SIZE(mpole)
105 CALL semi_empirical_mpole_release(mpole(i)%mpole)
117 SUBROUTINE semi_empirical_mpole_create(mpole)
118 TYPE(semi_empirical_mpole_type),
POINTER :: mpole
120 cpassert(.NOT.
ASSOCIATED(mpole))
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
139 SUBROUTINE semi_empirical_mpole_release(mpole)
140 TYPE(semi_empirical_mpole_type),
POINTER :: mpole
142 IF (
ASSOCIATED(mpole))
THEN
146 END SUBROUTINE semi_empirical_mpole_release
154 TYPE(nddo_mpole_type),
POINTER :: nddo_mpole
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)
172 TYPE(nddo_mpole_type),
POINTER :: nddo_mpole
174 IF (
ASSOCIATED(nddo_mpole))
THEN
175 IF (
ASSOCIATED(nddo_mpole%charge))
THEN
176 DEALLOCATE (nddo_mpole%charge)
178 IF (
ASSOCIATED(nddo_mpole%dipole))
THEN
179 DEALLOCATE (nddo_mpole%dipole)
181 IF (
ASSOCIATED(nddo_mpole%quadrupole))
THEN
182 DEALLOCATE (nddo_mpole%quadrupole)
184 IF (
ASSOCIATED(nddo_mpole%efield0))
THEN
185 DEALLOCATE (nddo_mpole%efield0)
187 IF (
ASSOCIATED(nddo_mpole%efield1))
THEN
188 DEALLOCATE (nddo_mpole%efield1)
190 IF (
ASSOCIATED(nddo_mpole%efield2))
THEN
191 DEALLOCATE (nddo_mpole%efield2)
193 DEALLOCATE (nddo_mpole)
Defines the basic variable types.
integer, parameter, public dp
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.