43#include "./base/base_uses.f90"
49 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
50 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'nnp_environment_types'
73 INTEGER,
PARAMETER,
PUBLIC :: &
77 INTEGER,
PARAMETER,
PUBLIC :: &
96 INTEGER,
DIMENSION(:),
ALLOCATABLE :: n_rad
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: n_ang
99 CHARACTER(len=2),
ALLOCATABLE,
DIMENSION(:) :: ele
100 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nuc_ele
101 LOGICAL :: scale_acsf = .false.
102 LOGICAL :: scale_sigma_acsf = .false.
103 LOGICAL :: center_acsf = .false.
104 LOGICAL :: normnodes = .false.
105 INTEGER :: n_radgrp = -1
106 INTEGER :: n_anggrp = -1
107 INTEGER :: cut_type = -1
108 REAL(kind=
dp) :: eshortmin = -1.0_dp
109 REAL(kind=
dp) :: eshortmax = -1.0_dp
110 REAL(kind=
dp) :: scmax = -1.0_dp
111 REAL(kind=
dp) :: scmin = -1.0_dp
112 REAL(kind=
dp) :: max_cut = -1.0_dp
113 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: atom_energies
115 INTEGER :: n_committee = -1
116 INTEGER :: n_hlayer = -1
117 INTEGER :: n_layer = -1
118 INTEGER :: rad_spline_n = 8192
119 REAL(kind=
dp) :: verlet_skin = -1.0_dp
120 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_hnodes
121 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: actfnct
122 INTEGER :: expol = -1
123 LOGICAL :: output_expol = .false.
125 INTEGER :: num_atoms = -1
126 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: atomic_energy
127 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: committee_energy
128 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ele_ind, nuc_atoms, sort, sort_inv
129 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coord
130 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: myforce
131 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: committee_forces, committee_stress
132 CHARACTER(len=default_string_length), &
133 ALLOCATABLE,
DIMENSION(:) :: atoms
134 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: nnp_forces
135 REAL(kind=
dp) :: nnp_potential_energy = -1.0_dp
141 LOGICAL :: use_ref_cell = .false.
143 LOGICAL :: bias = .false.
144 LOGICAL :: bias_align = .false.
145 REAL(kind=
dp) :: bias_energy = -1.0_dp
146 REAL(kind=
dp) :: bias_kb = -1.0_dp
147 REAL(kind=
dp) :: bias_sigma0 = -1.0_dp
148 REAL(kind=
dp) :: bias_sigma = -1.0_dp
149 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: bias_forces
150 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: bias_e_avrg
169 INTEGER :: n_symf = -1
170 INTEGER,
DIMENSION(:),
ALLOCATABLE :: symf
171 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ele_ind
172 CHARACTER(LEN=2),
DIMENSION(:),
ALLOCATABLE :: ele
173 REAL(kind=
dp) :: cutoff = -1.0_dp
177 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: pack_eta
178 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: pack_zeta
179 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: pack_lam
180 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: pack_prefzeta
181 INTEGER,
DIMENSION(:),
ALLOCATABLE :: pack_izeta
182 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: pack_use_int_zeta
187 LOGICAL :: spline_built = .false.
188 INTEGER :: spline_n = 0
189 REAL(kind=
dp) :: spline_dx = 1.0_dp
190 REAL(kind=
dp) :: spline_dx_inv = 1.0_dp
191 REAL(kind=
dp) :: spline_x_max = 0.0_dp
192 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: spline_y
193 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: spline_dy
212 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: y
213 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: funccut
214 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eta
215 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: rs
216 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_min
217 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_max
218 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_av
219 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: sigma
220 CHARACTER(len=2),
ALLOCATABLE,
DIMENSION(:) :: ele
221 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nuc_ele
222 INTEGER :: n_symfgrp = -1
243 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: y
244 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: funccut
245 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eta
246 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: zeta
247 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: prefzeta
248 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: lam
249 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_min
250 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_max
251 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: loc_av
252 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: sigma
253 CHARACTER(len=2),
ALLOCATABLE,
DIMENSION(:) :: ele1
254 CHARACTER(len=2),
ALLOCATABLE,
DIMENSION(:) :: ele2
255 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nuc_ele1
256 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nuc_ele2
257 INTEGER :: n_symfgrp = -1
269 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ind
270 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: dist
281 INTEGER,
DIMENSION(3) :: pbc_copies = -1
282 INTEGER,
DIMENSION(:),
ALLOCATABLE :: n_rad
283 INTEGER,
DIMENSION(:),
ALLOCATABLE :: n_ang1
284 INTEGER,
DIMENSION(:),
ALLOCATABLE :: n_ang2
299 LOGICAL :: initialized = .false.
300 INTEGER :: num_atoms = -1
301 INTEGER :: n_images = 0
302 INTEGER :: n_cells = 1
303 INTEGER,
DIMENSION(3) :: exact_pbc_copies = 0
304 INTEGER,
DIMENSION(3) :: list_pbc_copies = 0
305 INTEGER,
DIMENSION(3) :: image_copies = 0
306 INTEGER,
DIMENSION(3) :: nbin = 1
307 INTEGER,
DIMENSION(3) :: bin_span = 0
308 INTEGER,
DIMENSION(3) :: perd = 0
309 LOGICAL :: orthorhombic = .false.
310 REAL(kind=
dp) :: exact_cutoff = -1.0_dp
311 REAL(kind=
dp) :: list_cutoff = -1.0_dp
312 REAL(kind=
dp) :: verlet_skin = 0.0_dp
313 REAL(kind=
dp),
DIMENSION(3) :: lower = 0.0_dp
314 REAL(kind=
dp),
DIMENSION(3) :: upper = 0.0_dp
315 REAL(kind=
dp),
DIMENSION(3) :: bin_width = 1.0_dp
316 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat = 0.0_dp
317 REAL(kind=
dp),
DIMENSION(3, 3) :: h_inv = 0.0_dp
318 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coord_primary
319 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coord_scaled
320 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: ref_coord_primary
321 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: image_atom
322 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: head
323 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: next
324 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: image_shift
325 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: image_translation
336 INTEGER :: n_ang1 = 0
337 INTEGER :: n_ang2 = 0
338 REAL(kind=
dp) :: max_relevant_cutoff = 0.0_dp
339 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: rad_groups
340 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ang1_groups
341 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ang2_groups
352 INTEGER :: n_symf = 0
353 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) ::
data
363 INTEGER :: max_rad_symf = 0
364 INTEGER :: max_ang_symf = 0
365 INTEGER :: n_input_nodes = 0
368 INTEGER :: cache_cap = 0
371#if defined(FTN_NO_DEFAULT_INIT)
373 pbc_copies=-1, n_rad=null(), &
374 n_ang1=null(), n_ang2=null(), &
375 rad=null(), ang1=null(), ang2=null())
379 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: radial_sym
380 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: radial_force
381 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: angular_sym
382 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: angular_force
385 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: fc_cache1
386 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: dfc_cache1
387 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: fc_cache2
388 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: dfc_cache2
393 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: self_dgdr
407 LOGICAL :: initialized = .false.
409 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_rad
410 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_ang
411 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_radgrp
412 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_anggrp
414 DIMENSION(:, :) :: pair_map
417 DIMENSION(:, :) :: workspace
426 TYPE(nnp_arc_layer_type),
POINTER,
DIMENSION(:) :: layer => null()
427 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_nodes
435 TYPE nnp_arc_layer_type
436 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: weights
437 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: bweights
438 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: node
439 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: node_grad
440 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: tmp_der
441 END TYPE nnp_arc_layer_type
453 TYPE(
nnp_type),
INTENT(INOUT) :: nnp_env
457 IF (
ASSOCIATED(nnp_env%rad))
THEN
458 DO i = 1, nnp_env%n_ele
459 DO j = 1, nnp_env%rad(i)%n_symfgrp
460 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%symf))
THEN
461 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%symf, &
462 nnp_env%rad(i)%symfgrp(j)%ele, &
463 nnp_env%rad(i)%symfgrp(j)%ele_ind)
465 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%spline_y))
THEN
466 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%spline_y)
468 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%spline_dy))
THEN
469 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%spline_dy)
471 nnp_env%rad(i)%symfgrp(j)%spline_built = .false.
473 DEALLOCATE (nnp_env%rad(i)%y, &
474 nnp_env%rad(i)%funccut, &
475 nnp_env%rad(i)%eta, &
477 nnp_env%rad(i)%loc_min, &
478 nnp_env%rad(i)%loc_max, &
479 nnp_env%rad(i)%loc_av, &
480 nnp_env%rad(i)%sigma, &
481 nnp_env%rad(i)%ele, &
482 nnp_env%rad(i)%nuc_ele, &
483 nnp_env%rad(i)%symfgrp)
485 DEALLOCATE (nnp_env%rad)
488 IF (
ASSOCIATED(nnp_env%ang))
THEN
489 DO i = 1, nnp_env%n_ele
490 DO j = 1, nnp_env%ang(i)%n_symfgrp
491 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%symf))
THEN
492 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%symf, &
493 nnp_env%ang(i)%symfgrp(j)%ele, &
494 nnp_env%ang(i)%symfgrp(j)%ele_ind)
496 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_eta))
THEN
497 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_eta)
499 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_zeta))
THEN
500 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_zeta)
502 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_lam))
THEN
503 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_lam)
505 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_prefzeta))
THEN
506 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_prefzeta)
508 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_izeta))
THEN
509 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_izeta)
511 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_use_int_zeta))
THEN
512 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_use_int_zeta)
515 DEALLOCATE (nnp_env%ang(i)%y, &
516 nnp_env%ang(i)%funccut, &
517 nnp_env%ang(i)%eta, &
518 nnp_env%ang(i)%zeta, &
519 nnp_env%ang(i)%prefzeta, &
520 nnp_env%ang(i)%lam, &
521 nnp_env%ang(i)%loc_min, &
522 nnp_env%ang(i)%loc_max, &
523 nnp_env%ang(i)%loc_av, &
524 nnp_env%ang(i)%sigma, &
525 nnp_env%ang(i)%ele1, &
526 nnp_env%ang(i)%ele2, &
527 nnp_env%ang(i)%nuc_ele1, &
528 nnp_env%ang(i)%nuc_ele2, &
529 nnp_env%ang(i)%symfgrp)
531 DEALLOCATE (nnp_env%ang)
534 IF (
ASSOCIATED(nnp_env%arc))
THEN
535 DO i = 1, nnp_env%n_ele
536 IF (
ASSOCIATED(nnp_env%arc(i)%layer))
THEN
537 DO j = 1, nnp_env%n_layer
538 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%node))
THEN
539 DEALLOCATE (nnp_env%arc(i)%layer(j)%node)
541 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%node_grad))
THEN
542 DEALLOCATE (nnp_env%arc(i)%layer(j)%node_grad)
544 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%weights))
THEN
545 DEALLOCATE (nnp_env%arc(i)%layer(j)%weights)
547 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%bweights))
THEN
548 DEALLOCATE (nnp_env%arc(i)%layer(j)%bweights)
550 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%tmp_der))
THEN
551 DEALLOCATE (nnp_env%arc(i)%layer(j)%tmp_der)
554 DEALLOCATE (nnp_env%arc(i)%layer, &
555 nnp_env%arc(i)%n_nodes)
558 DEALLOCATE (nnp_env%arc)
561 IF (
ALLOCATED(nnp_env%ele))
DEALLOCATE (nnp_env%ele)
562 IF (
ALLOCATED(nnp_env%nuc_ele))
DEALLOCATE (nnp_env%nuc_ele)
563 IF (
ALLOCATED(nnp_env%n_hnodes))
DEALLOCATE (nnp_env%n_hnodes)
564 IF (
ALLOCATED(nnp_env%actfnct))
DEALLOCATE (nnp_env%actfnct)
565 IF (
ALLOCATED(nnp_env%nnp_forces))
DEALLOCATE (nnp_env%nnp_forces)
566 IF (
ALLOCATED(nnp_env%atomic_energy))
DEALLOCATE (nnp_env%atomic_energy)
567 IF (
ALLOCATED(nnp_env%committee_energy))
DEALLOCATE (nnp_env%committee_energy)
568 IF (
ALLOCATED(nnp_env%ele_ind))
DEALLOCATE (nnp_env%ele_ind)
569 IF (
ALLOCATED(nnp_env%nuc_atoms))
DEALLOCATE (nnp_env%nuc_atoms)
570 IF (
ALLOCATED(nnp_env%sort))
DEALLOCATE (nnp_env%sort)
571 IF (
ALLOCATED(nnp_env%sort_inv))
DEALLOCATE (nnp_env%sort_inv)
572 IF (
ALLOCATED(nnp_env%coord))
DEALLOCATE (nnp_env%coord)
573 IF (
ALLOCATED(nnp_env%myforce))
DEALLOCATE (nnp_env%myforce)
574 IF (
ALLOCATED(nnp_env%committee_forces))
DEALLOCATE (nnp_env%committee_forces)
575 IF (
ALLOCATED(nnp_env%committee_stress))
DEALLOCATE (nnp_env%committee_stress)
576 IF (
ALLOCATED(nnp_env%atoms))
DEALLOCATE (nnp_env%atoms)
578 IF (
ALLOCATED(nnp_env%cell_list_cache))
THEN
580 DEALLOCATE (nnp_env%cell_list_cache)
582 IF (
ALLOCATED(nnp_env%neighbor_interface_state))
THEN
584 DEALLOCATE (nnp_env%neighbor_interface_state)
587 IF (
ASSOCIATED(nnp_env%subsys))
THEN
590 IF (
ASSOCIATED(nnp_env%cell))
THEN
593 IF (
ASSOCIATED(nnp_env%cell_ref))
THEN
608 IF (
ALLOCATED(cache%coord_primary))
DEALLOCATE (cache%coord_primary)
609 IF (
ALLOCATED(cache%coord_scaled))
DEALLOCATE (cache%coord_scaled)
610 IF (
ALLOCATED(cache%ref_coord_primary))
DEALLOCATE (cache%ref_coord_primary)
611 IF (
ALLOCATED(cache%image_atom))
DEALLOCATE (cache%image_atom)
612 IF (
ALLOCATED(cache%head))
DEALLOCATE (cache%head)
613 IF (
ALLOCATED(cache%next))
DEALLOCATE (cache%next)
614 IF (
ALLOCATED(cache%image_shift))
DEALLOCATE (cache%image_shift)
615 IF (
ALLOCATED(cache%image_translation))
DEALLOCATE (cache%image_translation)
616 cache%initialized = .false.
630 INTENT(INOUT) :: state
634 IF (
ALLOCATED(state%pair_map))
THEN
635 DO i = 1,
SIZE(state%pair_map, 1)
636 DO j = 1,
SIZE(state%pair_map, 2)
637 IF (
ALLOCATED(state%pair_map(i, j)%rad_groups))
DEALLOCATE (state%pair_map(i, j)%rad_groups)
638 IF (
ALLOCATED(state%pair_map(i, j)%ang1_groups))
DEALLOCATE (state%pair_map(i, j)%ang1_groups)
639 IF (
ALLOCATED(state%pair_map(i, j)%ang2_groups))
DEALLOCATE (state%pair_map(i, j)%ang2_groups)
642 DEALLOCATE (state%pair_map)
645 IF (
ALLOCATED(state%workspace))
THEN
646 DO j = 1,
SIZE(state%workspace, 2)
647 DO i = 1,
SIZE(state%workspace, 1)
648 CALL nnp_workspace_release(state%workspace(i, j))
651 DEALLOCATE (state%workspace)
654 IF (
ALLOCATED(state%n_rad))
DEALLOCATE (state%n_rad)
655 IF (
ALLOCATED(state%n_ang))
DEALLOCATE (state%n_ang)
656 IF (
ALLOCATED(state%n_radgrp))
DEALLOCATE (state%n_radgrp)
657 IF (
ALLOCATED(state%n_anggrp))
DEALLOCATE (state%n_anggrp)
659 state%initialized = .false.
668 SUBROUTINE nnp_workspace_release(workspace)
673 IF (
ALLOCATED(workspace%neighbor%rad))
THEN
674 DO s = 1,
SIZE(workspace%neighbor%rad)
675 IF (
ALLOCATED(workspace%neighbor%rad(s)%ind))
DEALLOCATE (workspace%neighbor%rad(s)%ind)
676 IF (
ALLOCATED(workspace%neighbor%rad(s)%dist))
DEALLOCATE (workspace%neighbor%rad(s)%dist)
678 DEALLOCATE (workspace%neighbor%rad)
680 IF (
ALLOCATED(workspace%neighbor%ang1))
THEN
681 DO s = 1,
SIZE(workspace%neighbor%ang1)
682 IF (
ALLOCATED(workspace%neighbor%ang1(s)%ind))
DEALLOCATE (workspace%neighbor%ang1(s)%ind)
683 IF (
ALLOCATED(workspace%neighbor%ang1(s)%dist))
DEALLOCATE (workspace%neighbor%ang1(s)%dist)
685 DEALLOCATE (workspace%neighbor%ang1)
687 IF (
ALLOCATED(workspace%neighbor%ang2))
THEN
688 DO s = 1,
SIZE(workspace%neighbor%ang2)
689 IF (
ALLOCATED(workspace%neighbor%ang2(s)%ind))
DEALLOCATE (workspace%neighbor%ang2(s)%ind)
690 IF (
ALLOCATED(workspace%neighbor%ang2(s)%dist))
DEALLOCATE (workspace%neighbor%ang2(s)%dist)
692 DEALLOCATE (workspace%neighbor%ang2)
694 IF (
ALLOCATED(workspace%neighbor%n_rad))
DEALLOCATE (workspace%neighbor%n_rad)
695 IF (
ALLOCATED(workspace%neighbor%n_ang1))
DEALLOCATE (workspace%neighbor%n_ang1)
696 IF (
ALLOCATED(workspace%neighbor%n_ang2))
DEALLOCATE (workspace%neighbor%n_ang2)
697 workspace%neighbor%pbc_copies = -1
699 IF (
ALLOCATED(workspace%radial_sym))
DEALLOCATE (workspace%radial_sym)
700 IF (
ALLOCATED(workspace%radial_force))
DEALLOCATE (workspace%radial_force)
701 IF (
ALLOCATED(workspace%angular_sym))
DEALLOCATE (workspace%angular_sym)
702 IF (
ALLOCATED(workspace%angular_force))
DEALLOCATE (workspace%angular_force)
703 IF (
ALLOCATED(workspace%fc_cache1))
DEALLOCATE (workspace%fc_cache1)
704 IF (
ALLOCATED(workspace%dfc_cache1))
DEALLOCATE (workspace%dfc_cache1)
705 IF (
ALLOCATED(workspace%fc_cache2))
DEALLOCATE (workspace%fc_cache2)
706 IF (
ALLOCATED(workspace%dfc_cache2))
DEALLOCATE (workspace%dfc_cache2)
707 IF (
ALLOCATED(workspace%self_dGdr))
DEALLOCATE (workspace%self_dGdr)
709 IF (
ALLOCATED(workspace%dGdr_rad))
THEN
710 DO s = 1,
SIZE(workspace%dGdr_rad)
711 IF (
ALLOCATED(workspace%dGdr_rad(s)%data))
DEALLOCATE (workspace%dGdr_rad(s)%data)
713 DEALLOCATE (workspace%dGdr_rad)
715 IF (
ALLOCATED(workspace%dGdr_ang_jj))
THEN
716 DO s = 1,
SIZE(workspace%dGdr_ang_jj)
717 IF (
ALLOCATED(workspace%dGdr_ang_jj(s)%data))
DEALLOCATE (workspace%dGdr_ang_jj(s)%data)
719 DEALLOCATE (workspace%dGdr_ang_jj)
721 IF (
ALLOCATED(workspace%dGdr_ang_kk))
THEN
722 DO s = 1,
SIZE(workspace%dGdr_ang_kk)
723 IF (
ALLOCATED(workspace%dGdr_ang_kk(s)%data))
DEALLOCATE (workspace%dGdr_ang_kk(s)%data)
725 DEALLOCATE (workspace%dGdr_ang_kk)
728 workspace%max_rad_symf = 0
729 workspace%max_ang_symf = 0
730 workspace%n_input_nodes = 0
731 workspace%cache_cap = 0
732 END SUBROUTINE nnp_workspace_release
760 atomic_kind_set, particle_set, local_particles, &
761 molecule_kind_set, molecule_set, local_molecules, &
762 nnp_input, force_env_input, cell, cell_ref, &
763 use_ref_cell, nnp_potential_energy, virial)
765 TYPE(
nnp_type),
INTENT(IN) :: nnp_env
766 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: nnp_forces
769 POINTER :: atomic_kind_set
771 POINTER :: particle_set
774 POINTER :: molecule_kind_set
776 POINTER :: molecule_set
779 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
780 LOGICAL,
INTENT(OUT),
OPTIONAL :: use_ref_cell
781 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: nnp_potential_energy
789 NULLIFY (atomic_kinds, particles, molecules, molecule_kinds)
791 IF (
PRESENT(nnp_potential_energy))
THEN
792 nnp_potential_energy = nnp_env%nnp_potential_energy
794 IF (
PRESENT(nnp_forces)) nnp_forces = nnp_env%nnp_forces
798 IF (
PRESENT(cell)) cell => nnp_env%cell
800 IF (
PRESENT(subsys)) subsys => nnp_env%subsys
801 IF (
ASSOCIATED(nnp_env%subsys))
THEN
803 atomic_kinds=atomic_kinds, &
804 particles=particles, &
805 molecule_kinds=molecule_kinds, &
806 molecules=molecules, &
807 local_molecules=local_molecules, &
808 local_particles=local_particles, &
812 IF (
PRESENT(atomic_kind_set)) atomic_kind_set => atomic_kinds%els
813 IF (
PRESENT(particle_set)) particle_set => particles%els
814 IF (
PRESENT(molecule_kind_set)) molecule_kind_set => molecule_kinds%els
815 IF (
PRESENT(molecule_set)) molecule_set => molecules%els
817 IF (
PRESENT(nnp_input)) nnp_input => nnp_env%nnp_input
818 IF (
PRESENT(force_env_input)) force_env_input => nnp_env%force_env_input
819 IF (
PRESENT(cell_ref)) cell_ref => nnp_env%cell_ref
820 IF (
PRESENT(use_ref_cell)) use_ref_cell = nnp_env%use_ref_cell
848 atomic_kind_set, particle_set, local_particles, &
849 molecule_kind_set, molecule_set, local_molecules, &
850 nnp_input, force_env_input, cell, cell_ref, &
851 use_ref_cell, nnp_potential_energy)
853 TYPE(
nnp_type),
INTENT(INOUT) :: nnp_env
854 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: nnp_forces
857 POINTER :: atomic_kind_set
859 POINTER :: particle_set
862 POINTER :: molecule_kind_set
864 POINTER :: molecule_set
867 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
868 LOGICAL,
INTENT(IN),
OPTIONAL :: use_ref_cell
869 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: nnp_potential_energy
876 IF (
PRESENT(nnp_potential_energy))
THEN
877 nnp_env%nnp_potential_energy = nnp_potential_energy
879 IF (
PRESENT(nnp_forces)) nnp_env%nnp_forces(:, :) = nnp_forces
881 IF (
PRESENT(subsys))
THEN
882 IF (
ASSOCIATED(nnp_env%subsys))
THEN
883 IF (.NOT.
ASSOCIATED(nnp_env%subsys, subsys))
THEN
887 nnp_env%subsys => subsys
889 IF (
PRESENT(cell))
THEN
890 IF (
ASSOCIATED(cell))
THEN
895 IF (
ASSOCIATED(nnp_env%subsys))
THEN
899 IF (
PRESENT(atomic_kind_set))
THEN
901 CALL cp_subsys_set(nnp_env%subsys, atomic_kinds=atomic_kinds)
904 IF (
PRESENT(particle_set))
THEN
909 IF (
PRESENT(molecule_kind_set))
THEN
911 CALL cp_subsys_set(nnp_env%subsys, molecule_kinds=molecule_kinds)
914 IF (
PRESENT(molecule_set))
THEN
919 IF (
PRESENT(local_particles))
THEN
920 CALL cp_subsys_set(nnp_env%subsys, local_particles=local_particles)
922 IF (
PRESENT(local_molecules))
THEN
923 CALL cp_subsys_set(nnp_env%subsys, local_molecules=local_molecules)
926 IF (
PRESENT(nnp_input)) nnp_env%nnp_input => nnp_input
927 IF (
PRESENT(force_env_input))
THEN
928 nnp_env%force_env_input => force_env_input
930 IF (
PRESENT(cell_ref))
THEN
933 nnp_env%cell_ref => cell_ref
935 IF (
PRESENT(use_ref_cell)) nnp_env%use_ref_cell = use_ref_cell
represent a simple array based list of the given type
subroutine, public atomic_kind_list_release(list)
releases a list (see doc/ReferenceCounting.html)
subroutine, public atomic_kind_list_create(list, els_ptr, owns_els, n_els)
creates a list
Define the atomic kind types and their sub types.
Handles all functions related to the CELL.
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
subroutine, public cell_retain(cell)
retains the given cell (see doc/ReferenceCounting.html)
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_set(subsys, atomic_kinds, particles, local_particles, molecules, molecule_kinds, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, results, cell, cell_ref, use_ref_cell)
sets various propreties of the subsys
subroutine, public cp_subsys_release(subsys)
releases a subsys (see doc/ReferenceCounting.html)
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell)
returns information about various attributes of the given subsys
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
represent a simple array based list of the given type
subroutine, public molecule_kind_list_create(list, els_ptr, owns_els, n_els)
creates a list
subroutine, public molecule_kind_list_release(list)
releases a list (see doc/ReferenceCounting.html)
Define the molecule kind structure types and the corresponding functionality.
represent a simple array based list of the given type
subroutine, public molecule_list_create(list, els_ptr, owns_els, n_els)
creates a list
subroutine, public molecule_list_release(list)
releases a list (see doc/ReferenceCounting.html)
Define the data structure for the molecule information.
Data types for neural network potentials.
integer, parameter, public nnp_actfnct_lin
integer, parameter, public nnp_cut_tanh
subroutine, public nnp_env_set(nnp_env, nnp_forces, subsys, atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, nnp_input, force_env_input, cell, cell_ref, use_ref_cell, nnp_potential_energy)
Sets various attributes of the nnp environment.
integer, parameter, public nnp_actfnct_cos
subroutine, public nnp_cell_list_cache_release(cache)
Free the allocatable parts of a cell-list cache. Co-located with the type definition to avoid creatin...
integer, parameter, public nnp_actfnct_invsig
integer, parameter, public nnp_actfnct_sig
integer, parameter, public nnp_actfnct_exp
subroutine, public nnp_neighbor_interface_state_release(state)
Free the allocatable parts of a neighbour-interface state. Co-located with the type definition to avo...
integer, parameter, public nnp_cut_cos
derived data types
integer, parameter, public nnp_actfnct_softplus
integer, parameter, public nnp_actfnct_quad
integer, parameter, public nnp_actfnct_gaus
subroutine, public nnp_env_get(nnp_env, nnp_forces, subsys, atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, nnp_input, force_env_input, cell, cell_ref, use_ref_cell, nnp_potential_energy, virial)
Returns various attributes of the nnp environment.
subroutine, public nnp_env_release(nnp_env)
Release data structure that holds all the information for neural network potentials.
integer, parameter, public nnp_actfnct_tanh
represent a simple array based list of the given type
subroutine, public particle_list_create(list, els_ptr, owns_els, n_els)
creates a list
subroutine, public particle_list_release(list)
releases a list (see doc/ReferenceCounting.html)
Define the data structure for the particle information.
represent a list of objects
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represents a system: atoms, molecules, their pos,vel,...
structure to store local (to a processor) ordered lists of integers.
represent a list of objects
represent a list of objects
Set of angular symmetry function type.
Set of radial symmetry function type.
Data type for artificial neural networks.
Linked-cell + Verlet-skin cache for the NNP descriptor neighbour walk. Persisted across MD steps so t...
Per-(element, SF-group) dG_k/dr buffer, sized to the group's n_symf (no max_*_symf padding) and the o...
Per-SF-group dense neighbour container. cap is the allocated slab size; the live count is nnp_neighbo...
Persistent neighbour-interface state. Owned by nnp_type so that the per-nnp pair-routing tables and p...
Species-pair routing table. For one (central element, neighbour element) pair, lists which radial / a...
Contains neighbors list of an atom (per-group dense layout).
Reusable per-element scratch / persistent caches for the ACSF descriptor and force assembly....
Symmetry functions group type.
Main data type collecting all relevant data for neural network potentials.
represent a list of objects