79#include "./base/base_uses.f90"
83 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'force_fields_input'
103 SUBROUTINE read_force_field_section1(ff_section, mm_section, ff_type, para_env)
104 TYPE(section_vals_type),
POINTER :: ff_section, mm_section
105 TYPE(force_field_type),
INTENT(INOUT) :: ff_type
106 TYPE(mp_para_env_type),
POINTER :: para_env
108 CHARACTER(LEN=default_string_length), &
109 DIMENSION(:),
POINTER :: atm_names
110 INTEGER :: nallegro, nb4, nbends, nbm, nbmhft, nbmhftd, nbonds, nchg, ndeepmd, neam, ngal, &
111 ngal21, ngd, ngp, nimpr, nipbv, nlj, nnequip, nopbend, nquip, nshell, nsiepmann, ntab, &
112 ntersoff, ntors, ntot, nubs, nwl
113 LOGICAL :: explicit, unique_spline
114 REAL(KIND=
dp) :: min_eps_spline_allowed
115 TYPE(input_info_type),
POINTER :: inp_info
116 TYPE(section_vals_type),
POINTER :: tmp_section, tmp_section2
120 NULLIFY (tmp_section, tmp_section2)
121 inp_info => ff_type%inp_info
131 CALL section_vals_val_get(ff_section,
"IGNORE_MISSING_CRITICAL_PARAMS", l_val=ff_type%ignore_missing_critical)
132 cpassert(ff_type%max_energy <= ff_type%emax_spline)
134 SELECT CASE (ff_type%ff_type)
137 IF (trim(ff_type%ff_file_name) ==
"") &
138 cpabort(
"Force Field Parameter's filename is empty! Please check your input file.")
142 cpabort(
"Force field type not implemented")
150 min_eps_spline_allowed = 20.0_dp*max(ff_type%max_energy, 10.0_dp)*epsilon(0.0_dp)
151 IF (ff_type%eps_spline < min_eps_spline_allowed)
THEN
152 CALL cp_warn(__location__, &
153 "Requested spline accuracy ("//trim(
cp_to_string(ff_type%eps_spline))//
" ) "// &
154 "is smaller than the minimum value allowed ("//trim(
cp_to_string(min_eps_spline_allowed))// &
155 " ) with the present machine precision ("//trim(
cp_to_string(epsilon(0.0_dp)))//
" ). "// &
156 "New EPS_SPLINE value ("//trim(
cp_to_string(min_eps_spline_allowed))//
" ). ")
157 ff_type%eps_spline = min_eps_spline_allowed
170 IF (explicit .AND. ff_type%do_nonbonded)
THEN
192 CALL read_eam_section(inp_info%nonbonded, tmp_section2, ntot, para_env, mm_section)
197 ntot = nlj + nwl + neam
205 ntot = nlj + nwl + neam + ngd
208 CALL read_ipbv_section(inp_info%nonbonded, tmp_section2, ntot)
213 ntot = nlj + nwl + neam + ngd + nipbv
216 CALL read_bmhft_section(inp_info%nonbonded, tmp_section2, ntot)
220 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=nbmhftd)
221 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft
224 CALL read_bmhftd_section(inp_info%nonbonded, tmp_section2, ntot)
229 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd
232 CALL read_b4_section(inp_info%nonbonded, tmp_section2, ntot)
237 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4
240 CALL read_bm_section(inp_info%nonbonded, tmp_section2, ntot)
245 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm
251 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=ntersoff)
252 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp
255 CALL read_tersoff_section(inp_info%nonbonded, tmp_section2, ntot, tmp_section2)
260 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff
263 CALL read_gal_section(inp_info%nonbonded, tmp_section2, ntot, tmp_section2)
268 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal
271 CALL read_gal21_section(inp_info%nonbonded, tmp_section2, ntot, tmp_section2)
275 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=nsiepmann)
276 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21
279 CALL read_siepmann_section(inp_info%nonbonded, tmp_section2, ntot, tmp_section2)
284 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21 + nsiepmann
287 CALL read_quip_section(inp_info%nonbonded, tmp_section2, ntot)
291 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=nnequip)
292 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21 + nsiepmann + &
297 nnequip = nnequip - 1 +
SIZE(atm_names) + (
SIZE(atm_names)*
SIZE(atm_names) -
SIZE(atm_names))/2
299 CALL read_nequip_section(inp_info%nonbonded, tmp_section2, ntot)
303 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=nallegro)
304 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21 + nsiepmann + &
309 nallegro = nallegro - 1 +
SIZE(atm_names) + (
SIZE(atm_names)*
SIZE(atm_names) -
SIZE(atm_names))/2
311 CALL read_allegro_section(inp_info%nonbonded, tmp_section2, ntot)
316 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21 + nsiepmann + &
317 nquip + nnequip + nallegro
320 CALL read_tabpot_section(inp_info%nonbonded, tmp_section2, ntot, para_env, mm_section)
324 CALL section_vals_get(tmp_section2, explicit=explicit, n_repetition=ndeepmd)
325 ntot = nlj + nwl + neam + ngd + nipbv + nbmhft + nbmhftd + nb4 + nbm + ngp + ntersoff + ngal + ngal21 + nsiepmann + &
326 nquip + nnequip + nallegro + ntab
330 ndeepmd = ndeepmd - 1 +
SIZE(atm_names) + (
SIZE(atm_names)*
SIZE(atm_names) -
SIZE(atm_names))/2
332 CALL read_deepmd_section(inp_info%nonbonded, tmp_section2, ntot)
339 IF (explicit .AND. ff_type%do_nonbonded)
THEN
363 ntot = nlj + nwl + ngd
384 CALL read_apol_section(inp_info%apol_atm, inp_info%apol, inp_info%damping_list, &
393 CALL read_cpol_section(inp_info%cpol_atm, inp_info%cpol, tmp_section, ntot)
400 CALL read_shell_section(inp_info%shell_list, tmp_section, ntot)
407 CALL reallocate(inp_info%bond_kind, 1, nbonds)
410 CALL reallocate(inp_info%bond_k, 1, 3, 1, nbonds)
413 CALL read_bonds_section(inp_info%bond_kind, inp_info%bond_a, inp_info%bond_b, inp_info%bond_k, &
414 inp_info%bond_r0, inp_info%bond_cs, tmp_section, ntot)
420 CALL reallocate(inp_info%bend_kind, 1, nbends)
425 CALL reallocate(inp_info%bend_theta0, 1, nbends)
427 CALL reallocate(inp_info%bend_r012, 1, nbends)
428 CALL reallocate(inp_info%bend_r032, 1, nbends)
429 CALL reallocate(inp_info%bend_kbs12, 1, nbends)
430 CALL reallocate(inp_info%bend_kbs32, 1, nbends)
432 IF (
ASSOCIATED(inp_info%bend_legendre))
THEN
433 DO i = 1,
SIZE(inp_info%bend_legendre)
434 IF (
ASSOCIATED(inp_info%bend_legendre(i)%coeffs))
THEN
435 DEALLOCATE (inp_info%bend_legendre(i)%coeffs)
436 NULLIFY (inp_info%bend_legendre(i)%coeffs)
439 DEALLOCATE (inp_info%bend_legendre)
440 NULLIFY (inp_info%bend_legendre)
442 ALLOCATE (inp_info%bend_legendre(1:nbends))
443 DO i = 1,
SIZE(inp_info%bend_legendre(1:nbends))
444 NULLIFY (inp_info%bend_legendre(i)%coeffs)
445 inp_info%bend_legendre(i)%order = 0
447 CALL read_bends_section(inp_info%bend_kind, inp_info%bend_a, inp_info%bend_b, inp_info%bend_c, &
448 inp_info%bend_k, inp_info%bend_theta0, inp_info%bend_cb, &
449 inp_info%bend_r012, inp_info%bend_r032, inp_info%bend_kbs12, &
450 inp_info%bend_kbs32, inp_info%bend_kss, &
451 inp_info%bend_legendre, tmp_section, ntot)
463 CALL read_ubs_section(inp_info%ub_kind, inp_info%ub_a, inp_info%ub_b, inp_info%ub_c, &
464 inp_info%ub_k, inp_info%ub_r0, tmp_section, ntot)
470 CALL reallocate(inp_info%torsion_kind, 1, ntors)
477 CALL reallocate(inp_info%torsion_phi0, 1, ntors)
478 CALL read_torsions_section(inp_info%torsion_kind, inp_info%torsion_a, inp_info%torsion_b, &
479 inp_info%torsion_c, inp_info%torsion_d, inp_info%torsion_k, inp_info%torsion_phi0, &
480 inp_info%torsion_m, tmp_section, ntot)
494 CALL read_improper_section(inp_info%impr_kind, inp_info%impr_a, inp_info%impr_b, &
495 inp_info%impr_c, inp_info%impr_d, inp_info%impr_k, inp_info%impr_phi0, &
503 CALL reallocate(inp_info%opbend_kind, 1, nopbend)
504 CALL reallocate(inp_info%opbend_a, 1, nopbend)
505 CALL reallocate(inp_info%opbend_b, 1, nopbend)
506 CALL reallocate(inp_info%opbend_c, 1, nopbend)
507 CALL reallocate(inp_info%opbend_d, 1, nopbend)
508 CALL reallocate(inp_info%opbend_k, 1, nopbend)
509 CALL reallocate(inp_info%opbend_phi0, 1, nopbend)
510 CALL read_opbend_section(inp_info%opbend_kind, inp_info%opbend_a, inp_info%opbend_b, &
511 inp_info%opbend_c, inp_info%opbend_d, inp_info%opbend_k, inp_info%opbend_phi0, &
515 END SUBROUTINE read_force_field_section1
524 SUBROUTINE set_ipbv_ff(at1, at2, ipbv)
525 CHARACTER(LEN=*),
INTENT(IN) :: at1, at2
526 TYPE(ipbv_pot_type),
POINTER :: ipbv
528 IF ((at1(1:1) ==
'O') .AND. (at2(1:1) ==
'O'))
THEN
530 ipbv%m = -1.2226442563398141e+11_dp
531 ipbv%b = 1.1791292385486696e+11_dp
534 ipbv%a(2) = 4.786380682394_dp
535 ipbv%a(3) = -1543.407053545_dp
536 ipbv%a(4) = 88783.31188529_dp
537 ipbv%a(5) = -2361200.155376_dp
538 ipbv%a(6) = 35940504.84679_dp
539 ipbv%a(7) = -339762743.6358_dp
540 ipbv%a(8) = 2043874926.466_dp
541 ipbv%a(9) = -7654856796.383_dp
542 ipbv%a(10) = 16195251405.65_dp
543 ipbv%a(11) = -13140392992.18_dp
544 ipbv%a(12) = -9285572894.245_dp
545 ipbv%a(13) = 8756947519.029_dp
546 ipbv%a(14) = 15793297761.67_dp
547 ipbv%a(15) = 12917180227.21_dp
548 ELSEIF (((at1(1:1) ==
'O') .AND. (at2(1:1) ==
'H')) .OR. &
549 ((at1(1:1) ==
'H') .AND. (at2(1:1) ==
'O')))
THEN
552 ipbv%m = -0.004025691139759147_dp
553 ipbv%b = -2.193731138097428_dp
555 ipbv%a(2) = -195.7716013277_dp
556 ipbv%a(3) = 15343.78613395_dp
557 ipbv%a(4) = -530864.4586516_dp
558 ipbv%a(5) = 10707934.39058_dp
559 ipbv%a(6) = -140099704.7890_dp
560 ipbv%a(7) = 1250943273.785_dp
561 ipbv%a(8) = -7795458330.676_dp
562 ipbv%a(9) = 33955897217.31_dp
563 ipbv%a(10) = -101135640744.0_dp
564 ipbv%a(11) = 193107995718.7_dp
565 ipbv%a(12) = -193440560940.0_dp
566 ipbv%a(13) = -4224406093.918e0_dp
567 ipbv%a(14) = 217192386506.5e0_dp
568 ipbv%a(15) = -157581228915.5_dp
569 ELSEIF ((at1(1:1) ==
'H') .AND. (at2(1:1) ==
'H'))
THEN
570 ipbv%rcore = 3.165_dp
571 ipbv%m = 0.002639704108787555_dp
572 ipbv%b = -0.2735482611857583_dp
574 ipbv%a(2) = -26.29456010782_dp
575 ipbv%a(3) = 2373.352548248_dp
576 ipbv%a(4) = -93880.43551360_dp
577 ipbv%a(5) = 2154624.884809_dp
578 ipbv%a(6) = -31965151.34955_dp
579 ipbv%a(7) = 322781785.3278_dp
580 ipbv%a(8) = -2271097368.668_dp
581 ipbv%a(9) = 11169163192.90_dp
582 ipbv%a(10) = -37684457778.47_dp
583 ipbv%a(11) = 82562104256.03_dp
584 ipbv%a(12) = -100510435213.4_dp
585 ipbv%a(13) = 24570342714.65e0_dp
586 ipbv%a(14) = 88766181532.94e0_dp
587 ipbv%a(15) = -79705131323.98_dp
589 cpabort(
"IPBV only for WATER")
591 END SUBROUTINE set_ipbv_ff
600 SUBROUTINE set_bmhft_ff(at1, at2, ft)
601 CHARACTER(LEN=*),
INTENT(IN) :: at1, at2
602 TYPE(ft_pot_type),
POINTER :: ft
605 IF ((at1(1:2) ==
'NA') .AND. (at2(1:2) ==
'NA'))
THEN
609 ELSEIF (((at1(1:2) ==
'NA') .AND. (at2(1:2) ==
'CL')) .OR. &
610 ((at1(1:2) ==
'CL') .AND. (at2(1:2) ==
'NA')))
THEN
614 ELSEIF ((at1(1:2) ==
'CL') .AND. (at2(1:2) ==
'CL'))
THEN
619 cpabort(
"BMHFT only for NaCl")
622 END SUBROUTINE set_bmhft_ff
628 SUBROUTINE set_bmhftd_ff()
630 cpabort(
"No default parameters present for BMHFTD")
632 END SUBROUTINE set_bmhftd_ff
643 SUBROUTINE read_eam_section(nonbonded, section, start, para_env, mm_section)
644 TYPE(pair_potential_p_type),
POINTER :: nonbonded
645 TYPE(section_vals_type),
POINTER :: section
646 INTEGER,
INTENT(IN) :: start
647 TYPE(mp_para_env_type),
POINTER :: para_env
648 TYPE(section_vals_type),
POINTER :: mm_section
650 CHARACTER(LEN=default_string_length), &
651 DIMENSION(:),
POINTER :: atm_names
652 INTEGER :: isec, n_items
658 nonbonded%pot(start + isec)%pot%type =
ea_type
659 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
660 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
661 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
662 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
664 c_val=nonbonded%pot(start + isec)%pot%set(1)%eam%eam_file_name)
665 CALL read_eam_data(nonbonded%pot(start + isec)%pot%set(1)%eam, para_env, mm_section)
666 nonbonded%pot(start + isec)%pot%rcutsq = nonbonded%pot(start + isec)%pot%set(1)%eam%acutal**2
668 END SUBROUTINE read_eam_section
677 SUBROUTINE read_deepmd_section(nonbonded, section, start)
678 TYPE(pair_potential_p_type),
POINTER :: nonbonded
679 TYPE(section_vals_type),
POINTER :: section
680 INTEGER,
INTENT(IN) :: start
682 CHARACTER(LEN=default_string_length) :: deepmd_file_name
683 CHARACTER(LEN=default_string_length), &
684 DIMENSION(:),
POINTER :: atm_names
685 INTEGER :: isec, jsec, n_items
686 INTEGER,
DIMENSION(:),
POINTER :: atm_deepmd_types
690 n_items = isec*n_items
695 DO isec = 1,
SIZE(atm_names)
696 DO jsec = isec,
SIZE(atm_names)
697 nonbonded%pot(start + n_items)%pot%type =
deepmd_type
698 nonbonded%pot(start + n_items)%pot%at1 = atm_names(isec)
699 nonbonded%pot(start + n_items)%pot%at2 = atm_names(jsec)
700 CALL uppercase(nonbonded%pot(start + n_items)%pot%at1)
701 CALL uppercase(nonbonded%pot(start + n_items)%pot%at2)
703 nonbonded%pot(start + n_items)%pot%set(1)%deepmd%deepmd_file_name =
discover_file(deepmd_file_name)
704 nonbonded%pot(start + n_items)%pot%set(1)%deepmd%atom_deepmd_type = atm_deepmd_types(isec)
705 nonbonded%pot(start + n_items)%pot%rcutsq = 0.0_dp
706 n_items = n_items + 1
709 END SUBROUTINE read_deepmd_section
718 SUBROUTINE read_quip_section(nonbonded, section, start)
719 TYPE(pair_potential_p_type),
POINTER :: nonbonded
720 TYPE(section_vals_type),
POINTER :: section
721 INTEGER,
INTENT(IN) :: start
723 CHARACTER(LEN=default_string_length), &
724 DIMENSION(:),
POINTER :: args_str, atm_names
725 INTEGER :: is, isec, n_calc_args, n_items
731 nonbonded%pot(start + isec)%pot%type =
quip_type
732 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
733 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
734 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
735 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
737 c_val=nonbonded%pot(start + isec)%pot%set(1)%quip%quip_file_name)
740 nonbonded%pot(start + isec)%pot%set(1)%quip%init_args =
""
741 DO is = 1,
SIZE(args_str)
742 nonbonded%pot(start + isec)%pot%set(1)%quip%init_args = &
743 trim(nonbonded%pot(start + isec)%pot%set(1)%quip%init_args)// &
744 " "//trim(args_str(is))
747 n_rep_val=n_calc_args)
748 IF (n_calc_args > 0)
THEN
751 DO is = 1,
SIZE(args_str)
752 nonbonded%pot(start + isec)%pot%set(1)%quip%calc_args = &
753 trim(nonbonded%pot(start + isec)%pot%set(1)%quip%calc_args)// &
754 " "//trim(args_str(is))
757 nonbonded%pot(start + isec)%pot%rcutsq = 0.0_dp
759 END SUBROUTINE read_quip_section
768 SUBROUTINE read_nequip_section(nonbonded, section, start)
769 TYPE(pair_potential_p_type),
POINTER :: nonbonded
770 TYPE(section_vals_type),
POINTER :: section
771 INTEGER,
INTENT(IN) :: start
773 CHARACTER(LEN=default_string_length) :: nequip_file_name, unit_cell, &
774 unit_coords, unit_energy, unit_forces
775 CHARACTER(LEN=default_string_length), &
776 DIMENSION(:),
POINTER :: atm_names
777 INTEGER :: isec, jsec, n_items
778 TYPE(nequip_pot_type) :: nequip
782 n_items = isec*n_items
792 nequip%unit_coords = unit_coords
793 nequip%unit_forces = unit_forces
794 nequip%unit_energy = unit_energy
795 nequip%unit_cell = unit_cell
796 CALL read_nequip_data(nequip)
797 CALL check_cp2k_atom_names_in_torch(atm_names, nequip%type_names_torch)
799 DO isec = 1,
SIZE(atm_names)
800 DO jsec = isec,
SIZE(atm_names)
801 nonbonded%pot(start + n_items)%pot%type =
nequip_type
802 nonbonded%pot(start + n_items)%pot%at1 = atm_names(isec)
803 nonbonded%pot(start + n_items)%pot%at2 = atm_names(jsec)
804 CALL uppercase(nonbonded%pot(start + n_items)%pot%at1)
805 CALL uppercase(nonbonded%pot(start + n_items)%pot%at2)
806 nonbonded%pot(start + n_items)%pot%set(1)%nequip = nequip
807 nonbonded%pot(start + n_items)%pot%rcutsq = nequip%rcutsq
808 n_items = n_items + 1
812 END SUBROUTINE read_nequip_section
821 SUBROUTINE read_allegro_section(nonbonded, section, start)
822 TYPE(pair_potential_p_type),
POINTER :: nonbonded
823 TYPE(section_vals_type),
POINTER :: section
824 INTEGER,
INTENT(IN) :: start
826 CHARACTER(LEN=default_string_length) :: allegro_file_name, unit_cell, &
827 unit_coords, unit_energy, unit_forces
828 CHARACTER(LEN=default_string_length), &
829 DIMENSION(:),
POINTER :: atm_names
830 INTEGER :: isec, jsec, n_items
831 TYPE(allegro_pot_type) :: allegro
835 n_items = isec*n_items
845 allegro%unit_coords = unit_coords
846 allegro%unit_forces = unit_forces
847 allegro%unit_energy = unit_energy
848 allegro%unit_cell = unit_cell
849 CALL read_allegro_data(allegro)
850 CALL check_cp2k_atom_names_in_torch(atm_names, allegro%type_names_torch)
852 DO isec = 1,
SIZE(atm_names)
853 DO jsec = isec,
SIZE(atm_names)
855 nonbonded%pot(start + n_items)%pot%at1 = atm_names(isec)
856 nonbonded%pot(start + n_items)%pot%at2 = atm_names(jsec)
857 CALL uppercase(nonbonded%pot(start + n_items)%pot%at1)
858 CALL uppercase(nonbonded%pot(start + n_items)%pot%at2)
859 nonbonded%pot(start + n_items)%pot%set(1)%allegro = allegro
860 nonbonded%pot(start + n_items)%pot%rcutsq = allegro%rcutsq
861 n_items = n_items + 1
864 END SUBROUTINE read_allegro_section
876 INTEGER,
INTENT(IN) :: start
878 CHARACTER(LEN=default_string_length), &
879 DIMENSION(:),
POINTER :: atm_names
880 INTEGER :: isec, n_items, n_rep
881 REAL(kind=
dp) :: epsilon, rcut, sigma
891 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
892 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
893 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
894 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
895 nonbonded%pot(start + isec)%pot%set(1)%lj%epsilon = epsilon
896 nonbonded%pot(start + isec)%pot%set(1)%lj%sigma6 = sigma**6
897 nonbonded%pot(start + isec)%pot%set(1)%lj%sigma12 = sigma**12
898 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
902 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
905 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
919 INTEGER,
INTENT(IN) :: start
921 CHARACTER(LEN=default_string_length), &
922 DIMENSION(:),
POINTER :: atm_names
923 INTEGER :: isec, n_items, n_rep
924 REAL(kind=
dp) :: a, b, c, rcut
934 nonbonded%pot(start + isec)%pot%type =
wl_type
935 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
936 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
937 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
938 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
939 nonbonded%pot(start + isec)%pot%set(1)%willis%a = a
940 nonbonded%pot(start + isec)%pot%set(1)%willis%b = b
941 nonbonded%pot(start + isec)%pot%set(1)%willis%c = c
942 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
946 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
949 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
963 INTEGER,
INTENT(IN) :: start
965 CHARACTER(LEN=default_string_length), &
966 DIMENSION(:),
POINTER :: atm_names
967 INTEGER :: isec, m, mc, n_items, n_rep
968 REAL(kind=
dp) :: d, dc, rcut, vr0
980 nonbonded%pot(start + isec)%pot%type =
gw_type
981 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
982 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
983 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
984 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
985 nonbonded%pot(start + isec)%pot%set(1)%goodwin%vr0 = vr0
986 nonbonded%pot(start + isec)%pot%set(1)%goodwin%d = d
987 nonbonded%pot(start + isec)%pot%set(1)%goodwin%dc = dc
988 nonbonded%pot(start + isec)%pot%set(1)%goodwin%m = m
989 nonbonded%pot(start + isec)%pot%set(1)%goodwin%mc = mc
990 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
994 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
997 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1008 SUBROUTINE read_ipbv_section(nonbonded, section, start)
1011 INTEGER,
INTENT(IN) :: start
1013 CHARACTER(LEN=default_string_length), &
1014 DIMENSION(:),
POINTER :: atm_names
1015 INTEGER :: isec, n_items, n_rep
1016 REAL(kind=
dp) :: rcut
1019 DO isec = 1, n_items
1021 nonbonded%pot(start + isec)%pot%type =
ip_type
1022 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1023 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1024 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1025 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1026 CALL set_ipbv_ff(nonbonded%pot(start + isec)%pot%at1, nonbonded%pot(start + isec)%pot%at2, &
1027 nonbonded%pot(start + isec)%pot%set(1)%ipbv)
1029 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1033 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1036 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1038 END SUBROUTINE read_ipbv_section
1047 SUBROUTINE read_bmhft_section(nonbonded, section, start)
1050 INTEGER,
INTENT(IN) :: start
1052 CHARACTER(LEN=default_string_length),
DIMENSION(2) :: map_atoms
1053 CHARACTER(LEN=default_string_length), &
1054 DIMENSION(:),
POINTER :: atm_names
1055 INTEGER :: i, isec, n_items, n_rep
1056 REAL(kind=
dp) :: rcut
1059 DO isec = 1, n_items
1063 nonbonded%pot(start + isec)%pot%type =
ft_type
1064 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1065 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1066 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1067 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1072 r_val=nonbonded%pot(start + isec)%pot%set(1)%ft%a)
1074 r_val=nonbonded%pot(start + isec)%pot%set(1)%ft%b)
1076 r_val=nonbonded%pot(start + isec)%pot%set(1)%ft%c)
1078 r_val=nonbonded%pot(start + isec)%pot%set(1)%ft%d)
1081 map_atoms = atm_names
1084 CALL set_bmhft_ff(map_atoms(1), map_atoms(2), nonbonded%pot(start + isec)%pot%set(1)%ft)
1087 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1091 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1094 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1096 END SUBROUTINE read_bmhft_section
1105 SUBROUTINE read_bmhftd_section(nonbonded, section, start)
1108 INTEGER,
INTENT(IN) :: start
1110 CHARACTER(LEN=default_string_length),
DIMENSION(2) :: map_atoms
1111 CHARACTER(LEN=default_string_length), &
1112 DIMENSION(:),
POINTER :: atm_names
1113 INTEGER :: i, isec, n_items, n_rep
1114 REAL(kind=
dp) :: rcut
1115 REAL(kind=
dp),
DIMENSION(:),
POINTER :: bd_vals
1121 DO isec = 1, n_items
1125 nonbonded%pot(start + isec)%pot%type =
ftd_type
1126 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1127 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1128 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1129 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1134 r_val=nonbonded%pot(start + isec)%pot%set(1)%ftd%a)
1136 r_val=nonbonded%pot(start + isec)%pot%set(1)%ftd%b)
1138 r_val=nonbonded%pot(start + isec)%pot%set(1)%ftd%c)
1140 r_val=nonbonded%pot(start + isec)%pot%set(1)%ftd%d)
1142 IF (
ASSOCIATED(bd_vals))
THEN
1143 SELECT CASE (
SIZE(bd_vals))
1145 cpabort(
"No values specified for parameter BD in section &BMHFTD")
1147 nonbonded%pot(start + isec)%pot%set(1)%ftd%bd(1:2) = bd_vals(1)
1149 nonbonded%pot(start + isec)%pot%set(1)%ftd%bd(1:2) = bd_vals(1:2)
1151 cpabort(
"Too many values specified for parameter BD in section &BMHFTD")
1154 cpabort(
"Parameter BD in section &BMHFTD was not specified")
1158 map_atoms = atm_names
1161 CALL set_bmhftd_ff()
1164 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1168 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1171 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1173 END SUBROUTINE read_bmhftd_section
1184 SUBROUTINE read_b4_section(nonbonded, section, start)
1188 INTEGER,
INTENT(IN) :: start
1190 CHARACTER(LEN=default_string_length), &
1191 DIMENSION(:),
POINTER :: atm_names
1192 INTEGER :: i, ir, isec, n_items, n_rep, np1, np2
1193 LOGICAL :: explicit_poly1, explicit_poly2
1194 REAL(kind=
dp) :: a, b, c, eval_error, r1, r2, r3, rcut
1195 REAL(kind=
dp),
DIMENSION(10) :: v, x
1196 REAL(kind=
dp),
DIMENSION(10, 10) :: p, p_inv
1197 REAL(kind=
dp),
DIMENSION(:),
POINTER :: coeff1, coeff2,
list
1204 DO isec = 1, n_items
1214 IF (explicit_poly1)
THEN
1219 IF (
ASSOCIATED(
list))
THEN
1221 DO i = 1,
SIZE(
list)
1222 coeff1(i + np1 - 1) =
list(i)
1224 np1 = np1 +
SIZE(
list)
1229 IF (explicit_poly2)
THEN
1234 IF (
ASSOCIATED(
list))
THEN
1236 DO i = 1,
SIZE(
list)
1237 coeff2(i + np2 - 1) =
list(i)
1239 np2 = np2 +
SIZE(
list)
1244 IF ((.NOT. explicit_poly1) .OR. (.NOT. explicit_poly2))
THEN
1251 p(1, i) = p(1, i - 1)*r1
1255 p(2, i) = real(i - 1, kind=
dp)*p(1, i - 1)
1259 p(3, i) = real(i - 1, kind=
dp)*p(2, i - 1)
1264 p(4, i) = p(4, i - 1)*r2
1268 p(4, i) = p(4, i - 1)*r2
1272 p(5, i) = real(i - 1, kind=
dp)*p(4, i - 1)
1275 p(5, i) = real(i - 7, kind=
dp)*p(4, i - 1)
1279 p(6, i) = real(i - 1, kind=
dp)*p(5, i - 1)
1282 p(6, i) = real(i - 7, kind=
dp)*p(5, i - 1)
1291 p(8, i) = p(8, i - 1)*r3
1295 p(9, i) = real(i - 7, kind=
dp)*p(8, i - 1)
1299 p(10, i) = real(i - 7, kind=
dp)*p(9, i - 1)
1306 v(8) = -c/p(8, 10)**2
1307 v(9) = -6.0_dp*v(8)/r3
1308 v(10) = -7.0_dp*v(9)/r3
1310 p_inv(:, :) = 0.0_dp
1312 IF (eval_error >= 1.0e-8_dp) &
1313 CALL cp_warn(__location__, &
1314 "The polynomial fit for the BUCK4RANGES potential is only accurate to "// &
1318 x(:) = matmul(p_inv(:, :), v(:))
1325 nonbonded%pot(start + isec)%pot%type =
b4_type
1326 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1327 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1328 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1329 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1330 nonbonded%pot(start + isec)%pot%set(1)%buck4r%a = a
1331 nonbonded%pot(start + isec)%pot%set(1)%buck4r%b = b
1332 nonbonded%pot(start + isec)%pot%set(1)%buck4r%c = c
1333 nonbonded%pot(start + isec)%pot%set(1)%buck4r%r1 = r1
1334 nonbonded%pot(start + isec)%pot%set(1)%buck4r%r2 = r2
1335 nonbonded%pot(start + isec)%pot%set(1)%buck4r%r3 = r3
1336 IF ((.NOT. explicit_poly1) .OR. (.NOT. explicit_poly2))
THEN
1337 nonbonded%pot(start + isec)%pot%set(1)%buck4r%npoly1 = 5
1338 nonbonded%pot(start + isec)%pot%set(1)%buck4r%poly1(0:5) = x(1:6)
1339 nonbonded%pot(start + isec)%pot%set(1)%buck4r%npoly2 = 3
1340 nonbonded%pot(start + isec)%pot%set(1)%buck4r%poly2(0:3) = x(7:10)
1342 nonbonded%pot(start + isec)%pot%set(1)%buck4r%npoly1 = np1 - 1
1343 cpassert(np1 - 1 <= 10)
1344 nonbonded%pot(start + isec)%pot%set(1)%buck4r%poly1(0:np1 - 1) = coeff1(0:np1 - 1)
1345 nonbonded%pot(start + isec)%pot%set(1)%buck4r%npoly2 = np2 - 1
1346 cpassert(np2 - 1 <= 10)
1347 nonbonded%pot(start + isec)%pot%set(1)%buck4r%poly2(0:np2 - 1) = coeff2(0:np2 - 1)
1349 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
1351 IF (
ASSOCIATED(coeff1))
THEN
1354 IF (
ASSOCIATED(coeff2))
THEN
1359 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1362 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1365 END SUBROUTINE read_b4_section
1377 INTEGER,
INTENT(IN) :: start
1379 CHARACTER(LEN=default_string_length), &
1380 DIMENSION(:),
POINTER :: atm_names
1381 INTEGER :: isec, n_items, n_rep
1382 REAL(kind=
dp) :: rcut
1385 DO isec = 1, n_items
1389 nonbonded%pot(start + isec)%pot%type =
gp_type
1390 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1391 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1392 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
1393 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1394 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1396 CALL get_generic_info(section,
"FUNCTION", nonbonded%pot(start + isec)%pot%set(1)%gp%potential, &
1397 nonbonded%pot(start + isec)%pot%set(1)%gp%parameters, &
1398 nonbonded%pot(start + isec)%pot%set(1)%gp%values, &
1399 size_variables=1, i_rep_sec=isec)
1400 nonbonded%pot(start + isec)%pot%set(1)%gp%variables = nonbonded%pot(start + isec)%pot%set(1)%gp%parameters(1)
1404 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1407 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1419 SUBROUTINE read_tersoff_section(nonbonded, section, start, tersoff_section)
1422 INTEGER,
INTENT(IN) :: start
1425 CHARACTER(LEN=default_string_length), &
1426 DIMENSION(:),
POINTER :: atm_names
1427 INTEGER :: isec, n_items, n_rep
1428 REAL(kind=
dp) :: rcut, rcutsq
1431 DO isec = 1, n_items
1436 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1437 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1438 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1439 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1442 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%A)
1444 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%B)
1446 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%lambda1)
1448 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%lambda2)
1450 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%alpha)
1452 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%beta)
1454 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%n)
1456 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%c)
1458 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%d)
1460 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%h)
1462 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%lambda3)
1464 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%bigR)
1466 r_val=nonbonded%pot(start + isec)%pot%set(1)%tersoff%bigD)
1468 rcutsq = (nonbonded%pot(start + isec)%pot%set(1)%tersoff%bigR + &
1469 nonbonded%pot(start + isec)%pot%set(1)%tersoff%bigD)**2
1470 nonbonded%pot(start + isec)%pot%set(1)%tersoff%rcutsq = rcutsq
1471 nonbonded%pot(start + isec)%pot%rcutsq = rcutsq
1475 IF (n_rep == 1)
THEN
1477 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1480 END SUBROUTINE read_tersoff_section
1490 SUBROUTINE read_gal_section(nonbonded, section, start, gal_section)
1493 INTEGER,
INTENT(IN) :: start
1496 CHARACTER(LEN=default_string_length), &
1497 DIMENSION(:),
POINTER :: atm_names
1498 INTEGER :: iatom, isec, n_items, n_rep, nval
1500 REAL(kind=
dp) :: rcut, rval
1501 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rvalues
1507 DO isec = 1, n_items
1511 nonbonded%pot(start + isec)%pot%type =
gal_type
1512 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1513 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1514 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1515 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1518 nonbonded%pot(start + isec)%pot%set(1)%gal%met1 = atm_names(1)
1519 nonbonded%pot(start + isec)%pot%set(1)%gal%met2 = atm_names(2)
1522 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%epsilon)
1524 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%bxy)
1526 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%bz)
1529 nonbonded%pot(start + isec)%pot%set(1)%gal%r1 = rvalues(1)
1530 nonbonded%pot(start + isec)%pot%set(1)%gal%r2 = rvalues(2)
1533 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%a1)
1535 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%a2)
1537 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%a3)
1539 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%a4)
1541 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%a)
1543 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%b)
1545 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal%c)
1549 ALLOCATE (nonbonded%pot(start + isec)%pot%set(1)%gal%gcn(nval))
1556 nonbonded%pot(start + isec)%pot%set(1)%gal%gcn(iatom) = rval
1560 l_val=nonbonded%pot(start + isec)%pot%set(1)%gal%express)
1564 IF (n_rep == 1)
THEN
1566 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1567 nonbonded%pot(start + isec)%pot%set(1)%gal%rcutsq = rcut**2
1570 END SUBROUTINE read_gal_section
1580 SUBROUTINE read_gal21_section(nonbonded, section, start, gal21_section)
1583 INTEGER,
INTENT(IN) :: start
1586 CHARACTER(LEN=default_string_length), &
1587 DIMENSION(:),
POINTER :: atm_names
1588 INTEGER :: iatom, isec, n_items, n_rep, nval
1590 REAL(kind=
dp) :: rcut, rval
1591 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rvalues
1597 DO isec = 1, n_items
1601 nonbonded%pot(start + isec)%pot%type =
gal21_type
1602 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1603 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1604 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1605 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1608 nonbonded%pot(start + isec)%pot%set(1)%gal21%met1 = atm_names(1)
1609 nonbonded%pot(start + isec)%pot%set(1)%gal21%met2 = atm_names(2)
1612 nonbonded%pot(start + isec)%pot%set(1)%gal21%epsilon1 = rvalues(1)
1613 nonbonded%pot(start + isec)%pot%set(1)%gal21%epsilon2 = rvalues(2)
1614 nonbonded%pot(start + isec)%pot%set(1)%gal21%epsilon3 = rvalues(3)
1617 nonbonded%pot(start + isec)%pot%set(1)%gal21%bxy1 = rvalues(1)
1618 nonbonded%pot(start + isec)%pot%set(1)%gal21%bxy2 = rvalues(2)
1621 nonbonded%pot(start + isec)%pot%set(1)%gal21%bz1 = rvalues(1)
1622 nonbonded%pot(start + isec)%pot%set(1)%gal21%bz2 = rvalues(2)
1625 nonbonded%pot(start + isec)%pot%set(1)%gal21%r1 = rvalues(1)
1626 nonbonded%pot(start + isec)%pot%set(1)%gal21%r2 = rvalues(2)
1629 nonbonded%pot(start + isec)%pot%set(1)%gal21%a11 = rvalues(1)
1630 nonbonded%pot(start + isec)%pot%set(1)%gal21%a12 = rvalues(2)
1631 nonbonded%pot(start + isec)%pot%set(1)%gal21%a13 = rvalues(3)
1634 nonbonded%pot(start + isec)%pot%set(1)%gal21%a21 = rvalues(1)
1635 nonbonded%pot(start + isec)%pot%set(1)%gal21%a22 = rvalues(2)
1636 nonbonded%pot(start + isec)%pot%set(1)%gal21%a23 = rvalues(3)
1639 nonbonded%pot(start + isec)%pot%set(1)%gal21%a31 = rvalues(1)
1640 nonbonded%pot(start + isec)%pot%set(1)%gal21%a32 = rvalues(2)
1641 nonbonded%pot(start + isec)%pot%set(1)%gal21%a33 = rvalues(3)
1644 nonbonded%pot(start + isec)%pot%set(1)%gal21%a41 = rvalues(1)
1645 nonbonded%pot(start + isec)%pot%set(1)%gal21%a42 = rvalues(2)
1646 nonbonded%pot(start + isec)%pot%set(1)%gal21%a43 = rvalues(3)
1649 nonbonded%pot(start + isec)%pot%set(1)%gal21%AO1 = rvalues(1)
1650 nonbonded%pot(start + isec)%pot%set(1)%gal21%AO2 = rvalues(2)
1653 nonbonded%pot(start + isec)%pot%set(1)%gal21%BO1 = rvalues(1)
1654 nonbonded%pot(start + isec)%pot%set(1)%gal21%BO2 = rvalues(2)
1657 r_val=nonbonded%pot(start + isec)%pot%set(1)%gal21%c)
1660 nonbonded%pot(start + isec)%pot%set(1)%gal21%AH1 = rvalues(1)
1661 nonbonded%pot(start + isec)%pot%set(1)%gal21%AH2 = rvalues(2)
1664 nonbonded%pot(start + isec)%pot%set(1)%gal21%BH1 = rvalues(1)
1665 nonbonded%pot(start + isec)%pot%set(1)%gal21%BH2 = rvalues(2)
1670 ALLOCATE (nonbonded%pot(start + isec)%pot%set(1)%gal21%gcn(nval))
1677 nonbonded%pot(start + isec)%pot%set(1)%gal21%gcn(iatom) = rval
1681 l_val=nonbonded%pot(start + isec)%pot%set(1)%gal21%express)
1685 IF (n_rep == 1)
THEN
1687 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1688 nonbonded%pot(start + isec)%pot%set(1)%gal21%rcutsq = rcut**2
1691 END SUBROUTINE read_gal21_section
1701 SUBROUTINE read_siepmann_section(nonbonded, section, start, siepmann_section)
1704 INTEGER,
INTENT(IN) :: start
1707 CHARACTER(LEN=default_string_length), &
1708 DIMENSION(:),
POINTER :: atm_names
1709 INTEGER :: isec, n_items, n_rep
1710 REAL(kind=
dp) :: rcut
1713 DO isec = 1, n_items
1718 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1719 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1720 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1721 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1724 r_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%B)
1726 r_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%D)
1728 r_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%E)
1730 r_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%F)
1732 r_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%beta)
1734 l_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%allow_oh_formation)
1736 l_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%allow_h3o_formation)
1738 l_val=nonbonded%pot(start + isec)%pot%set(1)%siepmann%allow_o_formation)
1742 IF (n_rep == 1)
THEN
1744 nonbonded%pot(start + isec)%pot%rcutsq = rcut**2
1745 nonbonded%pot(start + isec)%pot%set(1)%siepmann%rcutsq = rcut**2
1748 END SUBROUTINE read_siepmann_section
1757 SUBROUTINE read_bm_section(nonbonded, section, start)
1760 INTEGER,
INTENT(IN) :: start
1762 CHARACTER(LEN=default_string_length), &
1763 DIMENSION(:),
POINTER :: atm_names
1764 INTEGER :: isec, n_items, n_rep
1765 REAL(kind=
dp) :: a1, a2, b1, b2, beta, c, d, f0, r0, rcut
1768 DO isec = 1, n_items
1782 nonbonded%pot(start + isec)%pot%type =
bm_type
1783 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1784 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1785 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1786 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1787 nonbonded%pot(start + isec)%pot%set(1)%buckmo%f0 = f0
1788 nonbonded%pot(start + isec)%pot%set(1)%buckmo%a1 = a1
1789 nonbonded%pot(start + isec)%pot%set(1)%buckmo%a2 = a2
1790 nonbonded%pot(start + isec)%pot%set(1)%buckmo%b1 = b1
1791 nonbonded%pot(start + isec)%pot%set(1)%buckmo%b2 = b2
1792 nonbonded%pot(start + isec)%pot%set(1)%buckmo%c = c
1793 nonbonded%pot(start + isec)%pot%set(1)%buckmo%d = d
1794 nonbonded%pot(start + isec)%pot%set(1)%buckmo%r0 = r0
1795 nonbonded%pot(start + isec)%pot%set(1)%buckmo%beta = beta
1796 nonbonded%pot(start + isec)%pot%rcutsq = rcut*rcut
1800 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmin)
1803 r_val=nonbonded%pot(start + isec)%pot%set(1)%rmax)
1805 END SUBROUTINE read_bm_section
1816 SUBROUTINE read_tabpot_section(nonbonded, section, start, para_env, mm_section)
1819 INTEGER,
INTENT(IN) :: start
1823 CHARACTER(LEN=default_string_length), &
1824 DIMENSION(:),
POINTER :: atm_names
1825 INTEGER :: isec, n_items
1828 DO isec = 1, n_items
1830 nonbonded%pot(start + isec)%pot%type =
tab_type
1831 nonbonded%pot(start + isec)%pot%at1 = atm_names(1)
1832 nonbonded%pot(start + isec)%pot%at2 = atm_names(2)
1833 CALL uppercase(nonbonded%pot(start + isec)%pot%at1)
1834 CALL uppercase(nonbonded%pot(start + isec)%pot%at2)
1836 c_val=nonbonded%pot(start + isec)%pot%set(1)%tab%tabpot_file_name)
1837 CALL read_tabpot_data(nonbonded%pot(start + isec)%pot%set(1)%tab, para_env, mm_section)
1838 nonbonded%pot(start + isec)%pot%set(1)%tab%index = isec
1840 END SUBROUTINE read_tabpot_section
1851 CHARACTER(LEN=default_string_length), &
1852 DIMENSION(:),
POINTER :: charge_atm
1853 REAL(kind=
dp),
DIMENSION(:),
POINTER :: charge
1855 INTEGER,
INTENT(IN) :: start
1857 CHARACTER(LEN=default_string_length) :: atm_name
1858 INTEGER :: isec, n_items
1861 DO isec = 1, n_items
1863 charge_atm(start + isec) = atm_name
1864 CALL uppercase(charge_atm(start + isec))
1878 SUBROUTINE read_apol_section(apol_atm, apol, damping_list, section, &
1880 CHARACTER(LEN=default_string_length), &
1881 DIMENSION(:),
POINTER :: apol_atm
1882 REAL(kind=
dp),
DIMENSION(:),
POINTER :: apol
1885 INTEGER,
INTENT(IN) :: start
1887 CHARACTER(LEN=default_string_length) :: atm_name
1888 INTEGER :: isec, isec_damp, n_damp, n_items, &
1889 start_damp, tmp_damp
1893 NULLIFY (tmp_section)
1896 DO isec = 1, n_items
1900 n_damp = n_damp + tmp_damp
1904 IF (n_damp > 0)
THEN
1905 ALLOCATE (damping_list(1:n_damp))
1910 DO isec = 1, n_items
1912 apol_atm(start + isec) = atm_name
1919 DO isec_damp = 1, tmp_damp
1920 damping_list(start_damp + isec_damp)%atm_name1 = apol_atm(start + isec)
1923 damping_list(start_damp + isec_damp)%atm_name2 = atm_name
1924 CALL uppercase(damping_list(start_damp + isec_damp)%atm_name2)
1927 damping_list(start_damp + isec_damp)%dtype = atm_name
1928 CALL uppercase(damping_list(start_damp + isec_damp)%dtype)
1931 i_val=damping_list(start_damp + isec_damp)%order)
1933 r_val=damping_list(start_damp + isec_damp)%bij)
1935 r_val=damping_list(start_damp + isec_damp)%cij)
1937 start_damp = start_damp + tmp_damp
1941 END SUBROUTINE read_apol_section
1951 SUBROUTINE read_cpol_section(cpol_atm, cpol, section, start)
1952 CHARACTER(LEN=default_string_length), &
1953 DIMENSION(:),
POINTER :: cpol_atm
1954 REAL(kind=
dp),
DIMENSION(:),
POINTER :: cpol
1956 INTEGER,
INTENT(IN) :: start
1958 CHARACTER(LEN=default_string_length) :: atm_name
1959 INTEGER :: isec, n_items
1962 DO isec = 1, n_items
1964 cpol_atm(start + isec) = atm_name
1968 END SUBROUTINE read_cpol_section
1977 SUBROUTINE read_shell_section(shell_list, section, start)
1979 TYPE(
shell_p_type),
DIMENSION(:),
POINTER :: shell_list
1981 INTEGER,
INTENT(IN) :: start
1983 CHARACTER(LEN=default_string_length) :: atm_name
1984 INTEGER :: i_rep, n_rep
1985 REAL(
dp) :: ccharge, cutoff, k, maxdist, mfrac, &
1992 c_val=atm_name, i_rep_section=i_rep)
1994 shell_list(start + i_rep)%atm_name = atm_name
1996 shell_list(start + i_rep)%shell%charge_core = ccharge
1998 shell_list(start + i_rep)%shell%charge_shell = scharge
2000 shell_list(start + i_rep)%shell%massfrac = mfrac
2002 IF (k < 0.0_dp)
THEN
2003 CALL cp_abort(__location__, &
2004 "An invalid value was specified for the force constant k2 of the core-shell "// &
2007 shell_list(start + i_rep)%shell%k2_spring = k
2009 IF (k < 0.0_dp)
THEN
2010 CALL cp_abort(__location__, &
2011 "An invalid value was specified for the force constant k4 of the core-shell "// &
2014 shell_list(start + i_rep)%shell%k4_spring = k
2016 shell_list(start + i_rep)%shell%max_dist = maxdist
2018 shell_list(start + i_rep)%shell%shell_cutoff = cutoff
2021 END SUBROUTINE read_shell_section
2035 SUBROUTINE read_bonds_section(bond_kind, bond_a, bond_b, bond_k, bond_r0, bond_cs, section, start)
2036 INTEGER,
DIMENSION(:),
POINTER :: bond_kind
2037 CHARACTER(LEN=default_string_length), &
2038 DIMENSION(:),
POINTER :: bond_a, bond_b
2039 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: bond_k
2040 REAL(kind=
dp),
DIMENSION(:),
POINTER :: bond_r0, bond_cs
2042 INTEGER,
INTENT(IN) :: start
2044 CHARACTER(LEN=default_string_length), &
2045 DIMENSION(:),
POINTER :: atm_names
2046 INTEGER :: isec, k, n_items
2047 REAL(kind=
dp),
DIMENSION(:),
POINTER :: kvals
2049 NULLIFY (kvals, atm_names)
2051 DO isec = 1, n_items
2054 bond_a(start + isec) = atm_names(1)
2055 bond_b(start + isec) = atm_names(2)
2059 cpassert(
SIZE(kvals) <= 3)
2060 bond_k(:, start + isec) = 0.0_dp
2061 DO k = 1,
SIZE(kvals)
2062 bond_k(k, start + isec) = kvals(k)
2067 END SUBROUTINE read_bonds_section
2088 SUBROUTINE read_bends_section(bend_kind, bend_a, bend_b, bend_c, bend_k, bend_theta0, bend_cb, &
2089 bend_r012, bend_r032, bend_kbs12, bend_kbs32, bend_kss, bend_legendre, &
2091 INTEGER,
DIMENSION(:),
POINTER :: bend_kind
2092 CHARACTER(LEN=default_string_length), &
2093 DIMENSION(:),
POINTER :: bend_a, bend_b, bend_c
2094 REAL(kind=
dp),
DIMENSION(:),
POINTER :: bend_k, bend_theta0, bend_cb, bend_r012, &
2095 bend_r032, bend_kbs12, bend_kbs32, &
2099 INTEGER,
INTENT(IN) :: start
2101 CHARACTER(LEN=default_string_length), &
2102 DIMENSION(:),
POINTER :: atm_names
2103 INTEGER :: isec, k, n_items, n_rep
2104 REAL(kind=
dp),
DIMENSION(:),
POINTER :: kvals, r_values
2106 NULLIFY (kvals, atm_names)
2108 bend_legendre%order = 0
2109 DO isec = 1, n_items
2112 bend_a(start + isec) = atm_names(1)
2113 bend_b(start + isec) = atm_names(2)
2114 bend_c(start + isec) = atm_names(3)
2119 cpassert(
SIZE(kvals) == 1)
2120 bend_k(start + isec) = kvals(1)
2121 CALL section_vals_val_get(section,
"THETA0", i_rep_section=isec, r_val=bend_theta0(start + isec))
2125 CALL section_vals_val_get(section,
"KBS12", i_rep_section=isec, r_val=bend_kbs12(start + isec))
2126 CALL section_vals_val_get(section,
"KBS32", i_rep_section=isec, r_val=bend_kbs32(start + isec))
2131 CALL section_vals_val_get(section,
"LEGENDRE", i_rep_val=k, r_vals=r_values, i_rep_section=isec)
2132 bend_legendre(start + isec)%order =
SIZE(r_values)
2133 IF (
ASSOCIATED(bend_legendre(start + isec)%coeffs))
THEN
2134 DEALLOCATE (bend_legendre(start + isec)%coeffs)
2136 ALLOCATE (bend_legendre(start + isec)%coeffs(bend_legendre(start + isec)%order))
2137 bend_legendre(start + isec)%coeffs = r_values
2140 END SUBROUTINE read_bends_section
2153 SUBROUTINE read_ubs_section(ub_kind, ub_a, ub_b, ub_c, ub_k, ub_r0, section, start)
2154 INTEGER,
DIMENSION(:),
POINTER :: ub_kind
2155 CHARACTER(LEN=default_string_length), &
2156 DIMENSION(:),
POINTER :: ub_a, ub_b, ub_c
2157 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ub_k
2158 REAL(kind=
dp),
DIMENSION(:),
POINTER :: ub_r0
2160 INTEGER,
INTENT(IN) :: start
2162 CHARACTER(LEN=default_string_length), &
2163 DIMENSION(:),
POINTER :: atm_names
2164 INTEGER :: isec, k, n_items
2166 REAL(kind=
dp),
DIMENSION(:),
POINTER :: kvals
2171 DO isec = 1, n_items
2177 ub_a(start + isec) = atm_names(1)
2178 ub_b(start + isec) = atm_names(2)
2179 ub_c(start + isec) = atm_names(3)
2184 cpassert(
SIZE(kvals) <= 3)
2185 ub_k(:, start + isec) = 0.0_dp
2186 DO k = 1,
SIZE(kvals)
2187 ub_k(k, start + isec) = kvals(k)
2192 END SUBROUTINE read_ubs_section
2208 SUBROUTINE read_torsions_section(torsion_kind, torsion_a, torsion_b, torsion_c, torsion_d, torsion_k, &
2209 torsion_phi0, torsion_m, section, start)
2210 INTEGER,
DIMENSION(:),
POINTER :: torsion_kind
2211 CHARACTER(LEN=default_string_length), &
2212 DIMENSION(:),
POINTER :: torsion_a, torsion_b, torsion_c, &
2214 REAL(kind=
dp),
DIMENSION(:),
POINTER :: torsion_k, torsion_phi0
2215 INTEGER,
DIMENSION(:),
POINTER :: torsion_m
2217 INTEGER,
INTENT(IN) :: start
2219 CHARACTER(LEN=default_string_length), &
2220 DIMENSION(:),
POINTER :: atm_names
2221 INTEGER :: isec, n_items
2225 DO isec = 1, n_items
2226 CALL section_vals_val_get(section,
"KIND", i_rep_section=isec, i_val=torsion_kind(start + isec))
2228 torsion_a(start + isec) = atm_names(1)
2229 torsion_b(start + isec) = atm_names(2)
2230 torsion_c(start + isec) = atm_names(3)
2231 torsion_d(start + isec) = atm_names(4)
2237 CALL section_vals_val_get(section,
"PHI0", i_rep_section=isec, r_val=torsion_phi0(start + isec))
2240 IF (torsion_kind(start + isec) .EQ.
do_ff_opls)
THEN
2241 IF (torsion_phi0(start + isec) .NE. 0.0_dp)
THEN
2242 CALL cp_warn(__location__,
"PHI0 parameter was non-zero "// &
2243 "for an OPLS-type TORSION. It will be ignored.")
2245 IF (
modulo(torsion_m(start + isec), 2) .EQ. 0)
THEN
2247 torsion_phi0(start + isec) =
pi
2250 torsion_k(start + isec) = torsion_k(start + isec)*0.5_dp
2253 END SUBROUTINE read_torsions_section
2268 SUBROUTINE read_improper_section(impr_kind, impr_a, impr_b, impr_c, impr_d, impr_k, &
2269 impr_phi0, section, start)
2270 INTEGER,
DIMENSION(:),
POINTER :: impr_kind
2271 CHARACTER(LEN=default_string_length), &
2272 DIMENSION(:),
POINTER :: impr_a, impr_b, impr_c, impr_d
2273 REAL(kind=
dp),
DIMENSION(:),
POINTER :: impr_k, impr_phi0
2275 INTEGER,
INTENT(IN) :: start
2277 CHARACTER(LEN=default_string_length), &
2278 DIMENSION(:),
POINTER :: atm_names
2279 INTEGER :: isec, n_items
2283 DO isec = 1, n_items
2286 impr_a(start + isec) = atm_names(1)
2287 impr_b(start + isec) = atm_names(2)
2288 impr_c(start + isec) = atm_names(3)
2289 impr_d(start + isec) = atm_names(4)
2297 END SUBROUTINE read_improper_section
2312 SUBROUTINE read_opbend_section(opbend_kind, opbend_a, opbend_b, opbend_c, opbend_d, opbend_k, &
2313 opbend_phi0, section, start)
2314 INTEGER,
DIMENSION(:),
POINTER :: opbend_kind
2315 CHARACTER(LEN=default_string_length), &
2316 DIMENSION(:),
POINTER :: opbend_a, opbend_b, opbend_c, opbend_d
2317 REAL(kind=
dp),
DIMENSION(:),
POINTER :: opbend_k, opbend_phi0
2319 INTEGER,
INTENT(IN) :: start
2321 CHARACTER(LEN=default_string_length), &
2322 DIMENSION(:),
POINTER :: atm_names
2323 INTEGER :: isec, n_items
2327 DO isec = 1, n_items
2328 CALL section_vals_val_get(section,
"KIND", i_rep_section=isec, i_val=opbend_kind(start + isec))
2330 opbend_a(start + isec) = atm_names(1)
2331 opbend_b(start + isec) = atm_names(2)
2332 opbend_c(start + isec) = atm_names(3)
2333 opbend_d(start + isec) = atm_names(4)
2339 CALL section_vals_val_get(section,
"PHI0", i_rep_section=isec, r_val=opbend_phi0(start + isec))
2341 END SUBROUTINE read_opbend_section
2360 NULLIFY (ff_section)
2362 CALL read_force_field_section1(ff_section, mm_section, ff_type, para_env)
2371 SUBROUTINE read_eam_data(eam, para_env, mm_section)
2376 CHARACTER(len=*),
PARAMETER :: routinen =
'read_eam_data'
2378 INTEGER :: handle, i, iw
2382 CALL timeset(routinen, handle)
2387 IF (iw > 0)
WRITE (iw, *)
"Reading EAM data from: ", trim(eam%eam_file_name)
2388 CALL parser_create(parser, trim(eam%eam_file_name), para_env=para_env)
2391 IF (iw > 0)
WRITE (iw, *)
"Title: ", parser%input_line
2394 READ (parser%input_line, *) eam%drar, eam%drhoar, eam%acutal, eam%npoints
2407 DO i = 1, eam%npoints
2409 READ (parser%input_line, *) eam%rho(i), eam%rhop(i)
2411 eam%rval(i) = real(i - 1, kind=
dp)*eam%drar
2412 eam%rhoval(i) = real(i - 1, kind=
dp)*eam%drhoar
2415 DO i = 1, eam%npoints
2417 READ (parser%input_line, *) eam%phi(i), eam%phip(i)
2422 DO i = 1, eam%npoints
2424 READ (parser%input_line, *) eam%frho(i), eam%frhop(i)
2429 IF (iw > 0)
WRITE (iw, *)
"Finished EAM data"
2432 CALL timestop(handle)
2434 END SUBROUTINE read_eam_data
2441 SUBROUTINE read_nequip_data(nequip)
2444 CHARACTER(len=*),
PARAMETER :: routinen =
'read_nequip_data'
2445 CHARACTER(LEN=1),
PARAMETER :: delimiter =
' '
2447 CHARACTER(LEN=100),
ALLOCATABLE,
DIMENSION(:) :: tokenized_string
2448 CHARACTER(LEN=default_path_length) :: allow_tf32_str, cutoff_str, &
2449 default_dtype, model_dtype, types_str
2451 LOGICAL :: allow_tf32, found
2453 CALL timeset(routinen, handle)
2455 INQUIRE (file=nequip%nequip_file_name, exist=found)
2456 IF (.NOT. found)
THEN
2457 CALL cp_abort(__location__, &
2458 "Nequip model file <"//trim(nequip%nequip_file_name)// &
2465 CALL tokenize_string(trim(types_str), delimiter, tokenized_string)
2467 IF (
ALLOCATED(nequip%type_names_torch))
THEN
2468 DEALLOCATE (nequip%type_names_torch)
2470 ALLOCATE (nequip%type_names_torch(
SIZE(tokenized_string)))
2472 nequip%type_names_torch(:) = tokenized_string(:)
2474 READ (cutoff_str, *) nequip%rcutsq
2476 nequip%rcutsq = nequip%rcutsq*nequip%rcutsq
2477 nequip%unit_coords_val =
cp_unit_to_cp2k(nequip%unit_coords_val, nequip%unit_coords)
2478 nequip%unit_forces_val =
cp_unit_to_cp2k(nequip%unit_forces_val, nequip%unit_forces)
2479 nequip%unit_energy_val =
cp_unit_to_cp2k(nequip%unit_energy_val, nequip%unit_energy)
2480 nequip%unit_cell_val =
cp_unit_to_cp2k(nequip%unit_cell_val, nequip%unit_cell)
2484 IF (trim(default_dtype) ==
"float32" .AND. trim(model_dtype) ==
"float32")
THEN
2485 nequip%do_nequip_sp = .true.
2486 ELSE IF (trim(default_dtype) ==
"float64" .AND. trim(model_dtype) ==
"float64")
THEN
2487 nequip%do_nequip_sp = .false.
2489 CALL cp_abort(__location__, &
2490 "Both default_dtype and model_dtype should be either float32 or float64. Currently, default_dtype is <"// &
2491 trim(default_dtype)//
"> and model_dtype is <"//trim(model_dtype)//
">.")
2495 allow_tf32 = (trim(allow_tf32_str) ==
"1")
2496 IF (trim(allow_tf32_str) /=
"1" .AND. trim(allow_tf32_str) /=
"0")
THEN
2497 CALL cp_abort(__location__, &
2498 "The value for allow_tf32 <"//trim(allow_tf32_str)// &
2499 "> is not supported. Check the .yaml and .pth files.")
2503 CALL timestop(handle)
2504 END SUBROUTINE read_nequip_data
2511 SUBROUTINE read_allegro_data(allegro)
2514 CHARACTER(len=*),
PARAMETER :: routinen =
'read_allegro_data'
2515 CHARACTER(LEN=1),
PARAMETER :: delimiter =
' '
2517 CHARACTER(LEN=100),
ALLOCATABLE,
DIMENSION(:) :: tokenized_string
2518 CHARACTER(LEN=default_path_length) :: allow_tf32_str, cutoff_str, &
2519 default_dtype, model_dtype, types_str
2521 LOGICAL :: allow_tf32, found
2523 CALL timeset(routinen, handle)
2525 INQUIRE (file=allegro%allegro_file_name, exist=found)
2526 IF (.NOT. found)
THEN
2527 CALL cp_abort(__location__, &
2528 "Allegro model file <"//trim(allegro%allegro_file_name)// &
2533 IF (allegro%nequip_version ==
"")
THEN
2534 CALL cp_abort(__location__, &
2535 "Allegro model file <"//trim(allegro%allegro_file_name)// &
2536 "> has not been deployed; did you forget to run `nequip-deploy`?")
2540 CALL tokenize_string(trim(types_str), delimiter, tokenized_string)
2542 IF (
ALLOCATED(allegro%type_names_torch))
THEN
2543 DEALLOCATE (allegro%type_names_torch)
2545 ALLOCATE (allegro%type_names_torch(
SIZE(tokenized_string)))
2546 allegro%type_names_torch(:) = tokenized_string(:)
2548 READ (cutoff_str, *) allegro%rcutsq
2550 allegro%rcutsq = allegro%rcutsq*allegro%rcutsq
2551 allegro%unit_coords_val =
cp_unit_to_cp2k(allegro%unit_coords_val, allegro%unit_coords)
2552 allegro%unit_forces_val =
cp_unit_to_cp2k(allegro%unit_forces_val, allegro%unit_forces)
2553 allegro%unit_energy_val =
cp_unit_to_cp2k(allegro%unit_energy_val, allegro%unit_energy)
2554 allegro%unit_cell_val =
cp_unit_to_cp2k(allegro%unit_cell_val, allegro%unit_cell)
2558 IF (trim(default_dtype) ==
"float32" .AND. trim(model_dtype) ==
"float32")
THEN
2559 allegro%do_allegro_sp = .true.
2560 ELSE IF (trim(default_dtype) ==
"float64" .AND. trim(model_dtype) ==
"float64")
THEN
2561 allegro%do_allegro_sp = .false.
2563 CALL cp_abort(__location__, &
2564 "Both default_dtype and model_dtype should be either float32 or float64. Currently, default_dtype is <"// &
2565 trim(default_dtype)//
"> and model_dtype is <"//trim(model_dtype)//
">.")
2569 allow_tf32 = (trim(allow_tf32_str) ==
"1")
2570 IF (trim(allow_tf32_str) /=
"1" .AND. trim(allow_tf32_str) /=
"0")
THEN
2571 CALL cp_abort(__location__, &
2572 "The value for allow_tf32 <"//trim(allow_tf32_str)// &
2573 "> is not supported. Check the .yaml and .pth files.")
2577 CALL timestop(handle)
2578 END SUBROUTINE read_allegro_data
2587 SUBROUTINE tokenize_string(element, delimiter, tokenized_array)
2588 CHARACTER(LEN=*),
INTENT(IN) :: element
2589 CHARACTER(LEN=1),
INTENT(IN) :: delimiter
2590 CHARACTER(LEN=100),
ALLOCATABLE,
DIMENSION(:), &
2591 INTENT(OUT) :: tokenized_array
2593 CHARACTER(LEN=100) :: temp_kinds
2594 INTEGER :: end_pos, i, num_elements, start
2595 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: delim_positions
2598 ALLOCATE (delim_positions(len(element)))
2599 delim_positions = .false.
2601 DO i = 1, len(element)
2602 IF (element(i:i) == delimiter) delim_positions(i) = .true.
2605 num_elements = count(delim_positions) + 1
2607 ALLOCATE (tokenized_array(num_elements))
2610 DO i = 1, num_elements
2611 IF (len(element) < 3 .AND. count(delim_positions) == 0)
THEN
2613 end_pos = len(element)
2615 end_pos = find_end_pos(start, delim_positions)
2617 temp_kinds = element(start:end_pos)
2618 IF (trim(temp_kinds) /=
'')
THEN
2619 tokenized_array(i) = temp_kinds
2623 DEALLOCATE (delim_positions)
2624 END SUBROUTINE tokenize_string
2633 INTEGER FUNCTION find_end_pos(start, delim_positions)
2634 INTEGER,
INTENT(IN) :: start
2635 LOGICAL,
DIMENSION(:),
INTENT(IN) :: delim_positions
2637 INTEGER :: end_pos, i
2640 DO i = start,
SIZE(delim_positions)
2641 IF (delim_positions(i))
THEN
2647 find_end_pos = end_pos
2648 END FUNCTION find_end_pos
2656 SUBROUTINE check_cp2k_atom_names_in_torch(cp2k_inp_atom_types, torch_atom_types)
2657 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: cp2k_inp_atom_types, torch_atom_types
2662 DO i = 1,
SIZE(cp2k_inp_atom_types)
2664 DO j = 1,
SIZE(torch_atom_types)
2665 IF (trim(cp2k_inp_atom_types(i)) == trim(torch_atom_types(j)))
THEN
2670 IF (.NOT. found)
THEN
2671 CALL cp_abort(__location__, &
2672 "Atom "//trim(cp2k_inp_atom_types(i))// &
2673 " is defined in the CP2K input file but is missing in the torch model file")
2676 END SUBROUTINE check_cp2k_atom_names_in_torch
2685 SUBROUTINE read_tabpot_data(tab, para_env, mm_section)
2690 CHARACTER(len=*),
PARAMETER :: routinen =
'read_tabpot_data'
2693 INTEGER :: d, handle, i, iw
2697 CALL timeset(routinen, handle)
2702 IF (iw > 0)
WRITE (iw, *)
"Reading TABPOT data from: ", trim(tab%tabpot_file_name)
2703 CALL parser_create(parser, trim(tab%tabpot_file_name), para_env=para_env)
2705 IF (iw > 0)
WRITE (iw, *)
"Title: ", parser%input_line
2710 READ (parser%input_line, *) d1, tab%npoints, d2, tab%dr, tab%rcut
2718 DO i = 1, tab%npoints
2720 READ (parser%input_line, *) d, tab%r(i), tab%e(i), tab%f(i)
2726 tab%dr = tab%r(2) - tab%r(1)
2729 IF (iw > 0)
WRITE (iw, *)
"Finished TABPOT data"
2732 CALL timestop(handle)
2733 END SUBROUTINE read_tabpot_data
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public tosi1964b
integer, save, public tersoff1988
integer, save, public tosi1964a
integer, save, public siepmann1995
integer, save, public yamada2000
integer, save, public clabaut2021
integer, save, public clabaut2020
Utility routines to open and close files. Tracking of preconnections.
character(len=default_path_length) function, public discover_file(file_name)
Checks various locations for a file name.
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
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_get_next_line(parser, nline, at_end)
Read the next input line and broadcast the input information. Skip (nline-1) lines and skip also all ...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
real(kind=dp) function, public cp_unit_to_cp2k(value, unit_str, defaults, power)
converts to the internal cp2k units to the given unit
Define all structure types related to force field kinds.
integer, parameter, public do_ff_undef
integer, parameter, public do_ff_charmm
integer, parameter, public do_ff_g87
integer, parameter, public do_ff_g96
integer, parameter, public do_ff_amber
integer, parameter, public do_ff_opls
Define all structures types related to force_fields.
subroutine, public get_generic_info(gen_section, func_name, xfunction, parameters, values, var_values, size_variables, i_rep_sec, input_variables)
Reads from the input structure all information for generic functions.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Collection of simple mathematical functions and subroutines.
Utility routines for the memory handling.
Interface to the message passing library MPI.
integer, parameter, public lj_charmm_type
integer, parameter, public allegro_type
integer, parameter, public bm_type
integer, parameter, public gal_type
integer, parameter, public nequip_type
integer, parameter, public wl_type
integer, parameter, public ft_type
integer, parameter, public tab_type
integer, parameter, public ftd_type
integer, parameter, public ip_type
integer, parameter, public deepmd_type
integer, parameter, public quip_type
integer, parameter, public gp_type
integer, parameter, public siepmann_type
integer, dimension(2), parameter, public do_potential_single_allocation
integer, parameter, public gw_type
subroutine, public pair_potential_reallocate(p, lb1_new, ub1_new, lj, lj_charmm, williams, goodwin, eam, quip, nequip, allegro, bmhft, bmhftd, ipbv, buck4r, buckmo, gp, tersoff, siepmann, gal, gal21, tab, deepmd)
Cleans the potential parameter type.
integer, dimension(2), parameter, public no_potential_single_allocation
integer, parameter, public b4_type
integer, parameter, public gal21_type
integer, dimension(2), public potential_single_allocation
integer, parameter, public ea_type
integer, parameter, public tersoff_type
subroutine, public shell_p_create(shell_list, ndim)
...
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
subroutine, public torch_allow_tf32(allow_tf32)
Set whether to allow the use of TF32. Needed due to changes in defaults from pytorch 1....
character(:) function, allocatable, public torch_model_read_metadata(filename, key)
Reads metadata entry from given "*.pth" file. (In Torch lingo they are called extra files)
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment