289 LOGICAL,
OPTIONAL :: molecular
292 CHARACTER(len=*),
PARAMETER :: routinen =
'build_qs_neighbor_lists'
294 CHARACTER(LEN=2) :: element_symbol, element_symbol2
295 CHARACTER(LEN=default_string_length) :: print_key_path
296 INTEGER :: handle, hfx_pot, ikind, ingp, iw, jkind, &
297 maxatom, ngp, nkind, zat
298 LOGICAL :: all_potential_present, almo, dftb, do_hfx, dokp, gth_potential_present, &
299 lri_optbas, lrigpw, mic, molecule_only, nddo, paw_atom, paw_atom_present, rigpw, &
300 sgp_potential_present, xtb
301 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: all_present, aux_fit_present, aux_present, &
302 core_present, default_present, nonbond1_atom, nonbond2_atom, oce_present, orb_present, &
303 ppl_present, ppnl_present, ri_present, xb1_atom, xb2_atom
304 REAL(
dp) :: almo_rcov, almo_rvdw, eps_schwarz, &
305 omega, pdist, rcut, roperator, subcells
306 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: all_pot_rad, aux_fit_radius, c_radius, calpha, &
307 core_radius, oce_radius, orb_radius, ppl_radius, ppnl_radius, ri_radius, zeff
308 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radius, pair_radius_lb
319 orb_basis_set, ri_basis_set
324 sab_cn, sab_core, sab_gcp, sab_kp, sab_kp_nosym, sab_lrc, sab_orb, sab_scp, sab_se, &
325 sab_tbe, sab_vdw, sab_xb, sab_xtb_nonbond, sab_xtbe, sac_ae, sac_lri, sac_ppl, sap_oce, &
326 sap_ppnl, soa_list, soo_list
332 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
338 CALL timeset(routinen, handle)
342 NULLIFY (atomic_kind_set, qs_kind_set, cell, neighbor_list_section, &
343 distribution_1d, distribution_2d, gth_potential, sgp_potential, orb_basis_set, &
344 particle_set, molecule_set, dft_control, ks_env)
358 NULLIFY (sab_xtb_nonbond)
366 NULLIFY (sab_kp_nosym)
370 atomic_kind_set=atomic_kind_set, &
371 qs_kind_set=qs_kind_set, &
374 distribution_2d=distribution_2d, &
375 local_particles=distribution_1d, &
376 particle_set=particle_set, &
377 molecule_set=molecule_set, &
378 dft_control=dft_control)
384 last_qs_neighbor_list_id_nr = last_qs_neighbor_list_id_nr + 1
385 CALL set_ks_env(ks_env=ks_env, neighbor_list_id=last_qs_neighbor_list_id_nr)
401 sab_xtb_nonbond=sab_xtb_nonbond, &
406 sab_kp_nosym=sab_kp_nosym)
408 dokp = (kpoints%nkp > 0)
409 nddo = dft_control%qs_control%semi_empirical
410 dftb = dft_control%qs_control%dftb
411 xtb = dft_control%qs_control%xtb
412 almo = dft_control%qs_control%do_almo_scf
415 lri_optbas = dft_control%qs_control%lri_optbas
418 molecule_only = .false.
419 IF (
PRESENT(molecular)) molecule_only = molecular
429 pdist = dft_control%qs_control%pairlist_radius
436 gth_potential_present=gth_potential_present, &
437 sgp_potential_present=sgp_potential_present, &
438 all_potential_present=all_potential_present)
443 nkind =
SIZE(atomic_kind_set)
444 ALLOCATE (orb_present(nkind), aux_fit_present(nkind), aux_present(nkind), &
445 default_present(nkind), core_present(nkind))
446 ALLOCATE (orb_radius(nkind), aux_fit_radius(nkind), c_radius(nkind), &
447 core_radius(nkind), calpha(nkind), zeff(nkind))
448 orb_radius(:) = 0.0_dp
449 aux_fit_radius(:) = 0.0_dp
451 core_radius(:) = 0.0_dp
455 ALLOCATE (pair_radius(nkind, nkind))
456 IF (gth_potential_present .OR. sgp_potential_present)
THEN
457 ALLOCATE (ppl_present(nkind), ppl_radius(nkind))
459 ALLOCATE (ppnl_present(nkind), ppnl_radius(nkind))
462 IF (paw_atom_present)
THEN
463 ALLOCATE (oce_present(nkind), oce_radius(nkind))
466 IF (all_potential_present .OR. sgp_potential_present)
THEN
467 ALLOCATE (all_present(nkind), all_pot_rad(nkind))
472 ALLOCATE (atom2d(nkind))
473 CALL atom2d_build(atom2d, distribution_1d, distribution_2d, atomic_kind_set, &
474 molecule_set, molecule_only, particle_set=particle_set)
478 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom2d(ikind)%list)
480 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=
"ORB")
482 CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_fit_basis_set, basis_type=
"AUX_FIT")
485 paw_proj_set=paw_proj, &
487 all_potential=all_potential, &
488 gth_potential=gth_potential, &
489 sgp_potential=sgp_potential)
494 CALL get_qs_kind(qs_kind_set(ikind), dftb_parameter=dftb_atom)
496 cutoff=orb_radius(ikind), &
497 defined=orb_present(ikind))
499 IF (
ASSOCIATED(orb_basis_set))
THEN
500 orb_present(ikind) = .true.
501 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, kind_radius=orb_radius(ikind))
503 orb_present(ikind) = .false.
508 aux_present(ikind) = .true.
510 aux_present(ikind) = .false.
513 IF (
ASSOCIATED(aux_fit_basis_set))
THEN
514 aux_fit_present(ikind) = .true.
515 CALL get_gto_basis_set(gto_basis_set=aux_fit_basis_set, kind_radius=aux_fit_radius(ikind))
517 aux_fit_present(ikind) = .false.
522 alpha_core_charge=calpha(ikind), &
523 core_charge_radius=core_radius(ikind), &
525 IF (zeff(ikind) /= 0._dp .AND. calpha(ikind) /= 0._dp)
THEN
526 core_present(ikind) = .true.
528 core_present(ikind) = .false.
532 IF (gth_potential_present .OR. sgp_potential_present)
THEN
533 IF (
ASSOCIATED(gth_potential))
THEN
535 ppl_present=ppl_present(ikind), &
536 ppl_radius=ppl_radius(ikind), &
537 ppnl_present=ppnl_present(ikind), &
538 ppnl_radius=ppnl_radius(ikind))
539 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
541 ppl_present=ppl_present(ikind), &
542 ppl_radius=ppl_radius(ikind), &
543 ppnl_present=ppnl_present(ikind), &
544 ppnl_radius=ppnl_radius(ikind))
546 ppl_present(ikind) = .false.
547 ppnl_present(ikind) = .false.
552 IF (paw_atom_present)
THEN
554 oce_present(ikind) = .true.
557 oce_present(ikind) = .false.
562 IF (all_potential_present .OR. sgp_potential_present)
THEN
563 all_present(ikind) = .false.
564 all_pot_rad(ikind) = 0.0_dp
565 IF (
ASSOCIATED(all_potential))
THEN
566 all_present(ikind) = .true.
567 CALL get_potential(potential=all_potential, core_charge_radius=all_pot_rad(ikind))
568 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
569 IF (sgp_potential%ecp_local)
THEN
570 all_present(ikind) = .true.
571 CALL get_potential(potential=sgp_potential, core_charge_radius=all_pot_rad(ikind))
579 IF (pdist < 0.0_dp)
THEN
584 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius, pdist)
586 mic=mic, subcells=subcells, molecular=molecule_only, nlname=
"sab_orb")
587 CALL set_ks_env(ks_env=ks_env, sab_orb=sab_orb)
589 "/SAB_ORB",
"sab_orb",
"ORBITAL ORBITAL")
594 IF (.NOT. (nddo .OR. dftb .OR. xtb))
THEN
596 mic=mic, symmetric=.false., subcells=subcells, molecular=molecule_only, nlname=
"sab_all")
597 CALL set_ks_env(ks_env=ks_env, sab_all=sab_all)
601 IF (.NOT. (nddo .OR. dftb .OR. xtb))
THEN
602 CALL pair_radius_setup(core_present, core_present, core_radius, core_radius, pair_radius)
603 CALL build_neighbor_lists(sab_core, particle_set, atom2d, cell, pair_radius, subcells=subcells, &
604 operator_type=
"PP", nlname=
"sab_core")
605 CALL set_ks_env(ks_env=ks_env, sab_core=sab_core)
607 "/SAB_CORE",
"sab_core",
"CORE CORE")
620 SELECT CASE (hfx_pot)
630 cpabort(
"HFX potential not available for K-points (NYI)")
633 IF (dft_control%do_admm)
THEN
634 CALL pair_radius_setup(aux_fit_present, aux_fit_present, aux_fit_radius, aux_fit_radius, &
638 ALLOCATE (pair_radius_lb(nkind, nkind))
639 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius_lb)
642 IF (pair_radius(ikind, jkind) +
cutoff_screen_factor*roperator .LE. pair_radius_lb(ikind, jkind)) &
643 pair_radius(ikind, jkind) = pair_radius_lb(ikind, jkind) - roperator
647 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
651 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
654 subcells=subcells, nlname=
"sab_kp")
659 subcells=subcells, nlname=
"sab_kp_nosym", symmetric=.false.)
660 CALL set_ks_env(ks_env=ks_env, sab_kp_nosym=sab_kp_nosym)
665 IF (gth_potential_present .OR. sgp_potential_present)
THEN
666 IF (any(ppl_present))
THEN
667 CALL pair_radius_setup(orb_present, ppl_present, orb_radius, ppl_radius, pair_radius)
669 subcells=subcells, operator_type=
"ABC", nlname=
"sac_ppl")
670 CALL set_ks_env(ks_env=ks_env, sac_ppl=sac_ppl)
672 "/SAC_PPL",
"sac_ppl",
"ORBITAL GTH-PPL")
674 IF (qs_env%lri_env%ppl_ri)
THEN
676 subcells=subcells, symmetric=.false., operator_type=
"PP", nlname=
"sac_lri")
677 CALL set_ks_env(ks_env=ks_env, sac_lri=sac_lri)
682 IF (any(ppnl_present))
THEN
683 CALL pair_radius_setup(orb_present, ppnl_present, orb_radius, ppnl_radius, pair_radius)
685 subcells=subcells, operator_type=
"ABBA", nlname=
"sap_ppnl")
686 CALL set_ks_env(ks_env=ks_env, sap_ppnl=sap_ppnl)
688 "/SAP_PPNL",
"sap_ppnl",
"ORBITAL GTH-PPNL")
692 IF (paw_atom_present)
THEN
694 IF (any(oce_present))
THEN
695 CALL pair_radius_setup(orb_present, oce_present, orb_radius, oce_radius, pair_radius)
697 subcells=subcells, operator_type=
"ABBA", nlname=
"sap_oce")
698 CALL set_ks_env(ks_env=ks_env, sap_oce=sap_oce)
700 "/SAP_OCE",
"sap_oce",
"ORBITAL(A) PAW-PRJ")
705 IF (.NOT. (nddo .OR. dftb .OR. xtb))
THEN
706 IF (all_potential_present .OR. sgp_potential_present)
THEN
707 CALL pair_radius_setup(orb_present, all_present, orb_radius, all_pot_rad, pair_radius)
709 subcells=subcells, operator_type=
"ABC", nlname=
"sac_ae")
712 "/SAC_AE",
"sac_ae",
"ORBITAL ERFC POTENTIAL")
718 default_present = .true.
719 c_radius = dft_control%qs_control%se_control%cutoff_cou
721 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
722 IF (dft_control%qs_control%se_control%do_ewald_gks)
THEN
725 subcells=subcells, nlname=
"sab_se")
728 subcells=subcells, nlname=
"sab_se")
732 "/SAB_SE",
"sab_se",
"HARTREE INTERACTIONS")
735 IF ((dft_control%qs_control%se_control%do_ewald) .AND. &
736 (dft_control%qs_control%se_control%integral_screening /=
do_se_is_slater))
THEN
737 c_radius = dft_control%qs_control%se_control%cutoff_lrc
738 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
740 subcells=subcells, nlname=
"sab_lrc")
741 CALL set_ks_env(ks_env=ks_env, sab_lrc=sab_lrc)
743 "/SAB_LRC",
"sab_lrc",
"SE LONG-RANGE CORRECTION")
749 IF (dft_control%qs_control%dftb_control%do_ewald)
THEN
750 CALL get_qs_env(qs_env=qs_env, ewald_env=ewald_env)
753 CALL pair_radius_setup(orb_present, orb_present, c_radius, c_radius, pair_radius)
755 subcells=subcells, nlname=
"sab_tbe")
756 CALL set_ks_env(ks_env=ks_env, sab_tbe=sab_tbe)
760 IF (dft_control%qs_control%dftb_control%dispersion)
THEN
761 IF (dft_control%qs_control%dftb_control%dispersion_type ==
dispersion_uff)
THEN
763 CALL get_qs_kind(qs_kind_set(ikind), dftb_parameter=dftb_atom)
766 default_present = .true.
767 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
769 subcells=subcells, nlname=
"sab_vdw")
770 CALL set_ks_env(ks_env=ks_env, sab_vdw=sab_vdw)
777 IF (dft_control%qs_control%xtb_control%do_ewald)
THEN
778 CALL get_qs_env(qs_env=qs_env, ewald_env=ewald_env)
781 CALL pair_radius_setup(orb_present, orb_present, c_radius, c_radius, pair_radius)
783 subcells=subcells, nlname=
"sab_tbe")
784 CALL set_ks_env(ks_env=ks_env, sab_tbe=sab_tbe)
788 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_atom)
791 default_present = .true.
792 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
794 subcells=subcells, nlname=
"sab_xtbe")
795 CALL set_ks_env(ks_env=ks_env, sab_xtbe=sab_xtbe)
797 ALLOCATE (xb1_atom(nkind), xb2_atom(nkind))
798 c_radius = 0.5_dp*dft_control%qs_control%xtb_control%xb_radius
801 IF (zat == 17 .OR. zat == 35 .OR. zat == 53 .OR. zat == 85)
THEN
802 xb1_atom(ikind) = .true.
804 xb1_atom(ikind) = .false.
806 IF (zat == 7 .OR. zat == 8 .OR. zat == 15 .OR. zat == 16)
THEN
807 xb2_atom(ikind) = .true.
809 xb2_atom(ikind) = .false.
814 symmetric=.false., subcells=subcells, operator_type=
"PP", nlname=
"sab_xb")
817 "/SAB_XB",
"sab_xb",
"XB bonding")
820 IF (dft_control%qs_control%xtb_control%do_nonbonded)
THEN
821 ngp =
SIZE(dft_control%qs_control%xtb_control%nonbonded%pot)
822 ALLOCATE (nonbond1_atom(nkind), nonbond2_atom(nkind))
823 nonbond1_atom = .false.
824 nonbond2_atom = .false.
827 rcut = sqrt(dft_control%qs_control%xtb_control%nonbonded%pot(ingp)%pot%rcutsq)
829 CALL get_atomic_kind(atomic_kind_set(ikind), element_symbol=element_symbol)
831 IF (trim(dft_control%qs_control%xtb_control%nonbonded%pot(ingp)%pot%at1) == trim(element_symbol))
THEN
832 nonbond1_atom(ikind) = .true.
834 CALL get_atomic_kind(atomic_kind_set(jkind), element_symbol=element_symbol2)
836 IF (trim(dft_control%qs_control%xtb_control%nonbonded%pot(ingp)%pot%at2) == trim(element_symbol2))
THEN
837 nonbond2_atom(jkind) = .true.
842 CALL pair_radius_setup(nonbond1_atom, nonbond2_atom, c_radius, c_radius, pair_radius)
844 symmetric=.false., subcells=subcells, operator_type=
"PP", nlname=
"sab_xtb_nonbond")
845 CALL set_ks_env(ks_env=ks_env, sab_xtb_nonbond=sab_xtb_nonbond)
846 CALL write_neighbor_lists(sab_xtb_nonbond, particle_set, cell, para_env, neighbor_list_section, &
847 "/SAB_XTB_NONBOND",
"sab_xtb_nonbond",
"XTB NONBONDED INTERACTIONS")
853 CALL get_qs_env(qs_env=qs_env, dispersion_env=dispersion_env)
854 sab_vdw => dispersion_env%sab_vdw
855 sab_cn => dispersion_env%sab_cn
857 c_radius(:) = dispersion_env%rc_disp
858 default_present = .true.
859 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
861 subcells=subcells, operator_type=
"PP", nlname=
"sab_vdw")
862 dispersion_env%sab_vdw => sab_vdw
870 c_radius(ikind) = 4._dp*
ptable(zat)%covalent_radius*
bohr
872 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
874 subcells=subcells, operator_type=
"PP", nlname=
"sab_cn")
875 dispersion_env%sab_cn => sab_cn
881 CALL get_qs_env(qs_env=qs_env, gcp_env=gcp_env)
882 IF (
ASSOCIATED(gcp_env))
THEN
883 IF (gcp_env%do_gcp)
THEN
884 sab_gcp => gcp_env%sab_gcp
886 c_radius(ikind) = gcp_env%gcp_kind(ikind)%rcsto
888 CALL pair_radius_setup(orb_present, orb_present, c_radius, c_radius, pair_radius)
890 subcells=subcells, operator_type=
"PP", nlname=
"sab_gcp")
891 gcp_env%sab_gcp => sab_gcp
893 NULLIFY (gcp_env%sab_gcp)
897 IF (lrigpw .OR. lri_optbas)
THEN
899 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
900 soo_list => qs_env%lri_env%soo_list
902 mic=mic, molecular=molecule_only, subcells=subcells, nlname=
"soo_list")
903 qs_env%lri_env%soo_list => soo_list
905 "/SOO_LIST",
"soo_list",
"ORBITAL ORBITAL (RI)")
907 ALLOCATE (ri_present(nkind), ri_radius(nkind))
911 CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis_set, basis_type=
"RI_HXC")
912 IF (
ASSOCIATED(ri_basis_set))
THEN
913 ri_present(ikind) = .true.
916 ri_present(ikind) = .false.
920 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
921 soo_list => qs_env%lri_env%soo_list
923 mic=mic, molecular=molecule_only, subcells=subcells, nlname=
"soo_list")
924 qs_env%lri_env%soo_list => soo_list
926 CALL pair_radius_setup(ri_present, ri_present, ri_radius, ri_radius, pair_radius)
927 saa_list => qs_env%lri_env%saa_list
929 mic=mic, molecular=molecule_only, subcells=subcells, nlname=
"saa_list")
930 qs_env%lri_env%saa_list => saa_list
932 CALL pair_radius_setup(ri_present, orb_present, ri_radius, orb_radius, pair_radius)
933 soa_list => qs_env%lri_env%soa_list
935 mic=mic, symmetric=.false., molecular=molecule_only, &
936 subcells=subcells, operator_type=
"ABC", nlname=
"saa_list")
937 qs_env%lri_env%soa_list => soa_list
943 CALL get_atomic_kind(atomic_kind_set(ikind), rcov=almo_rcov, rvdw=almo_rvdw)
945 c_radius(ikind) = max(almo_rcov, almo_rvdw)*
bohr* &
948 default_present = .true.
949 CALL pair_radius_setup(default_present, default_present, c_radius, c_radius, pair_radius)
951 subcells=subcells, operator_type=
"PP", nlname=
"sab_almo")
952 CALL set_ks_env(ks_env=ks_env, sab_almo=sab_almo)
956 print_key_path =
"PRINT%DISTRIBUTION"
961 basis_section=force_env_section, &
962 print_key_path=print_key_path, &
964 CALL write_neighbor_distribution(sab_orb, qs_kind_set, iw, para_env)
967 basis_section=force_env_section, &
968 print_key_path=print_key_path)
975 DEALLOCATE (orb_present, default_present, core_present)
976 DEALLOCATE (orb_radius, aux_fit_radius, c_radius, core_radius)
977 DEALLOCATE (calpha, zeff)
978 DEALLOCATE (pair_radius)
979 IF (gth_potential_present .OR. sgp_potential_present)
THEN
980 DEALLOCATE (ppl_present, ppl_radius)
981 DEALLOCATE (ppnl_present, ppnl_radius)
983 IF (paw_atom_present)
THEN
984 DEALLOCATE (oce_present, oce_radius)
986 IF (all_potential_present .OR. sgp_potential_present)
THEN
987 DEALLOCATE (all_present, all_pot_rad)
990 CALL timestop(handle)
1018 mic, symmetric, molecular, subset_of_mol, current_subset, &
1019 operator_type, nlname, atomb_to_keep)
1026 REAL(
dp),
DIMENSION(:, :),
INTENT(IN) :: pair_radius
1027 REAL(
dp),
INTENT(IN) :: subcells
1028 LOGICAL,
INTENT(IN),
OPTIONAL :: mic, symmetric, molecular
1029 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: subset_of_mol
1030 INTEGER,
OPTIONAL :: current_subset
1031 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: operator_type
1032 CHARACTER(LEN=*),
INTENT(IN) :: nlname
1033 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: atomb_to_keep
1035 CHARACTER(len=*),
PARAMETER :: routinen =
'build_neighbor_lists'
1038 INTEGER,
DIMENSION(:),
POINTER ::
list
1039 END TYPE local_lists
1041 INTEGER :: atom_a, atom_b, handle, i, iab, iatom, iatom_local, &
1042 iatom_subcell, icell, ikind, j, jatom, jatom_local, jcell, jkind, k, &
1043 kcell, maxat, mol_a, mol_b, nkind, otype, natom, inode, nnode, nentry
1044 INTEGER,
DIMENSION(3) :: cell_b, ncell, nsubcell, periodic
1045 INTEGER,
DIMENSION(:),
POINTER :: index_list
1046 LOGICAL :: include_ab, my_mic, &
1047 my_molecular, my_symmetric, my_sort_atomb
1048 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: pres_a, pres_b
1049 REAL(
dp) :: rab2, rab2_max, rab_max, rabm, deth, subcell_scale
1050 REAL(
dp),
DIMENSION(3) :: r, rab, ra, rb, sab_max, sb, &
1051 sb_pbc, sb_min, sb_max, rab_pbc, pd, sab_max_guard
1052 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nlista, nlistb
1053 TYPE(local_lists),
DIMENSION(:),
POINTER :: lista, listb
1055 ALLOCATABLE,
DIMENSION(:) :: kind_a
1059 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: r_pbc
1061 DIMENSION(:),
POINTER :: nl_iterator
1063 CALL timeset(routinen//
"_"//trim(nlname), handle)
1067 IF (
PRESENT(mic)) my_mic = mic
1068 my_symmetric = .true.
1069 IF (
PRESENT(symmetric)) my_symmetric = symmetric
1070 my_molecular = .false.
1072 IF (
PRESENT(molecular)) my_molecular = molecular
1074 IF (
PRESENT(operator_type))
THEN
1075 SELECT CASE (operator_type)
1080 cpassert(.NOT. my_molecular)
1081 my_symmetric = .false.
1084 my_symmetric = .false.
1094 my_sort_atomb = .false.
1095 IF (
PRESENT(atomb_to_keep))
THEN
1096 my_sort_atomb = .true.
1103 ALLOCATE (ab_list(nkind*nkind))
1104 DO iab = 1,
SIZE(ab_list)
1105 NULLIFY (ab_list(iab)%neighbor_list_set)
1106 ab_list(iab)%nl_size = -1
1107 ab_list(iab)%nl_start = -1
1108 ab_list(iab)%nl_end = -1
1109 NULLIFY (ab_list(iab)%nlist_task)
1113 ALLOCATE (pres_a(nkind), pres_b(nkind))
1115 pres_a(ikind) = any(pair_radius(ikind, :) > 0._dp)
1116 pres_b(ikind) = any(pair_radius(:, ikind) > 0._dp)
1120 natom =
SIZE(particle_set)
1121 ALLOCATE (r_pbc(3, natom))
1123 r_pbc(1:3, i) =
pbc(particle_set(i)%r(1:3), cell)
1129 maxat = max(maxat,
SIZE(
atom(ikind)%list))
1131 ALLOCATE (index_list(maxat))
1135 ALLOCATE (lista(nkind), listb(nkind), nlista(nkind), nlistb(nkind))
1139 NULLIFY (lista(ikind)%list, listb(ikind)%list)
1142 IF (
ASSOCIATED(
atom(ikind)%list_local_a_index))
THEN
1143 lista(ikind)%list =>
atom(ikind)%list_local_a_index
1144 nlista(ikind) =
SIZE(lista(ikind)%list)
1146 IF (
ASSOCIATED(
atom(ikind)%list_local_b_index))
THEN
1147 listb(ikind)%list =>
atom(ikind)%list_local_b_index
1148 nlistb(ikind) =
SIZE(listb(ikind)%list)
1151 IF (
ASSOCIATED(
atom(ikind)%list_local_a_index))
THEN
1152 lista(ikind)%list =>
atom(ikind)%list_local_a_index
1153 nlista(ikind) =
SIZE(lista(ikind)%list)
1155 nlistb(ikind) =
SIZE(
atom(ikind)%list)
1156 listb(ikind)%list => index_list
1158 CALL combine_lists(lista(ikind)%list, nlista(ikind), ikind,
atom)
1159 nlistb(ikind) =
SIZE(
atom(ikind)%list)
1160 listb(ikind)%list => index_list
1162 nlista(ikind) =
SIZE(
atom(ikind)%list_1d)
1163 lista(ikind)%list =>
atom(ikind)%list_1d
1164 nlistb(ikind) =
SIZE(
atom(ikind)%list)
1165 listb(ikind)%list => index_list
1174 maxat = max(maxat, nlista(ikind), nlistb(ikind))
1176 ALLOCATE (kind_a(2*maxat))
1179 CALL get_cell(cell=cell, periodic=periodic, deth=deth)
1183 IF (.NOT. pres_a(ikind)) cycle
1186 IF (.NOT. pres_b(jkind)) cycle
1188 iab = ikind + nkind*(jkind - 1)
1191 IF (pair_radius(ikind, jkind) <= 0._dp) cycle
1192 rab_max = pair_radius(ikind, jkind)
1193 IF (otype == 3)
THEN
1197 rabm = maxval(pair_radius(:, jkind))
1201 rab2_max = rabm*rabm
1208 sab_max_guard = 15.0_dp/pd
1211 subcell_scale = ((125.0_dp**3)/deth)**(1.0_dp/6.0_dp)
1215 nsubcell(:) = int(max(1.0_dp, min(0.5_dp*subcells*subcell_scale/sab_max(:), &
1216 0.5_dp*subcells*subcell_scale/sab_max_guard(:))))
1219 ncell(:) = (int(sab_max(:)) + 1)*periodic(:)
1222 symmetric=my_symmetric)
1223 neighbor_list_set => ab_list(iab)%neighbor_list_set
1225 DO iatom_local = 1, nlista(ikind)
1226 iatom = lista(ikind)%list(iatom_local)
1227 atom_a =
atom(ikind)%list(iatom)
1230 neighbor_list=kind_a(iatom_local)%neighbor_list)
1234 DO iatom_local = 1, nlista(ikind)
1235 iatom = lista(ikind)%list(iatom_local)
1236 atom_a =
atom(ikind)%list(iatom)
1237 r = r_pbc(:, atom_a)
1239 subcell(i, j, k)%natom = subcell(i, j, k)%natom + 1
1241 DO k = 1, nsubcell(3)
1242 DO j = 1, nsubcell(2)
1243 DO i = 1, nsubcell(1)
1244 maxat = subcell(i, j, k)%natom + subcell(i, j, k)%natom/10
1245 ALLOCATE (subcell(i, j, k)%atom_list(maxat))
1246 subcell(i, j, k)%natom = 0
1250 DO iatom_local = 1, nlista(ikind)
1251 iatom = lista(ikind)%list(iatom_local)
1252 atom_a =
atom(ikind)%list(iatom)
1253 r = r_pbc(:, atom_a)
1255 subcell(i, j, k)%natom = subcell(i, j, k)%natom + 1
1256 subcell(i, j, k)%atom_list(subcell(i, j, k)%natom) = iatom_local
1259 DO jatom_local = 1, nlistb(jkind)
1260 jatom = listb(jkind)%list(jatom_local)
1261 atom_b =
atom(jkind)%list(jatom)
1262 IF (my_sort_atomb .AND. .NOT. my_symmetric)
THEN
1263 IF (.NOT. any(atomb_to_keep == atom_b)) cycle
1265 IF (my_molecular)
THEN
1266 mol_b =
atom(jkind)%list_b_mol(jatom_local)
1267 IF (
PRESENT(subset_of_mol))
THEN
1268 IF (subset_of_mol(mol_b) .NE. current_subset) cycle
1271 r = r_pbc(:, atom_b)
1274 loop2_kcell:
DO kcell = -ncell(3), ncell(3)
1275 sb(3) = sb_pbc(3) + real(kcell,
dp)
1276 sb_min(3) = sb(3) - sab_max(3)
1277 sb_max(3) = sb(3) + sab_max(3)
1278 IF (periodic(3) /= 0)
THEN
1279 IF (sb_min(3) >= 0.5_dp)
EXIT loop2_kcell
1280 IF (sb_max(3) < -0.5_dp) cycle loop2_kcell
1284 loop2_jcell:
DO jcell = -ncell(2), ncell(2)
1285 sb(2) = sb_pbc(2) + real(jcell,
dp)
1286 sb_min(2) = sb(2) - sab_max(2)
1287 sb_max(2) = sb(2) + sab_max(2)
1288 IF (periodic(2) /= 0)
THEN
1289 IF (sb_min(2) >= 0.5_dp)
EXIT loop2_jcell
1290 IF (sb_max(2) < -0.5_dp) cycle loop2_jcell
1294 loop2_icell:
DO icell = -ncell(1), ncell(1)
1295 sb(1) = sb_pbc(1) + real(icell,
dp)
1296 sb_min(1) = sb(1) - sab_max(1)
1297 sb_max(1) = sb(1) + sab_max(1)
1298 IF (periodic(1) /= 0)
THEN
1299 IF (sb_min(1) >= 0.5_dp)
EXIT loop2_icell
1300 IF (sb_max(1) < -0.5_dp) cycle loop2_icell
1306 loop_k:
DO k = 1, nsubcell(3)
1307 loop_j:
DO j = 1, nsubcell(2)
1308 loop_i:
DO i = 1, nsubcell(1)
1312 IF (periodic(3) /= 0)
THEN
1313 IF (sb_max(3) < subcell(i, j, k)%s_min(3))
EXIT loop_k
1314 IF (sb_min(3) >= subcell(i, j, k)%s_max(3)) cycle loop_k
1317 IF (periodic(2) /= 0)
THEN
1318 IF (sb_max(2) < subcell(i, j, k)%s_min(2))
EXIT loop_j
1319 IF (sb_min(2) >= subcell(i, j, k)%s_max(2)) cycle loop_j
1322 IF (periodic(1) /= 0)
THEN
1323 IF (sb_max(1) < subcell(i, j, k)%s_min(1))
EXIT loop_i
1324 IF (sb_min(1) >= subcell(i, j, k)%s_max(1)) cycle loop_i
1327 IF (subcell(i, j, k)%natom == 0) cycle
1329 DO iatom_subcell = 1, subcell(i, j, k)%natom
1330 iatom_local = subcell(i, j, k)%atom_list(iatom_subcell)
1331 iatom = lista(ikind)%list(iatom_local)
1332 atom_a =
atom(ikind)%list(iatom)
1333 IF (my_molecular)
THEN
1334 mol_a =
atom(ikind)%list_a_mol(iatom_local)
1335 IF (mol_a /= mol_b) cycle
1337 IF (my_symmetric)
THEN
1338 IF (atom_a > atom_b)
THEN
1339 include_ab = (
modulo(atom_a + atom_b, 2) /= 0)
1341 include_ab = (
modulo(atom_a + atom_b, 2) == 0)
1343 IF (my_sort_atomb)
THEN
1344 IF ((.NOT. any(atomb_to_keep == atom_b)) .AND. &
1345 (.NOT. any(atomb_to_keep == atom_a)))
THEN
1346 include_ab = .false.
1352 IF (include_ab)
THEN
1353 ra(:) = r_pbc(:, atom_a)
1354 rab(:) = rb(:) - ra(:)
1355 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
1356 IF (rab2 < rab2_max)
THEN
1362 rab_pbc(:) =
pbc(rab(:), cell)
1363 IF (sum((rab_pbc - rab)**2) > epsilon(1.0_dp))
THEN
1364 include_ab = .false.
1367 IF (include_ab)
THEN
1369 neighbor_list=kind_a(iatom_local)%neighbor_list, &
1398 DEALLOCATE (lista(ikind)%list)
1403 DEALLOCATE (kind_a, pres_a, pres_b, lista, listb, nlista, nlistb)
1404 DEALLOCATE (index_list)
1411 IF (inode == 1) nentry = nentry + nnode
1415 ALLOCATE (ab_list(1)%nlist_task(nentry))
1416 ab_list(1)%nl_size = nentry
1417 DO iab = 2,
SIZE(ab_list)
1418 ab_list(iab)%nl_size = nentry
1419 ab_list(iab)%nlist_task => ab_list(1)%nlist_task
1428 iab = (ikind - 1)*nkind + jkind
1429 IF (ab_list(iab)%nl_start < 0) ab_list(iab)%nl_start = nentry
1430 IF (ab_list(iab)%nl_end < 0)
THEN
1431 ab_list(iab)%nl_end = nentry
1433 cpassert(ab_list(iab)%nl_end + 1 == nentry)
1434 ab_list(iab)%nl_end = nentry
1439 CALL timestop(handle)
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, rhs)
Get the QUICKSTEP environment.