47#include "../base/base_uses.f90"
53 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
54 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'helium_interactions'
79 INTEGER :: b, bead, i, j, n
80 INTEGER,
DIMENSION(:),
POINTER :: perm
82 REAL(kind=
dp) :: a, cell_size, en, interac, kin, pot, &
84 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: work2, work3
85 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: work
86 REAL(kind=
dp),
DIMENSION(3) :: r
87 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pos
91 perm => helium%permutation
93 cell_size = 0.5_dp*helium%cell_size
94 nperiodic = .NOT. helium%periodic
101 ALLOCATE (work(3, helium%beads + 1), &
102 work2(helium%beads + 1), &
103 work3(
SIZE(helium%uoffdiag, 1) + 1))
107 work(:, bead) = pos(:, i, bead) - pos(:, j, bead)
109 work(:, b + 1) = pos(:, perm(i), 1) - pos(:, perm(j), 1)
113 IF (a < rmin) rmin = a
114 IF (a > rmax) rmax = a
115 IF ((a < cell_size) .OR. nperiodic)
THEN
121 DEALLOCATE (work, work2, work3)
127 IF (helium%solute_present)
THEN
128 CALL helium_solute_e(pint_env, helium, interac)
138 r(:) = pos(:, i, b) - pos(:, perm(i), 1)
140 kin = kin + r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
142 r(:) = pos(:, i, bead - 1) - pos(:, i, bead)
144 kin = kin + r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
147 kin = 1.5_dp*n/helium%tau - 0.5*kin/(b*helium%tau**2*helium%hb2m)
164 helium%energy_inst(
e_id_thermo) = (en + kin)/n + helium%e_corr
183 INTEGER :: iatom, ibead
184 INTEGER,
DIMENSION(:),
POINTER :: perm
185 REAL(kind=
dp),
DIMENSION(3) :: r
187 perm => helium%permutation
192 DO ibead = 1, helium%beads - 1
193 DO iatom = 1, helium%atoms
194 r(:) = helium%pos(:, iatom, ibead) - helium%pos(:, iatom, ibead + 1)
196 linkaction = linkaction + (r(1)*r(1) + r(2)*r(2) + r(3)*r(3))
199 DO iatom = 1, helium%atoms
201 r(:) = helium%pos(:, iatom, helium%beads) - helium%pos(:, perm(iatom), 1)
203 linkaction = linkaction + (r(1)*r(1) + r(2)*r(2) + r(3)*r(3))
205 linkaction = linkaction/(2.0_dp*helium%tau*helium%hb2m)
220 INTEGER :: iatom, ibead, jatom, opatom, patom
221 INTEGER,
DIMENSION(:),
POINTER :: perm
222 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: work3
223 REAL(kind=
dp),
DIMENSION(3) :: r, rp
225 ALLOCATE (work3(
SIZE(helium%uoffdiag, 1) + 1))
226 perm => helium%permutation
230 DO ibead = 1, helium%beads - 1
231 DO iatom = 1, helium%atoms - 1
232 DO jatom = iatom + 1, helium%atoms
233 r(:) = helium%pos(:, iatom, ibead) - helium%pos(:, jatom, ibead)
234 rp(:) = helium%pos(:, iatom, ibead + 1) - helium%pos(:, jatom, ibead + 1)
240 DO iatom = 1, helium%atoms - 1
241 DO jatom = iatom + 1, helium%atoms
242 r(:) = helium%pos(:, iatom, helium%beads) - helium%pos(:, jatom, helium%beads)
243 rp(:) = helium%pos(:, perm(iatom), 1) - helium%pos(:, perm(jatom), 1)
249 IF (.NOT. helium%worm_is_closed)
THEN
251 iatom = helium%worm_atom_idx
252 IF (helium%worm_bead_idx == 1)
THEN
254 patom = helium%iperm(iatom)
256 DO jatom = 1, helium%atoms
257 IF (jatom == helium%worm_atom_idx) cycle
258 opatom = helium%iperm(jatom)
260 r(:) = helium%pos(:, iatom, 1) - helium%pos(:, jatom, 1)
261 rp(:) = helium%pos(:, patom, helium%beads) - helium%pos(:, opatom, helium%beads)
265 r(:) = helium%worm_xtra_bead(:) - helium%pos(:, jatom, 1)
270 ibead = helium%worm_bead_idx
272 DO jatom = 1, helium%atoms
273 IF (jatom == helium%worm_atom_idx) cycle
275 r(:) = helium%pos(:, iatom, ibead) - helium%pos(:, jatom, ibead)
276 rp(:) = helium%pos(:, iatom, ibead - 1) - helium%pos(:, jatom, ibead - 1)
280 r(:) = helium%worm_xtra_bead(:) - helium%pos(:, jatom, ibead)
302 INTEGER :: iatom, ibead
308 IF (helium%solute_present)
THEN
309 DO ibead = 1, helium%beads
310 DO iatom = 1, helium%atoms
313 iatom, ibead, helium%pos(:, iatom, ibead), e)
314 interaction = interaction + e
318 IF (.NOT. helium%worm_is_closed)
THEN
321 helium%worm_atom_idx, helium%worm_bead_idx, &
322 helium%pos(:, helium%worm_atom_idx, helium%worm_bead_idx), e)
323 interaction = interaction - 0.5_dp*e
326 helium%worm_atom_idx, helium%worm_bead_idx, &
327 helium%worm_xtra_bead, e)
328 interaction = interaction + 0.5_dp*e
333 interaction = interaction*helium%tau
353 helium_slice_index, helium_r_opt, energy, force)
357 INTEGER,
INTENT(IN) :: helium_part_index, helium_slice_index
358 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN),
OPTIONAL :: helium_r_opt
359 REAL(kind=
dp),
INTENT(OUT) :: energy
360 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
361 OPTIONAL,
POINTER :: force
363 INTEGER :: hbeads, hi, qi, stride
364 REAL(kind=
dp),
DIMENSION(3) :: helium_r
365 REAL(kind=
dp),
DIMENSION(:),
POINTER :: my_force
367 hbeads = helium%beads
369 hi = mod(helium_slice_index - 1 + hbeads + helium%relrot, hbeads) + 1
371 qi = ((hi - 1)*pint_env%p)/hbeads + 1
374 IF (
PRESENT(helium_r_opt))
THEN
375 helium_r(:) = helium_r_opt(:)
377 helium_r(:) = helium%pos(:, helium_part_index, helium_slice_index)
380 SELECT CASE (helium%solute_interaction)
383 IF (
PRESENT(force))
THEN
385 my_force => force(qi, :)
386 CALL helium_intpot_model_water( &
394 CALL helium_intpot_model_water( &
403 IF (
PRESENT(force))
THEN
405 my_force => force(qi, :)
406 CALL helium_intpot_nnp( &
414 CALL helium_intpot_nnp( &
424 IF (
PRESENT(force))
THEN
433 IF (
PRESENT(force))
THEN
434 IF (hbeads < pint_env%p)
THEN
435 stride = pint_env%p/hbeads
436 force = force*real(stride,
dp)
453 REAL(kind=
dp),
INTENT(OUT) :: energy
455 INTEGER :: ia, ib, jb, jc
456 REAL(kind=
dp) :: my_energy
457 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: force
460 force => helium%force_inst
467 DO ia = 1, helium%atoms
468 DO ib = 1, helium%beads
470 energy=my_energy, force=helium%rtmp_p_ndim_2d)
471 energy = energy + my_energy
472 DO jb = 1, pint_env%p
473 DO jc = 1, pint_env%ndim
474 force(jb, jc) = force(jb, jc) + helium%rtmp_p_ndim_2d(jb, jc)
489 SUBROUTINE helium_solute_e(pint_env, helium, energy)
493 REAL(kind=
dp),
INTENT(OUT) :: energy
496 REAL(kind=
dp) :: my_energy
500 DO ia = 1, helium%atoms
501 DO ib = 1, helium%beads
503 energy = energy + my_energy
507 END SUBROUTINE helium_solute_e
523 CHARACTER(len=*),
PARAMETER :: routinen =
'helium_intpot_scan'
525 INTEGER :: handle, ic, ix, iy, iz, k, nbin
527 REAL(kind=
dp) :: delr, my_en, ox, oy, oz
528 REAL(kind=
dp),
DIMENSION(3) :: pbc1, pbc2, pos
530 CALL timeset(routinen, handle)
533 IF (pint_env%logger%para_env%is_source())
THEN
536 helium_env(k)%helium%rho_inst(1, :, :, :) = 0.0_dp
537 nbin = helium_env(k)%helium%rho_nbin
538 delr = helium_env(k)%helium%rho_delr
539 helium_env(k)%helium%center(:) = 0.0_dp
540 ox = helium_env(k)%helium%center(1) - helium_env(k)%helium%rho_maxr/2.0_dp
541 oy = helium_env(k)%helium%center(2) - helium_env(k)%helium%rho_maxr/2.0_dp
542 oz = helium_env(k)%helium%center(3) - helium_env(k)%helium%rho_maxr/2.0_dp
549 pos(:) = [ox + (ix - 0.5_dp)*delr, oy + (iy - 0.5_dp)*delr, oz + (iz - 0.5_dp)*delr]
552 helium_env(k)%helium%pos(:, 1, 1) = pos(:)
556 pbc1(:) = pos(:) - helium_env(k)%helium%center
561 IF (abs(pbc1(ic) - pbc2(ic)) > 10.0_dp*epsilon(0.0_dp))
THEN
568 helium_env(k)%helium%rho_inst(1, ix, iy, iz) = 0.0_dp
570 helium_env(k)%helium%rho_inst(1, ix, iy, iz) = my_en
578 CALL timestop(handle)
593 SUBROUTINE helium_intpot_model_water(solute_x, helium, helium_x, energy, force)
595 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: solute_x
597 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: helium_x
598 REAL(kind=
dp),
INTENT(OUT) :: energy
599 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT), &
600 OPTIONAL,
POINTER :: force
603 REAL(kind=
dp) :: d, d2, dd, ep, eps, s1, s2, sig
604 REAL(kind=
dp),
DIMENSION(3) :: dr, solute_r
607 IF (
PRESENT(force))
THEN
614 DO i = 1,
SIZE(helium%solute_element)
615 IF (helium%solute_element(i) ==
"H ")
THEN
617 solute_r(1) = solute_x(3*ig + 1)
618 solute_r(2) = solute_x(3*ig + 2)
619 solute_r(3) = solute_x(3*ig + 3)
620 dr(:) = solute_r(:) - helium_x(:)
622 d2 = dr(1)*dr(1) + dr(2)*dr(2) + dr(3)*dr(3)
625 ep = 4.0_dp*eps*dd*(dd - 1.0_dp)
627 s2 = 24.0_dp*eps*dd*(2.0_dp*dd - 1.0_dp)/d2
628 IF (
PRESENT(force))
THEN
629 force(3*ig + 1) = force(3*ig + 1) + s2*dr(1)
630 force(3*ig + 2) = force(3*ig + 2) + s2*dr(2)
631 force(3*ig + 3) = force(3*ig + 3) + s2*dr(3)
640 DO i = 1,
SIZE(helium%solute_element)
641 IF (helium%solute_element(i) ==
"O ")
THEN
643 solute_r(1) = solute_x(3*ig + 1)
644 solute_r(2) = solute_x(3*ig + 2)
645 solute_r(3) = solute_x(3*ig + 3)
646 dr(:) = solute_r(:) - helium_x(:)
648 d2 = dr(1)*dr(1) + dr(2)*dr(2) + dr(3)*dr(3)
651 ep = 4.0_dp*eps*dd*(dd - 1.0_dp)
653 s2 = 24.0_dp*eps*dd*(2.0_dp*dd - 1.0_dp)/d2
654 IF (
PRESENT(force))
THEN
655 force(3*ig + 1) = force(3*ig + 1) + s2*dr(1)
656 force(3*ig + 2) = force(3*ig + 2) + s2*dr(2)
657 force(3*ig + 3) = force(3*ig + 3) + s2*dr(3)
663 END SUBROUTINE helium_intpot_model_water
677 SUBROUTINE helium_intpot_nnp(solute_x, helium, helium_x, energy, force)
679 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: solute_x
681 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: helium_x
682 REAL(kind=
dp),
INTENT(OUT) :: energy
683 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT), &
684 OPTIONAL,
POINTER :: force
686 INTEGER :: i, i_com, ig, ind, ind_he, j, k, m
687 REAL(kind=
dp) :: rsqr, rvect(3)
688 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: denergydsym
696 IF (
PRESENT(force))
THEN
697 helium%nnp%myforce(:, :, :) = 0.0_dp
702 DO i = 1, helium%nnp%n_ele
703 IF (helium%nnp%ele(i) ==
'He')
THEN
706 helium%nnp%coord(m, ig) = helium_x(m)
710 DO j = 1, helium%solute_atoms
711 IF (helium%nnp%ele(i) == helium%solute_element(j))
THEN
713 helium%nnp%coord(m, ig) = solute_x(3*(j - 1) + m)
721 IF (
ASSOCIATED(helium%nnp_sr_cut))
THEN
722 DO i = 1, helium%nnp%num_atoms
723 IF (i == ind_he) cycle
724 rvect(:) = helium%nnp%coord(:, i) - helium%nnp%coord(:, ind_he)
726 rsqr = rvect(1)*rvect(1) + rvect(2)*rvect(2) + rvect(3)*rvect(3)
727 IF (rsqr < helium%nnp_sr_cut(helium%nnp%ele_ind(i)))
THEN
728 energy = 0.3_dp + 1.0_dp/rsqr
729 IF (
PRESENT(force))
THEN
738 helium%nnp%output_expol = .false.
745 DO i = 1, helium%nnp%num_atoms
748 ind = helium%nnp%ele_ind(i)
751 helium%nnp%arc(ind)%layer(1)%node(:) = 0.0_dp
752 IF (
PRESENT(force))
THEN
753 helium%nnp%arc(ind)%layer(1)%node_grad(:) = 0.0_dp
754 ALLOCATE (denergydsym(helium%nnp%arc(ind)%n_nodes(1)))
762 DO i_com = 1, helium%nnp%n_committee
764 CALL nnp_predict(helium%nnp%arc(ind), helium%nnp, i_com)
765 helium%nnp%atomic_energy(i, i_com) = helium%nnp%arc(ind)%layer(helium%nnp%n_layer)%node(1)
768 IF (
PRESENT(force))
THEN
770 denergydsym(:) = 0.0_dp
771 CALL nnp_gradients(helium%nnp%arc(ind), helium%nnp, i_com, denergydsym)
776 helium%nnp%myforce(:, :, i_com))
782 IF (
PRESENT(force))
THEN
783 DEALLOCATE (denergydsym)
789 helium%nnp%committee_energy(:) = sum(helium%nnp%atomic_energy, 1)
790 energy = sum(helium%nnp%committee_energy)/real(helium%nnp%n_committee,
dp)
791 helium%nnp%nnp_potential_energy = energy
793 IF (
PRESENT(force))
THEN
795 DO j = 1, helium%nnp%num_atoms
797 helium%nnp%committee_forces(k, j, :) = helium%nnp%myforce(k, j, :)
800 helium%nnp%nnp_forces(:, :) = sum(helium%nnp%committee_forces, dim=3)/real(helium%nnp%n_committee,
dp)
803 DO j = 1, helium%nnp%num_atoms
804 IF (j == ind_he) cycle
806 force(3*(helium%nnp%sort(ig) - 1) + k) = helium%nnp%nnp_forces(k, j)
818 END SUBROUTINE helium_intpot_nnp
827 REAL(kind=
dp),
INTENT(IN) :: r
830 REAL(kind=
dp) :: f, x, x2
833 IF (x < 1.241314_dp)
THEN
834 x2 = 1.241314_dp/x - 1.0_dp
840 vij = 10.8_dp/
kelvin*(544850.4_dp*exp(-13.353384_dp*x) - f* &
841 ((0.1781_dp*x2 + 0.4253785_dp)*x2 + 1.3732412_dp)*x2*x2*x2)
853 ELEMENTAL FUNCTION helium_d_vij(r)
RESULT(dvij)
855 REAL(kind=
dp),
INTENT(IN) :: r
856 REAL(kind=
dp) :: dvij
858 REAL(kind=
dp) :: f, fp, x, x2, y
863 IF (x < 1.241314_dp)
THEN
864 y = 1.241314_dp/x - 1.0_dp
866 fp = 2.0_dp*1.241314_dp*f*y* &
867 ((0.1781_dp*x2 + 0.4253785_dp)*x2 + 1.3732412_dp)*x2*x2*x2*x2
873 dvij =
angstrom*(10.8_dp/2.9673_dp)*( &
874 (-13.353384_dp*544850.4_dp)*exp(-13.353384_dp*x) - fp + &
875 f*(((10.0_dp*0.1781_dp)*x2 + (8.0_dp*0.4253785_dp))*x2 + (6.0_dp*1.3732412_dp))* &
877 END FUNCTION helium_d_vij
886 FUNCTION helium_atom_action(helium, n, i)
RESULT(res)
889 INTEGER,
INTENT(IN) :: n, i
893 REAL(kind=
dp) :: r(3), rp(3), s, t
894 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: work3
896 ALLOCATE (work3(
SIZE(helium%uoffdiag, 1) + 1))
899 IF (n < helium%beads)
THEN
901 r(c) = helium%pos(c, i, n) - helium%pos(c, i, n + 1)
904 t = r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
907 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
908 rp(c) = helium%pos(c, i, n + 1) - helium%pos(c, j, n + 1)
912 DO j = i + 1, helium%atoms
914 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
915 rp(c) = helium%pos(c, i, n + 1) - helium%pos(c, j, n + 1)
921 r(c) = helium%pos(c, i, n) - helium%pos(c, helium%permutation(i), 1)
924 t = r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
927 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
928 rp(c) = helium%pos(c, helium%permutation(i), 1) - helium%pos(c, helium%permutation(j), 1)
932 DO j = i + 1, helium%atoms
934 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
935 rp(c) = helium%pos(c, helium%permutation(i), 1) - helium%pos(c, helium%permutation(j), 1)
940 t = t/(2.0_dp*helium%tau*helium%hb2m)
945 END FUNCTION helium_atom_action
953 FUNCTION helium_link_action(helium, n)
RESULT(res)
956 INTEGER,
INTENT(IN) :: n
960 REAL(kind=
dp) :: r(3), rp(3), s, t
961 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: work3
963 ALLOCATE (work3(
SIZE(helium%uoffdiag, 1) + 1))
966 IF (n < helium%beads)
THEN
967 DO i = 1, helium%atoms
969 r(c) = helium%pos(c, i, n) - helium%pos(c, i, n + 1)
972 t = t + r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
975 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
976 rp(c) = helium%pos(c, i, n + 1) - helium%pos(c, j, n + 1)
982 DO i = 1, helium%atoms
984 r(c) = helium%pos(c, i, n) - helium%pos(c, helium%permutation(i), 1)
987 t = t + r(1)*r(1) + r(2)*r(2) + r(3)*r(3)
990 r(c) = helium%pos(c, i, n) - helium%pos(c, j, n)
991 rp(c) = helium%pos(c, helium%permutation(i), 1) - helium%pos(c, helium%permutation(j), 1)
997 t = t/(2.0_dp*helium%tau*helium%hb2m)
1001 END FUNCTION helium_link_action
1008 FUNCTION helium_total_action(helium)
RESULT(res)
1011 REAL(kind=
dp) :: res
1017 DO i = 1, helium%beads
1018 s = s + helium_link_action(helium, i)
1022 END FUNCTION helium_total_action
1032 SUBROUTINE helium_delta_pos(helium, part, ref_bead, delta_bead, d)
1035 INTEGER,
INTENT(IN) :: part, ref_bead, delta_bead
1036 REAL(kind=
dp),
DIMENSION(3),
INTENT(OUT) :: d
1038 INTEGER :: b, bead, db, nbead, np, p
1039 REAL(kind=
dp),
DIMENSION(3) :: r
1044 IF (delta_bead > 0)
THEN
1054 np = helium%permutation(np)
1056 r(:) = helium%pos(:, p, bead) - helium%pos(:, np, nbead)
1063 ELSE IF (delta_bead < 0)
THEN
1073 np = helium%iperm(np)
1075 r(:) = helium%pos(:, p, bead) - helium%pos(:, np, nbead)
1083 END SUBROUTINE helium_delta_pos
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Independent helium subroutines shared with other modules.
subroutine, public helium_pbc(helium, r, enforce)
General PBC routine for helium.
real(kind=dp) function, public helium_eval_chain(helium, rchain, nchain, aij, vcoef, energy)
Calculate the pair-product action or energy by evaluating the power series expansion according to Eq....
real(kind=dp) function, public helium_eval_expansion(helium, r, rp, work, action)
Calculate the pair-product action or energy by evaluating the power series expansion according to Eq....
real(kind=dp) function, public helium_spline(spl, xx)
...
Methods that handle helium-solvent and helium-helium interactions.
subroutine, public helium_solute_e_f(pint_env, helium, energy)
Calculate total helium-solute interaction energy and forces.
real(kind=dp) function, public helium_total_pair_action(helium)
Computes the total pair action of the helium.
real(kind=dp) function, public helium_total_inter_action(pint_env, helium)
Computes the total interaction of the helium with the solute.
subroutine, public helium_intpot_scan(pint_env, helium_env)
Scan the helium-solute interaction energy within the periodic cell.
subroutine, public helium_bead_solute_e_f(pint_env, helium, helium_part_index, helium_slice_index, helium_r_opt, energy, force)
Calculate general helium-solute interaction energy (and forces) between one helium bead and the corre...
elemental real(kind=dp) function, public helium_vij(r)
Helium-helium pair interaction potential.
subroutine, public helium_calc_energy(helium, pint_env)
Calculate the helium energy (including helium-solute interaction)
real(kind=dp) function, public helium_total_link_action(helium)
Computes the total harmonic link action of the helium.
Methods dealing with Neural Network interaction potential.
subroutine, public helium_nnp_print(nnp, print_section, ind_he)
Print properties according to the requests in input file.
Data types representing superfluid helium.
integer, parameter, public e_id_potential
integer, parameter, public e_id_thermo
integer, parameter, public e_id_virial
integer, parameter, public e_id_interact
integer, parameter, public e_id_kinetic
integer, parameter, public e_id_total
Energy contributions - symbolic names for indexing energy arrays.
Defines the basic variable types.
integer, parameter, public dp
Functionality for atom centered symmetry functions for neural network potentials.
subroutine, public nnp_calc_acsf(nnp, i, calc_forces, arc, stress)
Calculate atom centered symmetry functions for given atom i.
subroutine, public nnp_prepare_neighbor_cache(nnp)
Prepare or update the linked-cell / Verlet cache for the current geometry. Lazily allocates nnpcell_l...
Data types for neural network potentials.
Methods dealing with Neural Network potentials.
subroutine, public nnp_scatter_dgdr_to_forces(nnp, ind, i, denergydsym, force_xyz)
Scatter the per-neighbour dG/dr arrays held in the nnp_neighbor_workspace into a per-atom Cartesian f...
Methods dealing with core routines for artificial neural networks.
subroutine, public nnp_predict(arc, nnp, i_com)
Predict energy by evaluating neural network.
subroutine, public nnp_gradients(arc, nnp, i_com, denergydsym)
Calculate gradients of neural network.
Definition of physical constants:
real(kind=dp), parameter, public kelvin
real(kind=dp), parameter, public angstrom
routines for handling splines_types
type of a logger, at the moment it contains just a print level starting at which level it should be l...
data structure for array of solvent helium environments
data structure for solvent helium
Main data type collecting all relevant data for neural network potentials.
environment for a path integral run
Data-structure that holds all needed information about a specific spline interpolation.