(git:d1312bc)
Loading...
Searching...
No Matches
fist_nonbond_env_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \par History
10!> none
11!> \author HAF
12! **************************************************************************************************
17 USE cell_types, ONLY: cell_release,&
23 USE kinds, ONLY: default_string_length,&
24 dp
25 USE pair_potential_types, ONLY: &
30#include "./base/base_uses.f90"
31
32 IMPLICIT NONE
33 PRIVATE
34
35 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'fist_nonbond_env_types'
41
42! **************************************************************************************************
44 REAL(kind=dp) :: r(3) = 0.0_dp
45 END TYPE pos_type
46
48 REAL(kind=dp) :: f_embed = 0.0_dp
49 REAL(kind=dp) :: rho = 0.0_dp
50 END TYPE eam_type
51
53 INTEGER, POINTER :: use_indices(:) => null()
54 REAL(kind=dp), POINTER :: force(:, :) => null()
55 REAL(kind=dp) :: virial(3, 3) = 0.0_dp
56 TYPE(torch_model_type) :: model
57 END TYPE nequip_data_type
58
60 INTEGER, POINTER :: use_indices(:) => null()
61 REAL(kind=dp), POINTER :: force(:, :) => null()
62 REAL(kind=dp) :: virial(3, 3) = 0.0_dp
63 TYPE(deepmd_model_type) :: model
64 END TYPE deepmd_data_type
65
67 INTEGER, ALLOCATABLE :: use_indices(:)
68 INTEGER, ALLOCATABLE :: inverse_index_map(:)
69 INTEGER :: natom = 0
70 INTEGER :: nghost = 0
71 INTEGER :: refupdate = 0
72 INTEGER :: nei = 0
73 INTEGER, ALLOCATABLE :: uctype(:)
74 INTEGER, ALLOCATABLE :: attype(:)
75 INTEGER, ALLOCATABLE :: origin(:)
76 INTEGER, ALLOCATABLE :: shift(:, :)
77 INTEGER, ALLOCATABLE :: neiat(:)
78 INTEGER, ALLOCATABLE :: nlist(:)
79 REAL(kind=dp), ALLOCATABLE :: force(:, :)
80 REAL(kind=dp), ALLOCATABLE :: atpos(:, :)
81 REAL(kind=dp) :: virial(3, 3) = 0.0_dp
82 TYPE(ace_model_type) :: model
83 END TYPE ace_data_type
84
85! **************************************************************************************************
87 INTEGER :: natom_types = -1
88 INTEGER :: counter = -1
89 INTEGER :: last_update = -1
90 INTEGER :: num_update = -1
91 LOGICAL :: do_nonbonded = .false.
92 LOGICAL :: do_electrostatics = .false.
93 LOGICAL :: shift_cutoff = .false.
94 CHARACTER(len=default_string_length) :: unit_type = ""
95 REAL(kind=dp) :: lup = 0.0_dp
96 REAL(kind=dp) :: aup = 0.0_dp
97 REAL(kind=dp) :: ei_scale14 = 0.0_dp
98 REAL(kind=dp) :: vdw_scale14 = 0.0_dp
99 REAL(kind=dp) :: long_range_correction = 0.0_dp
100 REAL(kind=dp), DIMENSION(:, :), POINTER :: rlist_cut => null()
101 REAL(kind=dp), DIMENSION(:, :), POINTER :: rlist_lowsq => null()
102 REAL(kind=dp), DIMENSION(:, :), POINTER :: ij_kind_full_fac => null()
103 REAL(kind=dp), DIMENSION(:), POINTER :: charges => null()
104 TYPE(fist_neighbor_type), POINTER :: nonbonded => null()
105 TYPE(pair_potential_pp_type), POINTER :: potparm14 => null()
106 TYPE(pair_potential_pp_type), POINTER :: potparm => null()
107 TYPE(cell_type), POINTER :: cell_last_update => null()
108 TYPE(pos_type), DIMENSION(:), POINTER :: r_last_update => null()
109 TYPE(pos_type), DIMENSION(:), POINTER :: r_last_update_pbc => null()
110 TYPE(pos_type), DIMENSION(:), POINTER :: rshell_last_update_pbc => null()
111 TYPE(pos_type), DIMENSION(:), POINTER :: rcore_last_update_pbc => null()
112 TYPE(eam_type), DIMENSION(:), POINTER :: eam_data => null()
113 TYPE(deepmd_data_type), POINTER :: deepmd_data => null()
114 TYPE(ace_data_type), POINTER :: ace_data => null()
115 TYPE(nequip_data_type), POINTER :: nequip_data => null()
116 END TYPE fist_nonbond_env_type
117
118CONTAINS
119
120! **************************************************************************************************
121!> \brief sets a fist_nonbond_env
122!> \param fist_nonbond_env the object to create
123!> \param potparm14 ...
124!> \param potparm ...
125!> \param nonbonded ...
126!> \param rlist_cut ...
127!> \param rlist_lowsq ...
128!> \param aup ...
129!> \param lup ...
130!> \param ei_scale14 ...
131!> \param vdw_scale14 ...
132!> \param shift_cutoff ...
133!> \param do_electrostatics ...
134!> \param r_last_update ...
135!> \param r_last_update_pbc ...
136!> \param rshell_last_update_pbc ...
137!> \param rcore_last_update_pbc ...
138!> \param cell_last_update ...
139!> \param num_update ...
140!> \param last_update ...
141!> \param counter ...
142!> \param natom_types ...
143!> \param long_range_correction ...
144!> \param ij_kind_full_fac ...
145!> \param eam_data ...
146!> \param nequip_data ...
147!> \param deepmd_data ...
148!> \param ace_data ...
149!> \param charges ...
150!> \par History
151!> 12.2002 created [fawzi]
152!> \author Fawzi Mohamed
153! **************************************************************************************************
154 SUBROUTINE fist_nonbond_env_get(fist_nonbond_env, potparm14, potparm, &
155 nonbonded, rlist_cut, rlist_lowsq, aup, lup, ei_scale14, vdw_scale14, &
156 shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, &
157 rcore_last_update_pbc, cell_last_update, num_update, last_update, &
158 counter, natom_types, long_range_correction, ij_kind_full_fac, eam_data, &
159 nequip_data, deepmd_data, ace_data, charges)
160
161 TYPE(fist_nonbond_env_type), INTENT(IN) :: fist_nonbond_env
162 TYPE(pair_potential_pp_type), OPTIONAL, POINTER :: potparm14, potparm
163 TYPE(fist_neighbor_type), OPTIONAL, POINTER :: nonbonded
164 REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER :: rlist_cut, rlist_lowsq
165 REAL(kind=dp), OPTIONAL :: aup, lup, ei_scale14, vdw_scale14
166 LOGICAL, INTENT(OUT), OPTIONAL :: shift_cutoff, do_electrostatics
167 TYPE(pos_type), DIMENSION(:), OPTIONAL, POINTER :: r_last_update, r_last_update_pbc, &
168 rshell_last_update_pbc, &
169 rcore_last_update_pbc
170 TYPE(cell_type), OPTIONAL, POINTER :: cell_last_update
171 INTEGER, OPTIONAL :: num_update, last_update, counter, &
172 natom_types
173 REAL(kind=dp), OPTIONAL :: long_range_correction
174 REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER :: ij_kind_full_fac
175 TYPE(eam_type), DIMENSION(:), OPTIONAL, POINTER :: eam_data
176 TYPE(nequip_data_type), OPTIONAL, POINTER :: nequip_data
177 TYPE(deepmd_data_type), OPTIONAL, POINTER :: deepmd_data
178 TYPE(ace_data_type), OPTIONAL, POINTER :: ace_data
179 REAL(kind=dp), DIMENSION(:), OPTIONAL, POINTER :: charges
180
181 IF (PRESENT(charges)) charges => fist_nonbond_env%charges
182 IF (PRESENT(potparm14)) potparm14 => fist_nonbond_env%potparm14
183 IF (PRESENT(eam_data)) eam_data => fist_nonbond_env%eam_data
184 IF (PRESENT(nequip_data)) nequip_data => fist_nonbond_env%nequip_data
185 IF (PRESENT(deepmd_data)) deepmd_data => fist_nonbond_env%deepmd_data
186 IF (PRESENT(ace_data)) ace_data => fist_nonbond_env%ace_data
187 IF (PRESENT(potparm)) potparm => fist_nonbond_env%potparm
188 IF (PRESENT(rlist_cut)) rlist_cut => fist_nonbond_env%rlist_cut
189 IF (PRESENT(rlist_lowsq)) rlist_lowsq => fist_nonbond_env%rlist_lowsq
190 IF (PRESENT(ij_kind_full_fac)) ij_kind_full_fac => fist_nonbond_env%ij_kind_full_fac
191 IF (PRESENT(nonbonded)) nonbonded => fist_nonbond_env%nonbonded
192 IF (PRESENT(r_last_update)) THEN
193 r_last_update => fist_nonbond_env%r_last_update
194 END IF
195 IF (PRESENT(r_last_update_pbc)) THEN
196 r_last_update_pbc => fist_nonbond_env%r_last_update_pbc
197 END IF
198 IF (PRESENT(rshell_last_update_pbc)) THEN
199 rshell_last_update_pbc => fist_nonbond_env%rshell_last_update_pbc
200 END IF
201 IF (PRESENT(rcore_last_update_pbc)) THEN
202 rcore_last_update_pbc => fist_nonbond_env%rcore_last_update_pbc
203 END IF
204 IF (PRESENT(cell_last_update)) THEN
205 cell_last_update => fist_nonbond_env%cell_last_update
206 END IF
207 IF (PRESENT(lup)) lup = fist_nonbond_env%lup
208 IF (PRESENT(aup)) aup = fist_nonbond_env%aup
209 IF (PRESENT(ei_scale14)) ei_scale14 = fist_nonbond_env%ei_scale14
210 IF (PRESENT(vdw_scale14)) vdw_scale14 = fist_nonbond_env%vdw_scale14
211 IF (PRESENT(shift_cutoff)) THEN
212 shift_cutoff = fist_nonbond_env%shift_cutoff
213 END IF
214 IF (PRESENT(do_electrostatics)) do_electrostatics = fist_nonbond_env%do_electrostatics
215 IF (PRESENT(natom_types)) natom_types = fist_nonbond_env%natom_types
216 IF (PRESENT(counter)) counter = fist_nonbond_env%counter
217 IF (PRESENT(last_update)) last_update = fist_nonbond_env%last_update
218 IF (PRESENT(num_update)) num_update = fist_nonbond_env%num_update
219 IF (PRESENT(long_range_correction)) THEN
220 long_range_correction = fist_nonbond_env%long_range_correction
221 END IF
222 END SUBROUTINE fist_nonbond_env_get
223
224! **************************************************************************************************
225!> \brief sets a fist_nonbond_env
226!> \param fist_nonbond_env the object to create
227!> \param potparm14 ...
228!> \param potparm ...
229!> \param rlist_cut ...
230!> \param rlist_lowsq ...
231!> \param nonbonded ...
232!> \param aup ...
233!> \param lup ...
234!> \param ei_scale14 ...
235!> \param vdw_scale14 ...
236!> \param shift_cutoff ...
237!> \param do_electrostatics ...
238!> \param r_last_update ...
239!> \param r_last_update_pbc ...
240!> \param rshell_last_update_pbc ...
241!> \param rcore_last_update_pbc ...
242!> \param cell_last_update ...
243!> \param num_update ...
244!> \param last_update ...
245!> \param counter ...
246!> \param natom_types ...
247!> \param long_range_correction ...
248!> \param eam_data ...
249!> \param nequip_data ...
250!> \param deepmd_data ...
251!> \param ace_data ...
252!> \param charges ...
253!> \par History
254!> 12.2002 created [fawzi]
255!> \author Fawzi Mohamed
256! **************************************************************************************************
257 SUBROUTINE fist_nonbond_env_set(fist_nonbond_env, potparm14, potparm, &
258 rlist_cut, rlist_lowsq, nonbonded, aup, lup, ei_scale14, vdw_scale14, &
259 shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, &
260 rcore_last_update_pbc, cell_last_update, num_update, last_update, &
261 counter, natom_types, long_range_correction, eam_data, &
262 nequip_data, deepmd_data, ace_data, charges)
263
264 TYPE(fist_nonbond_env_type), INTENT(INOUT) :: fist_nonbond_env
265 TYPE(pair_potential_pp_type), OPTIONAL, POINTER :: potparm14, potparm
266 REAL(kind=dp), DIMENSION(:, :), OPTIONAL, POINTER :: rlist_cut, rlist_lowsq
267 TYPE(fist_neighbor_type), OPTIONAL, POINTER :: nonbonded
268 REAL(kind=dp), OPTIONAL :: aup, lup, ei_scale14, vdw_scale14
269 LOGICAL, INTENT(IN), OPTIONAL :: shift_cutoff, do_electrostatics
270 TYPE(pos_type), DIMENSION(:), OPTIONAL, POINTER :: r_last_update, r_last_update_pbc, &
271 rshell_last_update_pbc, &
272 rcore_last_update_pbc
273 TYPE(cell_type), OPTIONAL, POINTER :: cell_last_update
274 INTEGER, OPTIONAL :: num_update, last_update, counter, &
275 natom_types
276 REAL(kind=dp), OPTIONAL :: long_range_correction
277 TYPE(eam_type), DIMENSION(:), OPTIONAL, POINTER :: eam_data
278 TYPE(nequip_data_type), OPTIONAL, POINTER :: nequip_data
279 TYPE(deepmd_data_type), OPTIONAL, POINTER :: deepmd_data
280 TYPE(ace_data_type), OPTIONAL, POINTER :: ace_data
281 REAL(kind=dp), DIMENSION(:), OPTIONAL, POINTER :: charges
282
283 IF (PRESENT(potparm14)) fist_nonbond_env%potparm14 => potparm14
284 IF (PRESENT(eam_data)) fist_nonbond_env%eam_data => eam_data
285 IF (PRESENT(nequip_data)) fist_nonbond_env%nequip_data => nequip_data
286 IF (PRESENT(deepmd_data)) fist_nonbond_env%deepmd_data => deepmd_data
287 IF (PRESENT(ace_data)) fist_nonbond_env%ace_data => ace_data
288 IF (PRESENT(potparm)) fist_nonbond_env%potparm => potparm
289 IF (PRESENT(rlist_cut)) fist_nonbond_env%rlist_cut => rlist_cut
290 IF (PRESENT(charges)) fist_nonbond_env%charges => charges
291 IF (PRESENT(rlist_lowsq)) fist_nonbond_env%rlist_lowsq => rlist_lowsq
292 IF (PRESENT(nonbonded)) fist_nonbond_env%nonbonded => nonbonded
293 IF (PRESENT(r_last_update)) THEN
294 fist_nonbond_env%r_last_update => r_last_update
295 END IF
296 IF (PRESENT(r_last_update_pbc)) THEN
297 fist_nonbond_env%r_last_update_pbc => r_last_update_pbc
298 END IF
299 IF (PRESENT(rshell_last_update_pbc)) THEN
300 fist_nonbond_env%rshell_last_update_pbc => rshell_last_update_pbc
301 END IF
302 IF (PRESENT(rcore_last_update_pbc)) THEN
303 fist_nonbond_env%rcore_last_update_pbc => rcore_last_update_pbc
304 END IF
305 IF (PRESENT(cell_last_update)) THEN
306 fist_nonbond_env%cell_last_update => cell_last_update
307 END IF
308 IF (PRESENT(lup)) fist_nonbond_env%lup = lup
309 IF (PRESENT(aup)) fist_nonbond_env%aup = aup
310 IF (PRESENT(ei_scale14)) fist_nonbond_env%ei_scale14 = ei_scale14
311 IF (PRESENT(vdw_scale14)) fist_nonbond_env%vdw_scale14 = vdw_scale14
312 IF (PRESENT(shift_cutoff)) THEN
313 fist_nonbond_env%shift_cutoff = shift_cutoff
314 END IF
315 IF (PRESENT(do_electrostatics)) fist_nonbond_env%do_electrostatics = do_electrostatics
316 IF (PRESENT(natom_types)) fist_nonbond_env%natom_types = natom_types
317 IF (PRESENT(counter)) fist_nonbond_env%counter = counter
318 IF (PRESENT(last_update)) fist_nonbond_env%last_update = last_update
319 IF (PRESENT(num_update)) fist_nonbond_env%num_update = num_update
320 IF (PRESENT(long_range_correction)) THEN
321 fist_nonbond_env%long_range_correction = long_range_correction
322 END IF
323 END SUBROUTINE fist_nonbond_env_set
324
325! **************************************************************************************************
326!> \brief allocates and intitializes a fist_nonbond_env
327!> \param fist_nonbond_env the object to create
328!> \param atomic_kind_set ...
329!> \param potparm14 ...
330!> \param potparm ...
331!> \param do_nonbonded ...
332!> \param do_electrostatics ...
333!> \param verlet_skin ...
334!> \param ewald_rcut ...
335!> \param ei_scale14 ...
336!> \param vdw_scale14 ...
337!> \param shift_cutoff ...
338!> \par History
339!> 12.2002 created [fawzi]
340!> \author Fawzi Mohamed
341! **************************************************************************************************
342 SUBROUTINE fist_nonbond_env_create(fist_nonbond_env, atomic_kind_set, &
343 potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, &
344 ei_scale14, vdw_scale14, shift_cutoff)
345 TYPE(fist_nonbond_env_type), INTENT(OUT) :: fist_nonbond_env
346 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
347 TYPE(pair_potential_pp_type), OPTIONAL, POINTER :: potparm14, potparm
348 LOGICAL, INTENT(IN) :: do_nonbonded, do_electrostatics
349 REAL(kind=dp), INTENT(IN) :: verlet_skin, ewald_rcut, ei_scale14, &
350 vdw_scale14
351 LOGICAL, INTENT(IN) :: shift_cutoff
352
353 NULLIFY (fist_nonbond_env%potparm14)
354 NULLIFY (fist_nonbond_env%potparm)
355 NULLIFY (fist_nonbond_env%rlist_cut)
356 NULLIFY (fist_nonbond_env%rlist_lowsq)
357 NULLIFY (fist_nonbond_env%ij_kind_full_fac)
358 NULLIFY (fist_nonbond_env%nonbonded)
359 NULLIFY (fist_nonbond_env%cell_last_update)
360 NULLIFY (fist_nonbond_env%r_last_update)
361 NULLIFY (fist_nonbond_env%r_last_update_pbc)
362 NULLIFY (fist_nonbond_env%rshell_last_update_pbc)
363 NULLIFY (fist_nonbond_env%rcore_last_update_pbc)
364 NULLIFY (fist_nonbond_env%eam_data)
365 NULLIFY (fist_nonbond_env%nequip_data)
366 NULLIFY (fist_nonbond_env%deepmd_data)
367 NULLIFY (fist_nonbond_env%ace_data)
368 NULLIFY (fist_nonbond_env%charges)
369 CALL init_fist_nonbond_env(fist_nonbond_env, atomic_kind_set, potparm14, &
370 potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, &
371 vdw_scale14, shift_cutoff)
372 END SUBROUTINE fist_nonbond_env_create
373
374! **************************************************************************************************
375!> \brief Purpose: Initialise the FIST nonbond environment.
376!> \param fist_nonbond_env the object to create
377!> \param atomic_kind_set ...
378!> \param potparm14 ...
379!> \param potparm ...
380!> \param do_nonbonded ...
381!> \param do_electrostatics ...
382!> \param verlet_skin ...
383!> \param ewald_rcut ...
384!> \param ei_scale14 ...
385!> \param vdw_scale14 ...
386!> \param shift_cutoff ...
387! **************************************************************************************************
388 SUBROUTINE init_fist_nonbond_env(fist_nonbond_env, atomic_kind_set, &
389 potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, &
390 vdw_scale14, shift_cutoff)
391
392 TYPE(fist_nonbond_env_type), INTENT(INOUT) :: fist_nonbond_env
393 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
394 TYPE(pair_potential_pp_type), OPTIONAL, POINTER :: potparm14, potparm
395 LOGICAL, INTENT(IN) :: do_nonbonded, do_electrostatics
396 REAL(kind=dp), INTENT(IN) :: verlet_skin, ewald_rcut, ei_scale14, &
397 vdw_scale14
398 LOGICAL, INTENT(IN) :: shift_cutoff
399
400 INTEGER :: idim, jdim, natom_types
401 LOGICAL :: check, use_potparm, use_potparm14
402 REAL(kind=dp) :: fac, rcut, rlow
403
404 use_potparm14 = PRESENT(potparm14)
405 IF (use_potparm14) use_potparm14 = use_potparm14 .OR. ASSOCIATED(potparm14)
406 use_potparm = PRESENT(potparm)
407 IF (use_potparm) use_potparm = use_potparm .OR. ASSOCIATED(potparm)
408 NULLIFY (fist_nonbond_env%nonbonded)
409 NULLIFY (fist_nonbond_env%r_last_update)
410 NULLIFY (fist_nonbond_env%r_last_update_pbc)
411 NULLIFY (fist_nonbond_env%rshell_last_update_pbc)
412 NULLIFY (fist_nonbond_env%rcore_last_update_pbc)
413 NULLIFY (fist_nonbond_env%cell_last_update)
414 NULLIFY (fist_nonbond_env%rlist_cut)
415 NULLIFY (fist_nonbond_env%rlist_lowsq)
416 NULLIFY (fist_nonbond_env%ij_kind_full_fac)
417 fist_nonbond_env%unit_type = "ANGSTROM"
418 fist_nonbond_env%do_nonbonded = do_nonbonded
419 fist_nonbond_env%do_electrostatics = do_electrostatics
420 fist_nonbond_env%lup = 0
421 fist_nonbond_env%aup = 0
422 fist_nonbond_env%ei_scale14 = ei_scale14
423 fist_nonbond_env%vdw_scale14 = vdw_scale14
424 fist_nonbond_env%shift_cutoff = shift_cutoff
425 fist_nonbond_env%counter = 0
426 fist_nonbond_env%last_update = 0
427 fist_nonbond_env%num_update = 0
428 fist_nonbond_env%long_range_correction = 0
429 IF (do_nonbonded) THEN
430 natom_types = 1
431 ! Determine size of kind arrays
432 natom_types = SIZE(atomic_kind_set)
433 IF (use_potparm14) THEN
434 check = (SIZE(potparm14%pot, 1) == natom_types)
435 cpassert(check)
436 END IF
437 IF (use_potparm) THEN
438 check = (SIZE(potparm%pot, 1) == natom_types)
439 cpassert(check)
440 END IF
441 ALLOCATE (fist_nonbond_env%rlist_cut(natom_types, natom_types))
442 ALLOCATE (fist_nonbond_env%rlist_lowsq(natom_types, natom_types))
443 ALLOCATE (fist_nonbond_env%ij_kind_full_fac(natom_types, natom_types))
444 fist_nonbond_env%ij_kind_full_fac = 1.0_dp
445 DO idim = 1, natom_types
446 DO jdim = idim, natom_types
447 IF ((use_potparm) .OR. (use_potparm14)) THEN
448 IF (use_potparm) THEN
449 rcut = sqrt(potparm%pot(idim, jdim)%pot%rcutsq)
450 fac = potparm%pot(idim, jdim)%pot%spl_f%rscale(1)
451 rlow = fac/(potparm%pot(idim, jdim)%pot%pair_spline_data(1)%spline_data%xn)
452 ELSE
453 rcut = sqrt(potparm14%pot(idim, jdim)%pot%rcutsq)
454 fac = potparm14%pot(idim, jdim)%pot%spl_f%rscale(1)
455 rlow = fac/(potparm14%pot(idim, jdim)%pot%pair_spline_data(1)%spline_data%xn)
456 END IF
457 ! Warning: rlist_rcut should only be used by the neighbor list
458 ! algorithm. It is not the cutoff for the evaluation of the
459 ! interactions because rlist_rcut includes the Verlet skin.
460 rcut = max(rcut, ewald_rcut) + verlet_skin
461 fist_nonbond_env%rlist_cut(idim, jdim) = rcut
462 fist_nonbond_env%rlist_cut(jdim, idim) = rcut
463 rlow = rlow*(1.06_dp)**2 ! 1.06_dp in order to have 1/2 Emax_spline
464 fist_nonbond_env%rlist_lowsq(idim, jdim) = rlow
465 fist_nonbond_env%rlist_lowsq(jdim, idim) = rlow
466 ! In case of manybody potential the neighbor list will be full.
467 ! This means that for each atom pair (a,b) of the current types,
468 ! atom a is in the neighbor list of b and b is in the neighbor
469 ! list of a. ij_kind_full_fac is used to correct for the double
470 ! counting in the conventional pair potentials cause by this
471 ! situation.
472 IF (any(potparm%pot(idim, jdim)%pot%type == tersoff_type)) THEN
473 ! TODO: what if 14 is not of tersoff type while the normal
474 ! nonbond is? (or the reverse). We'd better impose
475 ! consistency.
476 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
477 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
478 END IF
479 IF (any(potparm%pot(idim, jdim)%pot%type == siepmann_type)) THEN
480 ! TODO:see tersoff_type
481 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
482 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
483 END IF
484 IF (any(potparm%pot(idim, jdim)%pot%type == ace_type)) THEN
485 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
486 fist_nonbond_env%ij_kind_full_fac(jdim, idim) = 0.5_dp
487 END IF
488 IF (any(potparm%pot(idim, jdim)%pot%type == gal_type)) THEN
489 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
490 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
491 END IF
492 IF (any(potparm%pot(idim, jdim)%pot%type == gal21_type)) THEN
493 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
494 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
495 END IF
496 IF (any(potparm%pot(idim, jdim)%pot%type == nequip_type)) THEN
497 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
498 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
499 END IF
500 IF (any(potparm%pot(idim, jdim)%pot%type == mace_type)) THEN
501 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
502 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
503 END IF
504 IF (any(potparm%pot(idim, jdim)%pot%type == allegro_type)) THEN
505 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
506 fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
507 END IF
508 ELSE
509 ! In case we don't use potparm for initialization let's account
510 ! only for the real-space part of the Ewald sum.
511 fist_nonbond_env%rlist_cut(idim, jdim) = ewald_rcut
512 fist_nonbond_env%rlist_cut(jdim, idim) = ewald_rcut
513 fist_nonbond_env%rlist_lowsq(idim, jdim) = 0.0_dp
514 fist_nonbond_env%rlist_lowsq(jdim, idim) = 0.0_dp
515 END IF
516 END DO
517 END DO
518 IF (use_potparm14) fist_nonbond_env%potparm14 => potparm14
519 IF (use_potparm) fist_nonbond_env%potparm => potparm
520 fist_nonbond_env%natom_types = natom_types
521 ELSE
522 NULLIFY (fist_nonbond_env%potparm)
523 NULLIFY (fist_nonbond_env%potparm14)
524 END IF
525 END SUBROUTINE init_fist_nonbond_env
526
527! **************************************************************************************************
528!> \brief releases the given fist_nonbond_env (see doc/ReferenceCounting.html)
529!> \param fist_nonbond_env the object to release
530!> \par History
531!> 12.2002 created [fawzi]
532!> \author Fawzi Mohamed
533! **************************************************************************************************
534 SUBROUTINE fist_nonbond_env_release(fist_nonbond_env)
535 TYPE(fist_nonbond_env_type), INTENT(INOUT) :: fist_nonbond_env
536
537 IF (ASSOCIATED(fist_nonbond_env%nonbonded)) THEN
538 CALL fist_neighbor_deallocate(fist_nonbond_env%nonbonded)
539 END IF
540 ! Release potparm
541 CALL pair_potential_pp_release(fist_nonbond_env%potparm)
542 ! Release potparm14
543 CALL pair_potential_pp_release(fist_nonbond_env%potparm14)
544 IF (ASSOCIATED(fist_nonbond_env%r_last_update)) THEN
545 DEALLOCATE (fist_nonbond_env%r_last_update)
546 END IF
547 IF (ASSOCIATED(fist_nonbond_env%r_last_update_pbc)) THEN
548 DEALLOCATE (fist_nonbond_env%r_last_update_pbc)
549 END IF
550 IF (ASSOCIATED(fist_nonbond_env%charges)) THEN
551 DEALLOCATE (fist_nonbond_env%charges)
552 END IF
553 IF (ASSOCIATED(fist_nonbond_env%eam_data)) THEN
554 DEALLOCATE (fist_nonbond_env%eam_data)
555 END IF
556 IF (ASSOCIATED(fist_nonbond_env%nequip_data)) THEN
557 IF (ASSOCIATED(fist_nonbond_env%nequip_data%force)) THEN
558 DEALLOCATE (fist_nonbond_env%nequip_data%force)
559 END IF
560 IF (ASSOCIATED(fist_nonbond_env%nequip_data%use_indices)) THEN
561 DEALLOCATE (fist_nonbond_env%nequip_data%use_indices)
562 END IF
563 CALL torch_model_release(fist_nonbond_env%nequip_data%model)
564 DEALLOCATE (fist_nonbond_env%nequip_data)
565 END IF
566 IF (ASSOCIATED(fist_nonbond_env%deepmd_data)) THEN
567 IF (ASSOCIATED(fist_nonbond_env%deepmd_data%force)) THEN
568 DEALLOCATE (fist_nonbond_env%deepmd_data%force)
569 END IF
570 IF (ASSOCIATED(fist_nonbond_env%deepmd_data%use_indices)) THEN
571 DEALLOCATE (fist_nonbond_env%deepmd_data%use_indices)
572 END IF
573 CALL deepmd_model_release(fist_nonbond_env%deepmd_data%model)
574 DEALLOCATE (fist_nonbond_env%deepmd_data)
575 END IF
576 IF (ASSOCIATED(fist_nonbond_env%ace_data)) THEN
577 IF (ALLOCATED(fist_nonbond_env%ace_data%use_indices)) THEN
578 DEALLOCATE (fist_nonbond_env%ace_data%use_indices)
579 END IF
580 IF (ALLOCATED(fist_nonbond_env%ace_data%inverse_index_map)) THEN
581 DEALLOCATE (fist_nonbond_env%ace_data%inverse_index_map)
582 END IF
583 IF (ALLOCATED(fist_nonbond_env%ace_data%force)) THEN
584 DEALLOCATE (fist_nonbond_env%ace_data%force)
585 END IF
586 IF (ALLOCATED(fist_nonbond_env%ace_data%atpos)) THEN
587 DEALLOCATE (fist_nonbond_env%ace_data%atpos)
588 END IF
589 IF (ALLOCATED(fist_nonbond_env%ace_data%uctype)) THEN
590 DEALLOCATE (fist_nonbond_env%ace_data%uctype)
591 END IF
592 IF (ALLOCATED(fist_nonbond_env%ace_data%attype)) THEN
593 DEALLOCATE (fist_nonbond_env%ace_data%attype)
594 END IF
595 IF (ALLOCATED(fist_nonbond_env%ace_data%origin)) THEN
596 DEALLOCATE (fist_nonbond_env%ace_data%origin)
597 END IF
598 IF (ALLOCATED(fist_nonbond_env%ace_data%shift)) THEN
599 DEALLOCATE (fist_nonbond_env%ace_data%shift)
600 END IF
601 IF (ALLOCATED(fist_nonbond_env%ace_data%neiat)) THEN
602 DEALLOCATE (fist_nonbond_env%ace_data%neiat)
603 END IF
604 IF (ALLOCATED(fist_nonbond_env%ace_data%nlist)) THEN
605 DEALLOCATE (fist_nonbond_env%ace_data%nlist)
606 END IF
607 CALL ace_model_release(fist_nonbond_env%ace_data%model)
608 DEALLOCATE (fist_nonbond_env%ace_data)
609 END IF
610 IF (ASSOCIATED(fist_nonbond_env%rshell_last_update_pbc)) THEN
611 DEALLOCATE (fist_nonbond_env%rshell_last_update_pbc)
612 END IF
613 IF (ASSOCIATED(fist_nonbond_env%rcore_last_update_pbc)) THEN
614 DEALLOCATE (fist_nonbond_env%rcore_last_update_pbc)
615 END IF
616 IF (ASSOCIATED(fist_nonbond_env%cell_last_update)) THEN
617 CALL cell_release(fist_nonbond_env%cell_last_update)
618 END IF
619 IF (ASSOCIATED(fist_nonbond_env%ij_kind_full_fac)) THEN
620 DEALLOCATE (fist_nonbond_env%ij_kind_full_fac)
621 END IF
622 IF (ASSOCIATED(fist_nonbond_env%rlist_cut)) THEN
623 DEALLOCATE (fist_nonbond_env%rlist_cut)
624 END IF
625 IF (ASSOCIATED(fist_nonbond_env%rlist_lowsq)) THEN
626 DEALLOCATE (fist_nonbond_env%rlist_lowsq)
627 END IF
628 END SUBROUTINE fist_nonbond_env_release
629
630END MODULE fist_nonbond_env_types
static GRID_HOST_DEVICE double fac(const int i)
Factorial function, e.g. fac(5) = 5! = 120.
Definition grid_common.h:56
Interface to ACE C wrapper.
Definition ace_wrapper.F:12
subroutine, public ace_model_release(model)
Releases an ACE model and all its ressources.
Define the atomic kind types and their sub types.
Handles all functions related to the CELL.
Definition cell_types.F:15
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
Definition cell_types.F:608
Interface to the DeePMD-kit or a c++ wrapper.
subroutine, public deepmd_model_release(model)
Releases a deepmd model and all its ressources.
Define the neighbor list data types and the corresponding functionality.
subroutine, public fist_neighbor_deallocate(fist_neighbor)
...
subroutine, public fist_nonbond_env_create(fist_nonbond_env, atomic_kind_set, potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, vdw_scale14, shift_cutoff)
allocates and intitializes a fist_nonbond_env
subroutine, public fist_nonbond_env_get(fist_nonbond_env, potparm14, potparm, nonbonded, rlist_cut, rlist_lowsq, aup, lup, ei_scale14, vdw_scale14, shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, rcore_last_update_pbc, cell_last_update, num_update, last_update, counter, natom_types, long_range_correction, ij_kind_full_fac, eam_data, nequip_data, deepmd_data, ace_data, charges)
sets a fist_nonbond_env
subroutine, public fist_nonbond_env_set(fist_nonbond_env, potparm14, potparm, rlist_cut, rlist_lowsq, nonbonded, aup, lup, ei_scale14, vdw_scale14, shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, rcore_last_update_pbc, cell_last_update, num_update, last_update, counter, natom_types, long_range_correction, eam_data, nequip_data, deepmd_data, ace_data, charges)
sets a fist_nonbond_env
subroutine, public fist_nonbond_env_release(fist_nonbond_env)
releases the given fist_nonbond_env (see doc/ReferenceCounting.html)
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public allegro_type
integer, parameter, public gal_type
subroutine, public pair_potential_pp_release(potparm)
Release Data-structure that constains potential parameters.
integer, parameter, public nequip_type
integer, parameter, public siepmann_type
integer, parameter, public ace_type
integer, parameter, public mace_type
integer, parameter, public gal21_type
integer, parameter, public tersoff_type
subroutine, public torch_model_release(model)
Releases a Torch model and all its ressources.
Definition torch_api.F:1934
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60