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
416 DIMENSION(:) :: workspace
425 TYPE(nnp_arc_layer_type),
POINTER,
DIMENSION(:) :: layer => null()
426 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_nodes
434 TYPE nnp_arc_layer_type
435 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: weights
436 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: bweights
437 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: node
438 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: node_grad
439 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: tmp_der
440 END TYPE nnp_arc_layer_type
452 TYPE(
nnp_type),
INTENT(INOUT) :: nnp_env
456 IF (
ASSOCIATED(nnp_env%rad))
THEN
457 DO i = 1, nnp_env%n_ele
458 DO j = 1, nnp_env%rad(i)%n_symfgrp
459 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%symf))
THEN
460 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%symf, &
461 nnp_env%rad(i)%symfgrp(j)%ele, &
462 nnp_env%rad(i)%symfgrp(j)%ele_ind)
464 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%spline_y))
THEN
465 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%spline_y)
467 IF (
ALLOCATED(nnp_env%rad(i)%symfgrp(j)%spline_dy))
THEN
468 DEALLOCATE (nnp_env%rad(i)%symfgrp(j)%spline_dy)
470 nnp_env%rad(i)%symfgrp(j)%spline_built = .false.
472 DEALLOCATE (nnp_env%rad(i)%y, &
473 nnp_env%rad(i)%funccut, &
474 nnp_env%rad(i)%eta, &
476 nnp_env%rad(i)%loc_min, &
477 nnp_env%rad(i)%loc_max, &
478 nnp_env%rad(i)%loc_av, &
479 nnp_env%rad(i)%sigma, &
480 nnp_env%rad(i)%ele, &
481 nnp_env%rad(i)%nuc_ele, &
482 nnp_env%rad(i)%symfgrp)
484 DEALLOCATE (nnp_env%rad)
487 IF (
ASSOCIATED(nnp_env%ang))
THEN
488 DO i = 1, nnp_env%n_ele
489 DO j = 1, nnp_env%ang(i)%n_symfgrp
490 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%symf))
THEN
491 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%symf, &
492 nnp_env%ang(i)%symfgrp(j)%ele, &
493 nnp_env%ang(i)%symfgrp(j)%ele_ind)
495 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_eta))
THEN
496 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_eta)
498 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_zeta))
THEN
499 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_zeta)
501 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_lam))
THEN
502 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_lam)
504 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_prefzeta))
THEN
505 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_prefzeta)
507 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_izeta))
THEN
508 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_izeta)
510 IF (
ALLOCATED(nnp_env%ang(i)%symfgrp(j)%pack_use_int_zeta))
THEN
511 DEALLOCATE (nnp_env%ang(i)%symfgrp(j)%pack_use_int_zeta)
514 DEALLOCATE (nnp_env%ang(i)%y, &
515 nnp_env%ang(i)%funccut, &
516 nnp_env%ang(i)%eta, &
517 nnp_env%ang(i)%zeta, &
518 nnp_env%ang(i)%prefzeta, &
519 nnp_env%ang(i)%lam, &
520 nnp_env%ang(i)%loc_min, &
521 nnp_env%ang(i)%loc_max, &
522 nnp_env%ang(i)%loc_av, &
523 nnp_env%ang(i)%sigma, &
524 nnp_env%ang(i)%ele1, &
525 nnp_env%ang(i)%ele2, &
526 nnp_env%ang(i)%nuc_ele1, &
527 nnp_env%ang(i)%nuc_ele2, &
528 nnp_env%ang(i)%symfgrp)
530 DEALLOCATE (nnp_env%ang)
533 IF (
ASSOCIATED(nnp_env%arc))
THEN
534 DO i = 1, nnp_env%n_ele
535 IF (
ASSOCIATED(nnp_env%arc(i)%layer))
THEN
536 DO j = 1, nnp_env%n_layer
537 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%node))
THEN
538 DEALLOCATE (nnp_env%arc(i)%layer(j)%node)
540 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%node_grad))
THEN
541 DEALLOCATE (nnp_env%arc(i)%layer(j)%node_grad)
543 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%weights))
THEN
544 DEALLOCATE (nnp_env%arc(i)%layer(j)%weights)
546 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%bweights))
THEN
547 DEALLOCATE (nnp_env%arc(i)%layer(j)%bweights)
549 IF (
ALLOCATED(nnp_env%arc(i)%layer(j)%tmp_der))
THEN
550 DEALLOCATE (nnp_env%arc(i)%layer(j)%tmp_der)
553 DEALLOCATE (nnp_env%arc(i)%layer, &
554 nnp_env%arc(i)%n_nodes)
557 DEALLOCATE (nnp_env%arc)
560 IF (
ALLOCATED(nnp_env%ele))
DEALLOCATE (nnp_env%ele)
561 IF (
ALLOCATED(nnp_env%nuc_ele))
DEALLOCATE (nnp_env%nuc_ele)
562 IF (
ALLOCATED(nnp_env%n_hnodes))
DEALLOCATE (nnp_env%n_hnodes)
563 IF (
ALLOCATED(nnp_env%actfnct))
DEALLOCATE (nnp_env%actfnct)
564 IF (
ALLOCATED(nnp_env%nnp_forces))
DEALLOCATE (nnp_env%nnp_forces)
565 IF (
ALLOCATED(nnp_env%atomic_energy))
DEALLOCATE (nnp_env%atomic_energy)
566 IF (
ALLOCATED(nnp_env%committee_energy))
DEALLOCATE (nnp_env%committee_energy)
567 IF (
ALLOCATED(nnp_env%ele_ind))
DEALLOCATE (nnp_env%ele_ind)
568 IF (
ALLOCATED(nnp_env%nuc_atoms))
DEALLOCATE (nnp_env%nuc_atoms)
569 IF (
ALLOCATED(nnp_env%sort))
DEALLOCATE (nnp_env%sort)
570 IF (
ALLOCATED(nnp_env%sort_inv))
DEALLOCATE (nnp_env%sort_inv)
571 IF (
ALLOCATED(nnp_env%coord))
DEALLOCATE (nnp_env%coord)
572 IF (
ALLOCATED(nnp_env%myforce))
DEALLOCATE (nnp_env%myforce)
573 IF (
ALLOCATED(nnp_env%committee_forces))
DEALLOCATE (nnp_env%committee_forces)
574 IF (
ALLOCATED(nnp_env%committee_stress))
DEALLOCATE (nnp_env%committee_stress)
575 IF (
ALLOCATED(nnp_env%atoms))
DEALLOCATE (nnp_env%atoms)
577 IF (
ALLOCATED(nnp_env%cell_list_cache))
THEN
579 DEALLOCATE (nnp_env%cell_list_cache)
581 IF (
ALLOCATED(nnp_env%neighbor_interface_state))
THEN
583 DEALLOCATE (nnp_env%neighbor_interface_state)
586 IF (
ASSOCIATED(nnp_env%subsys))
THEN
589 IF (
ASSOCIATED(nnp_env%cell))
THEN
592 IF (
ASSOCIATED(nnp_env%cell_ref))
THEN
607 IF (
ALLOCATED(cache%coord_primary))
DEALLOCATE (cache%coord_primary)
608 IF (
ALLOCATED(cache%coord_scaled))
DEALLOCATE (cache%coord_scaled)
609 IF (
ALLOCATED(cache%ref_coord_primary))
DEALLOCATE (cache%ref_coord_primary)
610 IF (
ALLOCATED(cache%image_atom))
DEALLOCATE (cache%image_atom)
611 IF (
ALLOCATED(cache%head))
DEALLOCATE (cache%head)
612 IF (
ALLOCATED(cache%next))
DEALLOCATE (cache%next)
613 IF (
ALLOCATED(cache%image_shift))
DEALLOCATE (cache%image_shift)
614 IF (
ALLOCATED(cache%image_translation))
DEALLOCATE (cache%image_translation)
615 cache%initialized = .false.
629 INTENT(INOUT) :: state
633 IF (
ALLOCATED(state%pair_map))
THEN
634 DO i = 1,
SIZE(state%pair_map, 1)
635 DO j = 1,
SIZE(state%pair_map, 2)
636 IF (
ALLOCATED(state%pair_map(i, j)%rad_groups))
DEALLOCATE (state%pair_map(i, j)%rad_groups)
637 IF (
ALLOCATED(state%pair_map(i, j)%ang1_groups))
DEALLOCATE (state%pair_map(i, j)%ang1_groups)
638 IF (
ALLOCATED(state%pair_map(i, j)%ang2_groups))
DEALLOCATE (state%pair_map(i, j)%ang2_groups)
641 DEALLOCATE (state%pair_map)
644 IF (
ALLOCATED(state%workspace))
THEN
645 DO i = 1,
SIZE(state%workspace)
646 CALL nnp_workspace_release(state%workspace(i))
648 DEALLOCATE (state%workspace)
651 IF (
ALLOCATED(state%n_rad))
DEALLOCATE (state%n_rad)
652 IF (
ALLOCATED(state%n_ang))
DEALLOCATE (state%n_ang)
653 IF (
ALLOCATED(state%n_radgrp))
DEALLOCATE (state%n_radgrp)
654 IF (
ALLOCATED(state%n_anggrp))
DEALLOCATE (state%n_anggrp)
656 state%initialized = .false.
665 SUBROUTINE nnp_workspace_release(workspace)
670 IF (
ALLOCATED(workspace%neighbor%rad))
THEN
671 DO s = 1,
SIZE(workspace%neighbor%rad)
672 IF (
ALLOCATED(workspace%neighbor%rad(s)%ind))
DEALLOCATE (workspace%neighbor%rad(s)%ind)
673 IF (
ALLOCATED(workspace%neighbor%rad(s)%dist))
DEALLOCATE (workspace%neighbor%rad(s)%dist)
675 DEALLOCATE (workspace%neighbor%rad)
677 IF (
ALLOCATED(workspace%neighbor%ang1))
THEN
678 DO s = 1,
SIZE(workspace%neighbor%ang1)
679 IF (
ALLOCATED(workspace%neighbor%ang1(s)%ind))
DEALLOCATE (workspace%neighbor%ang1(s)%ind)
680 IF (
ALLOCATED(workspace%neighbor%ang1(s)%dist))
DEALLOCATE (workspace%neighbor%ang1(s)%dist)
682 DEALLOCATE (workspace%neighbor%ang1)
684 IF (
ALLOCATED(workspace%neighbor%ang2))
THEN
685 DO s = 1,
SIZE(workspace%neighbor%ang2)
686 IF (
ALLOCATED(workspace%neighbor%ang2(s)%ind))
DEALLOCATE (workspace%neighbor%ang2(s)%ind)
687 IF (
ALLOCATED(workspace%neighbor%ang2(s)%dist))
DEALLOCATE (workspace%neighbor%ang2(s)%dist)
689 DEALLOCATE (workspace%neighbor%ang2)
691 IF (
ALLOCATED(workspace%neighbor%n_rad))
DEALLOCATE (workspace%neighbor%n_rad)
692 IF (
ALLOCATED(workspace%neighbor%n_ang1))
DEALLOCATE (workspace%neighbor%n_ang1)
693 IF (
ALLOCATED(workspace%neighbor%n_ang2))
DEALLOCATE (workspace%neighbor%n_ang2)
694 workspace%neighbor%pbc_copies = -1
696 IF (
ALLOCATED(workspace%radial_sym))
DEALLOCATE (workspace%radial_sym)
697 IF (
ALLOCATED(workspace%radial_force))
DEALLOCATE (workspace%radial_force)
698 IF (
ALLOCATED(workspace%angular_sym))
DEALLOCATE (workspace%angular_sym)
699 IF (
ALLOCATED(workspace%angular_force))
DEALLOCATE (workspace%angular_force)
700 IF (
ALLOCATED(workspace%fc_cache1))
DEALLOCATE (workspace%fc_cache1)
701 IF (
ALLOCATED(workspace%dfc_cache1))
DEALLOCATE (workspace%dfc_cache1)
702 IF (
ALLOCATED(workspace%fc_cache2))
DEALLOCATE (workspace%fc_cache2)
703 IF (
ALLOCATED(workspace%dfc_cache2))
DEALLOCATE (workspace%dfc_cache2)
704 IF (
ALLOCATED(workspace%self_dGdr))
DEALLOCATE (workspace%self_dGdr)
706 IF (
ALLOCATED(workspace%dGdr_rad))
THEN
707 DO s = 1,
SIZE(workspace%dGdr_rad)
708 IF (
ALLOCATED(workspace%dGdr_rad(s)%data))
DEALLOCATE (workspace%dGdr_rad(s)%data)
710 DEALLOCATE (workspace%dGdr_rad)
712 IF (
ALLOCATED(workspace%dGdr_ang_jj))
THEN
713 DO s = 1,
SIZE(workspace%dGdr_ang_jj)
714 IF (
ALLOCATED(workspace%dGdr_ang_jj(s)%data))
DEALLOCATE (workspace%dGdr_ang_jj(s)%data)
716 DEALLOCATE (workspace%dGdr_ang_jj)
718 IF (
ALLOCATED(workspace%dGdr_ang_kk))
THEN
719 DO s = 1,
SIZE(workspace%dGdr_ang_kk)
720 IF (
ALLOCATED(workspace%dGdr_ang_kk(s)%data))
DEALLOCATE (workspace%dGdr_ang_kk(s)%data)
722 DEALLOCATE (workspace%dGdr_ang_kk)
725 workspace%max_rad_symf = 0
726 workspace%max_ang_symf = 0
727 workspace%n_input_nodes = 0
728 workspace%cache_cap = 0
729 END SUBROUTINE nnp_workspace_release
757 atomic_kind_set, particle_set, local_particles, &
758 molecule_kind_set, molecule_set, local_molecules, &
759 nnp_input, force_env_input, cell, cell_ref, &
760 use_ref_cell, nnp_potential_energy, virial)
762 TYPE(
nnp_type),
INTENT(IN) :: nnp_env
763 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: nnp_forces
766 POINTER :: atomic_kind_set
768 POINTER :: particle_set
771 POINTER :: molecule_kind_set
773 POINTER :: molecule_set
776 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
777 LOGICAL,
INTENT(OUT),
OPTIONAL :: use_ref_cell
778 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: nnp_potential_energy
786 NULLIFY (atomic_kinds, particles, molecules, molecule_kinds)
788 IF (
PRESENT(nnp_potential_energy))
THEN
789 nnp_potential_energy = nnp_env%nnp_potential_energy
791 IF (
PRESENT(nnp_forces)) nnp_forces = nnp_env%nnp_forces
795 IF (
PRESENT(cell)) cell => nnp_env%cell
797 IF (
PRESENT(subsys)) subsys => nnp_env%subsys
798 IF (
ASSOCIATED(nnp_env%subsys))
THEN
800 atomic_kinds=atomic_kinds, &
801 particles=particles, &
802 molecule_kinds=molecule_kinds, &
803 molecules=molecules, &
804 local_molecules=local_molecules, &
805 local_particles=local_particles, &
809 IF (
PRESENT(atomic_kind_set)) atomic_kind_set => atomic_kinds%els
810 IF (
PRESENT(particle_set)) particle_set => particles%els
811 IF (
PRESENT(molecule_kind_set)) molecule_kind_set => molecule_kinds%els
812 IF (
PRESENT(molecule_set)) molecule_set => molecules%els
814 IF (
PRESENT(nnp_input)) nnp_input => nnp_env%nnp_input
815 IF (
PRESENT(force_env_input)) force_env_input => nnp_env%force_env_input
816 IF (
PRESENT(cell_ref)) cell_ref => nnp_env%cell_ref
817 IF (
PRESENT(use_ref_cell)) use_ref_cell = nnp_env%use_ref_cell
845 atomic_kind_set, particle_set, local_particles, &
846 molecule_kind_set, molecule_set, local_molecules, &
847 nnp_input, force_env_input, cell, cell_ref, &
848 use_ref_cell, nnp_potential_energy)
850 TYPE(
nnp_type),
INTENT(INOUT) :: nnp_env
851 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: nnp_forces
854 POINTER :: atomic_kind_set
856 POINTER :: particle_set
859 POINTER :: molecule_kind_set
861 POINTER :: molecule_set
864 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
865 LOGICAL,
INTENT(IN),
OPTIONAL :: use_ref_cell
866 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: nnp_potential_energy
873 IF (
PRESENT(nnp_potential_energy))
THEN
874 nnp_env%nnp_potential_energy = nnp_potential_energy
876 IF (
PRESENT(nnp_forces)) nnp_env%nnp_forces(:, :) = nnp_forces
878 IF (
PRESENT(subsys))
THEN
879 IF (
ASSOCIATED(nnp_env%subsys))
THEN
880 IF (.NOT.
ASSOCIATED(nnp_env%subsys, subsys))
THEN
884 nnp_env%subsys => subsys
886 IF (
PRESENT(cell))
THEN
887 IF (
ASSOCIATED(cell))
THEN
892 IF (
ASSOCIATED(nnp_env%subsys))
THEN
896 IF (
PRESENT(atomic_kind_set))
THEN
898 CALL cp_subsys_set(nnp_env%subsys, atomic_kinds=atomic_kinds)
901 IF (
PRESENT(particle_set))
THEN
906 IF (
PRESENT(molecule_kind_set))
THEN
908 CALL cp_subsys_set(nnp_env%subsys, molecule_kinds=molecule_kinds)
911 IF (
PRESENT(molecule_set))
THEN
916 IF (
PRESENT(local_particles))
THEN
917 CALL cp_subsys_set(nnp_env%subsys, local_particles=local_particles)
919 IF (
PRESENT(local_molecules))
THEN
920 CALL cp_subsys_set(nnp_env%subsys, local_molecules=local_molecules)
923 IF (
PRESENT(nnp_input)) nnp_env%nnp_input => nnp_input
924 IF (
PRESENT(force_env_input))
THEN
925 nnp_env%force_env_input => force_env_input
927 IF (
PRESENT(cell_ref))
THEN
930 nnp_env%cell_ref => cell_ref
932 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