234#include "./base/base_uses.f90"
241 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_environment'
254 SUBROUTINE check_gapw_low_spin_roks(dft_control, dft_section, subsys_section)
255 TYPE(dft_control_type),
POINTER :: dft_control
256 TYPE(section_vals_type),
POINTER :: dft_section, subsys_section
258 INTEGER :: irep, nrep, option
259 LOGICAL :: active, explicit
260 TYPE(section_vals_type),
POINTER :: section, subsection, xc_section
261 TYPE(xc_rho_cflags_type) :: needs
263 IF (.NOT. dft_control%low_spin_roks)
RETURN
264 IF (dft_control%qs_control%gapw_xc)
THEN
265 CALL cp_abort(__location__,
"GAPW_XC is not compatible with low spin ROKS method.")
267 IF (.NOT. dft_control%qs_control%gapw)
RETURN
269 IF (dft_control%qs_control%gapw_control%accurate_xcint)
THEN
270 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support GAPW_ACCURATE_XCINT.")
272 IF (dft_control%do_admm)
THEN
273 CALL cp_abort(__location__,
"ADMM not compatible with low spin ROKS method.")
278 IF (dft_control%sic_method_id /=
sic_none)
THEN
279 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support SIC.")
281 IF (dft_control%qs_control%s2_restraint)
THEN
282 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support S2 restraints.")
289 IF (active)
CALL cp_abort(__location__,
"GAPW low spin ROKS does not support DFT+U.")
297 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support spin DDAPC restraints.")
307 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support spin CDFT constraints.")
316 IF (nrep /= 1)
CALL cp_abort(__location__,
"GAPW low spin ROKS requires a single HF section.")
318 IF (active)
CALL cp_abort(__location__,
"GAPW low spin ROKS does not support RI-HFX.")
320 IF (active)
CALL cp_abort(__location__,
"GAPW low spin ROKS does not support ACE-HFX.")
322 IF (active)
CALL cp_abort(__location__,
"GAPW low spin ROKS does not support SCREEN_ON_INITIAL_P.")
326 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support nonlocal vdW functionals.")
328 IF (dft_control%use_gauxc)
THEN
330 CALL cp_abort(__location__, &
331 "GAPW low spin ROKS requires the molecular GauXC grid, not native Skala grids.")
336 IF (needs%laplace_rho .OR. needs%laplace_rho_spin)
THEN
337 CALL cp_abort(__location__,
"GAPW low spin ROKS does not support density-Laplacian functionals.")
340 END SUBROUTINE check_gapw_low_spin_roks
361 SUBROUTINE qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, &
362 qmmm, qmmm_env_qm, force_env_section, subsys_section, &
363 use_motion_section, silent, multip, charge)
371 LOGICAL,
INTENT(IN),
OPTIONAL :: qmmm
374 LOGICAL,
INTENT(IN) :: use_motion_section
375 LOGICAL,
INTENT(IN),
OPTIONAL :: silent
376 INTEGER,
INTENT(IN),
OPTIONAL :: multip, charge
378 CHARACTER(LEN=default_string_length) :: basis_type
379 INTEGER :: ikind, method_id, nelectron_total, &
380 nkind, nkp_grid(3), tddfpt_kernel
381 LOGICAL :: dftb_kpoint_sym_restricted, do_active_space, do_admm_rpa, do_bse, do_debug_fdiff, &
382 do_debug_forces, do_debug_stress_tensor, do_dftb_scc, do_dftb_scc_high_l, do_ec_hfx, &
383 do_et, do_exx, do_gw, do_hfx, do_kpoints, do_linear_response, do_mp2, do_ri_mp2, &
384 do_ri_rpa, do_ri_sos_mp2, do_tddfpt, do_tddfpt_unsupported_kpoints, do_wfc_low_scaling, &
385 do_wfc_low_scaling_kpoints, do_xtb_tblite, final_kpoint_reinit, is_identical, is_semi, &
386 kpoint_explicit, kpoint_verbose, mp2_present, my_qmmm, ot_energies, owned_kpoints, &
387 qmmm_decoupl, same_except_frac, use_real_wfn, use_ref_cell
388 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rtmat
390 TYPE(
cell_type),
POINTER :: my_cell, my_cell_ref
400 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
406 TYPE(
section_vals_type),
POINTER :: active_space_section, dft_section, ec_hfx_section, &
407 ec_section, et_coupling_section, gw_section, hfx_section, kpoint_section, mp2_section, &
408 rpa_hfx_section, tddfpt_section, transport_section
410 NULLIFY (my_cell, my_cell_ref, atomic_kind_set, particle_set, &
411 qs_kind_set, kpoint_section, dft_section, ec_section, &
412 subsys, ks_env, dft_control, blacs_env)
414 CALL set_qs_env(qs_env, input=force_env_section)
415 IF (.NOT.
ASSOCIATED(subsys_section))
THEN
422 IF (
PRESENT(qmmm)) my_qmmm = qmmm
423 qmmm_decoupl = .false.
424 IF (
PRESENT(qmmm_env_qm))
THEN
428 qmmm_decoupl = my_qmmm .AND. qmmm_env_qm%periodic .AND. qmmm_env_qm%multipole .AND. &
431 qs_env%qmmm_env_qm => qmmm_env_qm
436 SELECT CASE (method_id)
449 force_env_section=force_env_section, &
450 subsys_section=subsys_section, &
451 use_motion_section=use_motion_section, &
452 root_section=root_section, &
453 cp_subsys=cp_subsys, &
454 elkind=is_semi, silent=silent)
463 cell_ref=my_cell_ref, &
464 use_ref_cell=use_ref_cell, &
465 atomic_kind_set=atomic_kind_set, &
466 qs_kind_set=qs_kind_set, &
467 particle_set=particle_set)
470 IF (
PRESENT(globenv))
THEN
472 globenv%blacs_repeatable)
481 force_env_section, subsys_section, para_env)
484 IF (
PRESENT(kpoint_env))
THEN
485 owned_kpoints = .false.
486 kpoints => kpoint_env
487 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
490 owned_kpoints = .true.
493 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
497 ot_energies = .false.
499 IF (.NOT. kpoint_explicit .AND. ot_energies)
THEN
514 IF (.NOT. do_gw)
THEN
519 do_tddfpt_unsupported_kpoints = .false.
526 IF (.NOT. do_tddfpt_unsupported_kpoints)
THEN
528 IF (use_real_wfn)
THEN
529 CALL cp_abort(__location__,
"K-point TDDFPT requires complex wavefunctions.")
533 IF (.NOT. do_bse)
THEN
536 IF (.NOT. do_bse)
THEN
540 do_active_space = .false.
543 do_xtb_tblite = .false.
548 do_dftb_scc = .false.
553 do_linear_response = .false.
555 do_debug_fdiff = .false.
556 IF (
PRESENT(globenv)) do_debug_fdiff = globenv%run_type_id ==
debug_run
557 IF (do_debug_fdiff .AND.
PRESENT(root_section))
THEN
559 l_val=do_debug_forces)
561 l_val=do_debug_stress_tensor)
562 do_debug_fdiff = do_debug_forces .OR. do_debug_stress_tensor
566 do_ri_sos_mp2 = .false.
568 do_wfc_low_scaling = .false.
569 do_wfc_low_scaling_kpoints = .false.
572 IF (mp2_present)
THEN
577 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_SOS_MP2%_SECTION_PARAMETERS_", &
581 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
582 l_val=do_wfc_low_scaling)
584 l_val=do_wfc_low_scaling_kpoints)
585 IF (.NOT. do_bse)
THEN
587 "DFT%XC%WF_CORRELATION%RI_RPA%GW%BSE%_SECTION_PARAMETERS_", &
591 CALL restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
592 do_tddfpt_unsupported_kpoints, &
593 do_active_space, do_linear_response, &
595 do_mp2 .OR. do_ri_mp2 .OR. do_ri_sos_mp2, &
596 do_ri_rpa .AND. .NOT. do_gw, do_bse, &
597 do_wfc_low_scaling, do_wfc_low_scaling_kpoints, &
598 do_xtb_tblite, .false.)
602 CALL qs_init_subsys(qs_env, para_env, subsys, my_cell, my_cell_ref, use_ref_cell, &
603 subsys_section, silent=silent, multip=multip, charge=charge)
605 CALL get_qs_env(qs_env, dft_control=dft_control)
606 IF (owned_kpoints)
THEN
607 do_dftb_scc_high_l = .false.
609 do_dftb_scc_high_l = dftb_kind_set_has_high_l(qs_kind_set)
611 CALL restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
612 do_tddfpt_unsupported_kpoints, &
613 do_active_space, do_linear_response, &
615 do_mp2 .OR. do_ri_mp2 .OR. do_ri_sos_mp2, &
616 do_ri_rpa .AND. .NOT. do_gw, do_bse, &
617 do_wfc_low_scaling, do_wfc_low_scaling_kpoints, &
618 do_xtb_tblite, do_dftb_scc_high_l, &
619 restricted=dftb_kpoint_sym_restricted)
620 final_kpoint_reinit = dftb_kpoint_sym_restricted .OR. kpoint_verbose
621 IF (final_kpoint_reinit)
THEN
629 IF (method_id ==
do_method_lrigpw .OR. dft_control%qs_control%lri_optbas)
THEN
630 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
633 CALL cp_warn(__location__,
"Experimental code: "// &
634 "RIGPW should only be used for testing.")
635 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
639 IF (my_qmmm .AND.
PRESENT(qmmm_env_qm) .AND. .NOT. dft_control%qs_control%commensurate_mgrids)
THEN
643 CALL cp_abort(__location__,
"QM/MM with coupling GAUSS or S-WAVE requires "// &
644 "keyword FORCE_EVAL/DFT/MGRID/COMMENSURATE to be enabled.")
649 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, blacs_env=blacs_env)
651 IF (dft_control%qs_control%do_ls_scf)
THEN
652 cpabort(
"DFT%KPOINTS are not implemented with QS/LS_SCF; use a real-space supercell instead.")
656 CALL get_qs_env(qs_env=qs_env, wf_history=wf_history)
662 IF (dft_control%do_admm)
THEN
663 CALL qs_basis_rotation(qs_env, kpoints, basis_type=
"AUX_FIT", storage_type=
"AUX_FIT")
670 CALL get_qs_env(qs_env, dft_control=dft_control, scf_control=scf_control, nelectron_total=nelectron_total)
675 IF (dft_control%do_admm)
THEN
676 basis_type =
'AUX_FIT'
680 CALL hfx_create(qs_env%x_data, para_env, hfx_section, atomic_kind_set, &
681 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
682 nelectron_total=nelectron_total, nkp_grid=nkp_grid)
687 IF (mp2_present)
THEN
688 cpassert(
ASSOCIATED(qs_env%mp2_env))
701 qs_env%mp2_env%ri_rpa%reuse_hfx = .true.
702 IF (.NOT. do_hfx) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
704 IF (.NOT. (is_identical .OR. same_except_frac)) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
705 IF (dft_control%do_admm .AND. .NOT. do_admm_rpa) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
707 IF (.NOT. qs_env%mp2_env%ri_rpa%reuse_hfx)
THEN
708 IF (do_admm_rpa)
THEN
709 basis_type =
'AUX_FIT'
713 CALL hfx_create(qs_env%mp2_env%ri_rpa%x_data, para_env, rpa_hfx_section, atomic_kind_set, &
714 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
715 nelectron_total=nelectron_total)
717 qs_env%mp2_env%ri_rpa%x_data => qs_env%x_data
722 IF (dft_control%qs_control%do_kg)
THEN
724 CALL kg_env_create(qs_env, qs_env%kg_env, qs_kind_set, qs_env%input)
729 l_val=qs_env%excited_state)
730 NULLIFY (exstate_env)
731 CALL exstate_create(exstate_env, qs_env%excited_state, dft_section)
732 CALL set_qs_env(qs_env, exstate_env=exstate_env)
735 "PROPERTIES%ET_COUPLING")
741 IF (qs_env%do_transport)
THEN
745 CALL get_qs_env(qs_env, harris_env=harris_env)
746 IF (qs_env%harris_method)
THEN
749 CALL get_qs_env(qs_env, local_particles=local_particles)
750 CALL harris_rhoin_init(harris_env%rhoin,
"RHOIN", qs_kind_set, atomic_kind_set, &
751 local_particles, dft_control%nspins)
753 harris_env%rhoin%nspin = dft_control%nspins
762 l_val=qs_env%energy_correction)
767 IF (qs_env%energy_correction)
THEN
772 IF (ec_env%do_ec_hfx)
THEN
775 IF (ec_env%do_kpoints)
THEN
776 CALL cp_abort(__location__, &
777 "Energy correction methods with hybrid functionals "// &
778 "and kpoints is not yet available.")
782 IF (ec_env%basis_inconsistent)
THEN
783 CALL cp_abort(__location__, &
784 "Energy correction methods with hybrid functionals: "// &
785 "correction and ground state need to use the same basis. "// &
786 "Checked by comparing basis set names only.")
790 IF (ec_env%do_ec_admm .AND. .NOT. dft_control%do_admm)
THEN
791 CALL cp_abort(__location__,
"Need an ADMM input section for ADMM EC to work")
794 ec_env%reuse_hfx = .true.
795 IF (.NOT. do_hfx) ec_env%reuse_hfx = .false.
797 IF (.NOT. (is_identical .OR. same_except_frac)) ec_env%reuse_hfx = .false.
798 IF (dft_control%do_admm .AND. .NOT. ec_env%do_ec_admm) ec_env%reuse_hfx = .false.
800 IF (.NOT. ec_env%reuse_hfx)
THEN
801 IF (ec_env%do_ec_admm)
THEN
802 basis_type =
'AUX_FIT'
806 CALL hfx_create(ec_env%x_data, para_env, ec_hfx_section, atomic_kind_set, &
807 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
808 nelectron_total=nelectron_total)
810 ec_env%x_data => qs_env%x_data
819 IF (dft_control%qs_control%do_almo_scf)
THEN
824 CALL get_qs_env(qs_env, rel_control=rel_control)
825 IF (rel_control%rel_method /=
rel_none)
THEN
827 nkind =
SIZE(atomic_kind_set)
831 IF (
ASSOCIATED(rtmat))
CALL set_qs_kind(qs_kind_set(ikind), reltmat=rtmat)
856 SUBROUTINE restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
857 do_tddfpt, do_active_space, do_linear_response, &
859 do_mp2, do_rpa, do_bse, do_wfc_low_scaling, &
860 do_wfc_low_scaling_kpoints, do_xtb_tblite, &
861 do_dftb_scc_high_l, restricted)
863 INTEGER,
INTENT(IN) :: method_id
864 LOGICAL,
INTENT(IN) :: do_gw, do_tddfpt, do_active_space, do_linear_response, &
865 do_debug_fdiff, do_mp2, do_rpa, do_bse, do_wfc_low_scaling, do_wfc_low_scaling_kpoints, &
866 do_xtb_tblite, do_dftb_scc_high_l
867 LOGICAL,
INTENT(OUT),
OPTIONAL :: restricted
869 CHARACTER(LEN=default_string_length) :: kp_scheme, reason
870 LOGICAL :: full_grid, inversion_symmetry_only, &
873 IF (
PRESENT(restricted)) restricted = .false.
875 reason = unsupported_kpoint_method_reason(method_id, do_gw, do_tddfpt, do_linear_response, &
876 do_mp2, do_bse, do_xtb_tblite)
877 IF (len_trim(reason) > 0)
THEN
879 IF (len_trim(kp_scheme) > 0 .AND. trim(kp_scheme) /=
"NONE")
THEN
880 IF (trim(reason) ==
"GW")
THEN
881 CALL cp_abort(__location__, &
882 "DFT%KPOINTS are not supported with GW; use "// &
883 "WF_CORRELATION%LOW_SCALING%KPOINTS and RI_RPA%GW%KPOINTS_SELF_ENERGY "// &
884 "for GW k-point sampling.")
886 CALL cp_abort(__location__, &
887 "DFT%KPOINTS are not supported with "//trim(reason)// &
888 "; remove DFT%KPOINTS for these calculations.")
892 IF (do_active_space)
THEN
894 IF (len_trim(kp_scheme) > 0 .AND. trim(kp_scheme) /=
"NONE" .AND. &
895 trim(kp_scheme) /=
"GAMMA")
THEN
896 CALL cp_abort(__location__, &
897 "Only Gamma-point DFT%KPOINTS are supported with ACTIVE_SPACE; "// &
898 "use SCHEME GAMMA, SCHEME NONE, or remove DFT%KPOINTS.")
902 CALL get_kpoint_info(kpoints, symmetry=kpoint_symmetry, full_grid=full_grid, &
903 inversion_symmetry_only=inversion_symmetry_only)
904 IF (.NOT. (kpoint_symmetry .AND. .NOT. full_grid .AND. .NOT. inversion_symmetry_only))
RETURN
906 reason = unsupported_atomic_kpoint_symmetry_reason(method_id, do_gw, &
907 do_tddfpt, do_active_space, do_linear_response, &
909 do_mp2, do_rpa, do_bse, do_wfc_low_scaling, &
910 do_wfc_low_scaling_kpoints, do_xtb_tblite, &
912 IF (len_trim(reason) == 0)
RETURN
914 CALL cp_warn(__location__, &
915 "Atomic k-point symmetry is currently not implemented for "//trim(reason)// &
916 "; restricting to inversion/time-reversal symmetry.")
918 IF (
PRESENT(restricted)) restricted = .true.
920 END SUBROUTINE restrict_unsupported_atomic_kpoint_symmetry
933 FUNCTION unsupported_kpoint_method_reason(method_id, do_gw, do_tddfpt, do_linear_response, &
934 do_mp2, do_bse, do_xtb_tblite)
RESULT(reason)
935 INTEGER,
INTENT(IN) :: method_id
936 LOGICAL,
INTENT(IN) :: do_gw, do_tddfpt, do_linear_response, &
937 do_mp2, do_bse, do_xtb_tblite
938 CHARACTER(LEN=default_string_length) :: reason
943 mark_used(do_xtb_tblite)
950 reason =
"TDDFPT/TDDFT"
953 IF (do_linear_response)
THEN
954 reason =
"LINEAR_RESPONSE/DFPT"
957 SELECT CASE (method_id)
964 reason =
"semiempirical methods"
969 END FUNCTION unsupported_kpoint_method_reason
988 FUNCTION unsupported_atomic_kpoint_symmetry_reason(method_id, do_gw, do_tddfpt, &
989 do_active_space, do_linear_response, do_debug_fdiff, &
990 do_mp2, do_rpa, do_bse, do_wfc_low_scaling, &
991 do_wfc_low_scaling_kpoints, do_xtb_tblite, &
992 do_dftb_scc_high_l)
RESULT(reason)
993 INTEGER,
INTENT(IN) :: method_id
994 LOGICAL,
INTENT(IN) :: do_gw, do_tddfpt, do_active_space, do_linear_response, &
995 do_debug_fdiff, do_mp2, do_rpa, do_bse, do_wfc_low_scaling, do_wfc_low_scaling_kpoints, &
996 do_xtb_tblite, do_dftb_scc_high_l
997 CHARACTER(LEN=default_string_length) :: reason
1000 mark_used(do_debug_fdiff)
1001 mark_used(do_xtb_tblite)
1003 SELECT CASE (method_id)
1005 IF (do_dftb_scc_high_l) reason =
"SCC-DFTB with d orbitals"
1012 reason =
"semiempirical methods"
1017 IF (len_trim(reason) > 0)
RETURN
1020 ELSE IF (do_gw)
THEN
1022 ELSE IF (do_tddfpt)
THEN
1023 reason =
"TDDFPT/TDDFT"
1024 ELSE IF (do_active_space)
THEN
1025 reason =
"ACTIVE_SPACE"
1026 ELSE IF (do_linear_response)
THEN
1027 reason =
"LINEAR_RESPONSE/DFPT"
1028 ELSE IF (do_mp2)
THEN
1030 ELSE IF (do_rpa .AND. do_wfc_low_scaling_kpoints)
THEN
1031 reason =
"LOW_SCALING RPA"
1032 ELSE IF (do_wfc_low_scaling)
THEN
1033 reason =
"LOW_SCALING WF_CORRELATION"
1034 ELSE IF (do_rpa)
THEN
1038 END FUNCTION unsupported_atomic_kpoint_symmetry_reason
1045 FUNCTION dftb_kind_set_has_high_l(qs_kind_set)
RESULT(has_high_l)
1046 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1047 LOGICAL :: has_high_l
1049 INTEGER :: ikind, lmax
1050 LOGICAL :: any_defined, defined
1054 IF (.NOT.
ASSOCIATED(qs_kind_set))
RETURN
1056 any_defined = .false.
1057 DO ikind = 1,
SIZE(qs_kind_set)
1058 NULLIFY (dftb_parameter)
1059 CALL get_qs_kind(qs_kind_set(ikind), dftb_parameter=dftb_parameter)
1060 IF (.NOT.
ASSOCIATED(dftb_parameter)) cycle
1064 IF (.NOT. defined) cycle
1065 any_defined = .true.
1066 IF (lmax > 1)
RETURN
1069 IF (any_defined) has_high_l = .false.
1071 END FUNCTION dftb_kind_set_has_high_l
1087 SUBROUTINE qs_init_subsys(qs_env, para_env, subsys, cell, cell_ref, use_ref_cell, subsys_section, &
1088 silent, multip, charge)
1093 TYPE(
cell_type),
POINTER :: cell, cell_ref
1094 LOGICAL,
INTENT(in) :: use_ref_cell
1096 LOGICAL,
INTENT(in),
OPTIONAL :: silent
1097 INTEGER,
INTENT(IN),
OPTIONAL :: multip, charge
1099 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_init_subsys'
1101 CHARACTER(len=2) :: element_symbol
1102 INTEGER :: gfn_type, handle, ikind, ispin, iw, lmax_sphere, maxl, maxlgto, maxlgto_lri, &
1103 maxlgto_nuc, maxlppl, maxlppnl, method_id, multiplicity, my_ival, n_ao, n_mo_add, &
1104 n_mo_auto, n_mo_target, natom, nelectron, ngauss, nkind, nlumo_dos, nlumo_molden, &
1105 nlumo_required, output_unit, sort_basis, tnadd_method
1106 INTEGER,
DIMENSION(2) :: n_mo, nelectron_spin
1107 INTEGER,
DIMENSION(5) :: ngaussflex, occ
1108 INTEGER,
DIMENSION(:),
POINTER :: mo_index_range
1109 LOGICAL :: all_potential_present, be_silent, cneo_potential_present, do_kpoints, do_ri_hfx, &
1110 do_ri_mp2, do_ri_rpa, do_ri_sos_mp2, do_rpa_ri_exx, do_wfc_im_time, e1terms, &
1111 has_unit_metric, lribas, mp2_present, orb_gradient, paw_atom
1112 REAL(kind=
dp) :: alpha, ccore, ewald_rcut, fxx, maxocc, &
1113 rc, rcut, total_zeff_corr, &
1114 verlet_skin, zeff_correction
1125 rhoin_basis, ri_aux_basis_set, &
1126 ri_hfx_basis, ri_xas_basis, &
1131 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
1140 POINTER :: dftb_potential
1145 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1153 TYPE(
section_vals_type),
POINTER :: dft_section, et_coupling_section, et_ddapc_section, &
1154 ewald_section, harris_section, lri_section, mp2_section, nl_section, poisson_section, &
1155 pp_section, print_section, qs_section, rixs_section, se_section, tddfpt_section, &
1161 CALL timeset(routinen, handle)
1167 IF (
PRESENT(silent)) be_silent = silent
1172 NULLIFY (mos, se_taper)
1173 NULLIFY (dft_control)
1176 NULLIFY (local_molecules)
1177 NULLIFY (local_particles)
1178 NULLIFY (scf_control)
1179 NULLIFY (dft_section)
1180 NULLIFY (et_coupling_section)
1182 NULLIFY (mos_last_converged)
1191 qs_kind_set=qs_kind_set, &
1192 atomic_kind_set=atomic_kind_set, &
1193 molecule_set=molecule_set, &
1194 molecule_kind_set=molecule_kind_set)
1200 dft_control%qs_control%periodicity = sum(cell%perd)
1205 CALL check_gapw_low_spin_roks(dft_control, dft_section, subsys_section)
1208 IF (.NOT. be_silent)
THEN
1211 SELECT CASE (method_id)
1220 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
1221 CALL tblite_header(iw, dft_control%qs_control%xtb_control%tblite_method)
1223 gfn_type = dft_control%qs_control%xtb_control%gfn_type
1228 "PRINT%PROGRAM_BANNER")
1231 IF (dft_control%do_sccs .AND. dft_control%qs_control%gapw)
THEN
1232 cpabort(
"SCCS is not yet implemented with GAPW")
1234 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
1235 IF (do_kpoints)
THEN
1236 IF (dft_control%nspins == 2 .AND. dft_control%qs_control%xtb .AND. &
1237 .NOT. dft_control%qs_control%xtb_control%do_tblite .AND. &
1238 dft_control%qs_control%xtb_control%gfn_type ==
gfn1xtb .AND. &
1240 .NOT. dft_control%qs_control%xtb_control%tblite_mixer_damping_explicit)
THEN
1241 CALL cp_warn(__location__, &
1242 "Reducing XTB/TBLITE_MIXER/DAMPING to 0.25 for CP2K-internal GFN1-xTB "// &
1243 "UKS k-point calculations with SCC_MIXER TBLITE. Set XTB/TBLITE_MIXER/DAMPING "// &
1244 "explicitly to override this conservative fallback.")
1245 dft_control%qs_control%xtb_control%tblite_mixer_damping = 0.25_dp
1248 SELECT CASE (dft_control%qs_control%wf_interpolation_method_nr)
1250 CALL cp_warn(__location__,
"Linear WFN-based extrapolation methods are not "// &
1251 "implemented for k-points. Switching to USE_PREV_WF.")
1258 dft_control%qs_control%et_coupling_calc = .false.
1261 dft_control%qs_control%et_coupling_calc = .true.
1262 dft_control%qs_control%ddapc_restraint = .true.
1263 CALL read_ddapc_section(dft_control%qs_control, ddapc_restraint_section=et_ddapc_section)
1273 IF (qs_env%do_rixs)
THEN
1274 CALL read_rixs_control(dft_control%rixs_control, rixs_section, dft_control%qs_control)
1280 ALLOCATE (rel_control)
1283 CALL set_qs_env(qs_env, rel_control=rel_control)
1288 NULLIFY (ewald_env, ewald_pw, dftb_potential)
1289 dftb_control => dft_control%qs_control%dftb_control
1290 CALL qs_dftb_param_init(atomic_kind_set, qs_kind_set, dftb_control, dftb_potential, &
1291 subsys_section=subsys_section, para_env=para_env)
1292 CALL set_qs_env(qs_env, dftb_potential=dftb_potential)
1294 IF (dftb_control%do_ewald)
THEN
1295 ALLOCATE (ewald_env)
1298 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1303 cell_periodic=cell%perd)
1305 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
1306 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
1308 ELSE IF (dft_control%qs_control%method_id ==
do_method_xtb)
THEN
1310 xtb_control => dft_control%qs_control%xtb_control
1312 IF (xtb_control%do_tblite)
THEN
1317 xtb_control%tblite_accuracy, xtb_control%tblite_param_file)
1319 CALL tb_init_wf(qs_env%tb_tblite, dft_control)
1322 qs_kind => qs_kind_set(ikind)
1324 cpassert(.NOT.
ASSOCIATED(qs_kind%xtb_parameter))
1327 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
1329 NULLIFY (tmp_basis_set)
1330 CALL tb_get_basis(qs_env%tb_tblite, tmp_basis_set, element_symbol, qs_kind%xtb_parameter, occ)
1335 zeff_correction = 0.0_dp
1337 zeff=real(sum(occ),
dp), zeff_correction=zeff_correction)
1340 NULLIFY (ewald_env, ewald_pw)
1342 qs_kind => qs_kind_set(ikind)
1344 cpassert(.NOT.
ASSOCIATED(qs_kind%xtb_parameter))
1347 gfn_type = dft_control%qs_control%xtb_control%gfn_type
1348 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
1350 xtb_control%parameter_file_path, xtb_control%parameter_file_name, &
1352 IF (xtb_control%do_spinpol)
THEN
1354 xtb_control%parameter_file_path, xtb_control%spinpol_param_file_name, &
1361 NULLIFY (tmp_basis_set)
1362 IF (qs_kind%xtb_parameter%z == 1)
THEN
1364 ngauss = xtb_control%h_sto_ng
1366 ngauss = xtb_control%sto_ng
1368 IF (qs_kind%xtb_parameter%defined)
THEN
1369 IF (xtb_control%sto_flex)
THEN
1371 CALL init_xtb_basis(qs_kind%xtb_parameter, tmp_basis_set, ngauss, ngaussflex)
1373 CALL init_xtb_basis(qs_kind%xtb_parameter, tmp_basis_set, ngauss)
1378 IF (
ASSOCIATED(qs_kind%all_potential))
THEN
1379 DEALLOCATE (qs_kind%all_potential%elec_conf)
1380 DEALLOCATE (qs_kind%all_potential)
1384 IF (qs_kind%xtb_parameter%defined)
THEN
1385 zeff_correction = 0.0_dp
1387 zeff=qs_kind%xtb_parameter%zeff, zeff_correction=zeff_correction)
1388 CALL get_potential(qs_kind%all_potential, alpha_core_charge=alpha)
1389 ccore = qs_kind%xtb_parameter%zeff*sqrt((alpha/
pi)**3)
1390 CALL set_potential(qs_kind%all_potential, ccore_charge=ccore)
1391 qs_kind%xtb_parameter%zeff = qs_kind%xtb_parameter%zeff - zeff_correction
1398 ALLOCATE (xtb_control%rcpair(nkind, nkind))
1399 CALL xtb_pp_radius(qs_kind_set, xtb_control%rcpair, xtb_control%eps_pair, xtb_control%kf)
1401 IF (xtb_control%do_ewald)
THEN
1402 ALLOCATE (ewald_env)
1405 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1408 IF (gfn_type == 0)
THEN
1410 silent=silent, pset=
"EEQ", cell_periodic=cell%perd)
1413 silent=silent, cell_periodic=cell%perd)
1416 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
1417 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
1424 dft_control%qs_control%lri_optbas .OR. &
1434 CALL get_qs_kind_set(qs_kind_set, all_potential_present=all_potential_present)
1435 IF ((dft_control%qs_control%method_id ==
do_method_gpw) .OR. &
1438 IF (all_potential_present)
THEN
1439 cpabort(
"All-electron calculations with GPW, GAPW_XC, and OFGPW are not implemented")
1444 CALL get_qs_kind_set(qs_kind_set, cneo_potential_present=cneo_potential_present)
1445 IF (cneo_potential_present .AND. &
1447 cpabort(
"CNEO calculations require GAPW method")
1451 CALL get_qs_kind_set(qs_kind_set, dft_plus_u_atom_present=dft_control%dft_plus_u)
1454 CALL get_qs_kind_set(qs_kind_set, do_mtlr_present=dft_control%mtlr_u_j)
1456 IF (dft_control%do_admm)
THEN
1460 NULLIFY (aux_fit_basis)
1461 qs_kind => qs_kind_set(ikind)
1462 CALL get_qs_kind(qs_kind, basis_set=aux_fit_basis, basis_type=
"AUX_FIT")
1463 IF (.NOT. (
ASSOCIATED(aux_fit_basis)))
THEN
1465 cpabort(
"AUX_FIT basis set is not defined. ")
1475 e1terms = lri_env%exact_1c_terms
1477 IF (dft_control%qs_control%do_kg)
THEN
1485 NULLIFY (lri_aux_basis)
1486 qs_kind => qs_kind_set(ikind)
1487 CALL get_qs_kind(qs_kind, basis_set=lri_aux_basis, basis_type=
"LRI_AUX")
1488 IF (.NOT. (
ASSOCIATED(lri_aux_basis)))
THEN
1490 CALL cp_warn(__location__,
"Automatic Generation of LRI_AUX basis. "// &
1491 "This is experimental code.")
1500 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_RPA%HF%RI%_SECTION_PARAMETERS_", &
1501 l_val=do_rpa_ri_exx)
1502 IF (do_ri_hfx .OR. do_rpa_ri_exx)
THEN
1506 NULLIFY (ri_hfx_basis)
1507 qs_kind => qs_kind_set(ikind)
1508 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_hfx_basis, &
1509 basis_type=
"RI_HFX")
1510 IF (.NOT. (
ASSOCIATED(ri_hfx_basis)))
THEN
1512 IF (dft_control%do_admm)
THEN
1514 basis_type=
"AUX_FIT", basis_sort=sort_basis)
1517 basis_sort=sort_basis)
1528 NULLIFY (ri_hfx_basis)
1529 qs_kind => qs_kind_set(ikind)
1530 CALL get_qs_kind(qs_kind, basis_set=ri_hfx_basis, basis_type=
"RI_HXC")
1531 IF (.NOT. (
ASSOCIATED(ri_hfx_basis)))
THEN
1540 NULLIFY (harris_env)
1542 l_val=qs_env%harris_method)
1545 CALL set_qs_env(qs_env, harris_env=harris_env)
1547 IF (qs_env%harris_method .AND. qs_env%harris_env%density_source ==
hden_atomic)
THEN
1551 NULLIFY (tmp_basis_set)
1552 qs_kind => qs_kind_set(ikind)
1553 CALL get_qs_kind(qs_kind, basis_set=rhoin_basis, basis_type=
"RHOIN")
1554 IF (.NOT. (
ASSOCIATED(rhoin_basis)))
THEN
1566 IF (mp2_present)
THEN
1570 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
1571 l_val=do_wfc_im_time)
1574 CALL cp_warn(__location__, &
1575 "Low-scaling RPA requires SORT_BASIS EXP keyword (in DFT input section) for good performance")
1580 CALL get_qs_env(qs_env, mp2_env=mp2_env, nkind=nkind)
1581 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_MP2%_SECTION_PARAMETERS_", l_val=do_ri_mp2)
1582 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_SOS_MP2%_SECTION_PARAMETERS_", l_val=do_ri_sos_mp2)
1583 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_RPA%_SECTION_PARAMETERS_", l_val=do_ri_rpa)
1584 IF (do_ri_mp2 .OR. do_ri_sos_mp2 .OR. do_ri_rpa)
THEN
1586 NULLIFY (ri_aux_basis_set)
1587 qs_kind => qs_kind_set(ikind)
1588 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_aux_basis_set, &
1589 basis_type=
"RI_AUX")
1590 IF (.NOT. (
ASSOCIATED(ri_aux_basis_set)))
THEN
1597 qs_env%mp2_env%ri_aux_auto_generated = .true.
1604 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs)
THEN
1608 NULLIFY (ri_xas_basis)
1609 qs_kind => qs_kind_set(ikind)
1610 CALL get_qs_kind(qs_kind, basis_set=ri_xas_basis, basis_type=
"RI_XAS")
1611 IF (.NOT.
ASSOCIATED(ri_xas_basis))
THEN
1620 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, maxlppl=maxlppl, maxlppnl=maxlppnl)
1623 IF (cneo_potential_present)
THEN
1624 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_nuc, basis_type=
"NUC")
1625 maxlgto = max(maxlgto, maxlgto_nuc)
1627 lmax_sphere = dft_control%qs_control%gapw_control%lmax_sphere
1628 IF (lmax_sphere < 0)
THEN
1629 lmax_sphere = 2*maxlgto
1630 dft_control%qs_control%gapw_control%lmax_sphere = lmax_sphere
1632 IF (dft_control%qs_control%method_id ==
do_method_lrigpw .OR. dft_control%qs_control%lri_optbas)
THEN
1633 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"LRI_AUX")
1635 maxlgto = max(maxlgto, maxlgto_lri)
1637 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"RI_HXC")
1638 maxlgto = max(maxlgto, maxlgto_lri)
1640 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs)
THEN
1642 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"RI_XAS")
1643 maxlgto = max(maxlgto, maxlgto_lri)
1645 maxl = max(2*maxlgto, maxlppl, maxlppnl, lmax_sphere) + 1
1657 qs_control => dft_control%qs_control
1662 IF (cneo_potential_present)
THEN
1669 maxl = max(3*maxlgto + 1, 0)
1676 IF (.NOT. dft_control%qs_control%xtb_control%do_tblite)
THEN
1680 qs_kind => qs_kind_set(ikind)
1681 IF (qs_kind%xtb_parameter%defined)
THEN
1682 CALL get_qs_kind(qs_kind, basis_set=tmp_basis_set)
1683 rcut = xtb_control%coulomb_sr_cut
1684 fxx = 2.0_dp*xtb_control%coulomb_sr_eps*qs_kind%xtb_parameter%eta**2
1685 fxx = 0.80_dp*(1.0_dp/fxx)**0.3333_dp
1686 rcut = min(rcut, xtb_control%coulomb_sr_cut)
1687 qs_kind%xtb_parameter%rcut = min(rcut, fxx)
1689 qs_kind%xtb_parameter%rcut = 0.0_dp
1695 IF (.NOT. be_silent)
THEN
1708 particle_set=particle_set, &
1709 local_particles=local_particles, &
1710 molecule_kind_set=molecule_kind_set, &
1711 molecule_set=molecule_set, &
1712 local_molecules=local_molecules, &
1713 force_env_section=qs_env%input)
1716 ALLOCATE (scf_control)
1718 IF (dft_control%qs_control%dftb)
THEN
1719 scf_control%non_selfconsistent = .NOT. dft_control%qs_control%dftb_control%self_consistent
1721 IF (dft_control%qs_control%xtb)
THEN
1722 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
1723 scf_control%non_selfconsistent = .false.
1725 scf_control%non_selfconsistent = (dft_control%qs_control%xtb_control%gfn_type == 0)
1728 IF (qs_env%harris_method)
THEN
1729 scf_control%non_selfconsistent = .true.
1733 IF (scf_control%gce%do_gce)
THEN
1734 IF (.NOT. all(cell%perd == 1))
THEN
1735 cpabort(
"Grand canonical SCF is only implemented for 3D periodic calculations.")
1737 IF (.NOT. scf_control%smear%do_smear)
THEN
1738 cpabort(
"Grand canonical SCF requires smearing.")
1742 CALL cp_abort(__location__, &
1743 "Grand canonical SCF requires Fermi-Dirac, Gaussian, "// &
1744 "Methfessel-Paxton or Marzari-Vanderbilt smearing.")
1746 IF (scf_control%use_ot .OR. .NOT. scf_control%use_diag .OR. &
1747 scf_control%diagonalization%method ==
diag_ot)
THEN
1748 CALL cp_abort(__location__, &
1749 "Grand canonical SCF requires standard diagonalization. "// &
1750 "It is not implemented with OT.")
1753 IF (.NOT. dft_control%qs_control%do_ls_scf)
THEN
1754 SELECT CASE (dft_control%qs_control%method_id)
1757 scf_control%max_scf = dft_control%qs_control%dftb_control%tblite_mixer_iterations
1761 scf_control%max_scf = dft_control%qs_control%xtb_control%tblite_mixer_iterations
1770 has_unit_metric = .false.
1771 IF (dft_control%qs_control%semi_empirical)
THEN
1772 IF (dft_control%qs_control%se_control%orthogonal_basis) has_unit_metric = .true.
1774 IF (dft_control%qs_control%dftb)
THEN
1775 IF (dft_control%qs_control%dftb_control%orthogonal_basis) has_unit_metric = .true.
1777 CALL set_qs_env(qs_env, has_unit_metric=has_unit_metric)
1780 IF (dft_control%mtlr_u_j)
THEN
1781 SELECT CASE (scf_control%density_guess)
1783 IF (dft_control%mtlr_reference_scf_explicit .AND. &
1784 dft_control%mtlr_reference_scf)
THEN
1790 IF (dft_control%mtlr_reference_scf_explicit .AND. &
1791 .NOT. dft_control%mtlr_reference_scf)
THEN
1792 CALL cp_abort(__location__, &
1793 "MTLR_REFERENCE_SCF OFF is incompatible with SCF_GUESS RESTART. "// &
1794 "Use MTLR_REFERENCE_SCF ON or SCF_GUESS ATOMIC.")
1798 cpabort(
"MTLR requires SCF_GUESS RESTART or SCF_GUESS ATOMIC.")
1801 dft_control%mtlr_reference_scf = &
1804 SELECT CASE (dft_control%mtlr_initialization_mode)
1812 cpabort(
"The MTLR SCF initialization mode was not resolved.")
1818 interpolation_method_nr= &
1819 dft_control%qs_control%wf_interpolation_method_nr, &
1820 extrapolation_order=dft_control%qs_control%wf_extrapolation_order, &
1821 has_unit_metric=has_unit_metric)
1825 scf_control=scf_control, &
1826 wf_history=wf_history)
1829 cell_ref=cell_ref, &
1830 use_ref_cell=use_ref_cell, &
1835 CALL set_ks_env(ks_env, dft_control=dft_control)
1837 CALL qs_subsys_set(subsys, local_molecules=local_molecules, &
1838 local_particles=local_particles, cell=cell)
1845 atomic_kind_set=atomic_kind_set, &
1846 dft_control=dft_control, &
1847 scf_control=scf_control)
1851 IF (dft_control%qs_control%do_ls_scf .OR. &
1852 dft_control%qs_control%do_almo_scf)
THEN
1853 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1855 IF (scf_control%use_ot)
THEN
1856 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.true.)
1858 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1863 IF (dft_control%qs_control%xtb_control%do_tblite .AND. .NOT. scf_control%use_ot)
THEN
1864 IF (.NOT. scf_control%smear%do_smear)
THEN
1866 scf_control%smear%do_smear = .true.
1868 scf_control%smear%electronic_temperature = 300._dp/
kelvin
1869 scf_control%smear%eps_fermi_dirac = 1.e-6_dp
1872 dft_control%smear = scf_control%smear%do_smear
1875 IF (.NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb))
THEN
1876 IF (dft_control%apply_period_efield)
THEN
1877 CALL get_qs_env(qs_env=qs_env, requires_mo_derivs=orb_gradient)
1878 IF (.NOT. orb_gradient)
THEN
1879 CALL cp_abort(__location__,
"Periodic Efield needs orbital gradient and direct optimization."// &
1880 " Use the OT optimization method.")
1882 IF (dft_control%smear)
THEN
1883 CALL cp_abort(__location__,
"Periodic Efield needs equal occupation numbers."// &
1884 " Smearing option is not possible.")
1893 NULLIFY (rho_atom_set)
1894 gapw_control => dft_control%qs_control%gapw_control
1895 CALL init_rho_atom(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
1896 CALL set_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
1898 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, natom=natom)
1900 CALL init_rho0(local_rho_set, qs_env, gapw_control)
1907 IF (gapw_control%accurate_xcint)
THEN
1908 cpassert(gapw_control%oweights >= 0)
1909 cpassert(.NOT.
ASSOCIATED(gapw_control%aw))
1911 ALLOCATE (gapw_control%aw(nkind))
1912 alpha = gapw_control%aweights
1914 qs_kind => qs_kind_set(ikind)
1915 CALL get_qs_kind(qs_kind, hard_radius=rc, paw_atom=paw_atom)
1917 gapw_control%aw(ikind) = alpha*(1.2_dp/rc)**2
1919 gapw_control%aw(ikind) = 0.0_dp
1929 ELSE IF (dft_control%qs_control%semi_empirical)
THEN
1930 NULLIFY (se_store_int_env, se_nddo_mpole, se_nonbond_env)
1931 natom =
SIZE(particle_set)
1933 se_control => dft_control%qs_control%se_control
1938 SELECT CASE (dft_control%qs_control%method_id)
1944 CALL init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
1949 IF (se_control%do_ewald .OR. se_control%do_ewald_gks)
THEN
1950 ALLOCATE (ewald_env)
1953 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1956 "PRINT%GRID_INFORMATION")
1961 print_section=print_section)
1967 IF (se_control%do_ewald)
THEN
1968 CALL ewald_env_get(ewald_env, max_multipole=se_control%max_multipole)
1972 ALLOCATE (se_nonbond_env)
1974 do_electrostatics=.true., verlet_skin=verlet_skin, ewald_rcut=ewald_rcut, &
1975 ei_scale14=0.0_dp, vdw_scale14=0.0_dp, shift_cutoff=.false.)
1978 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw, &
1979 se_nonbond_env=se_nonbond_env, se_nddo_mpole=se_nddo_mpole)
1982 dft_control%qs_control%method_id)
1985 CALL se_taper_create(se_taper, se_control%integral_screening, se_control%do_ewald, &
1986 se_control%taper_cou, se_control%range_cou, &
1987 se_control%taper_exc, se_control%range_exc, &
1988 se_control%taper_scr, se_control%range_scr, &
1989 se_control%taper_lrc, se_control%range_lrc)
1993 CALL set_qs_env(qs_env, se_store_int_env=se_store_int_env)
1997 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
2003 ALLOCATE (dispersion_env)
2004 NULLIFY (xc_section)
2008 NULLIFY (pp_section)
2012 NULLIFY (nl_section)
2018 CALL cp_warn(__location__, &
2019 "SKALA versions 1.0 and 1.1 were optimized together with a D3(BJ) "// &
2020 "dispersion correction, but no dispersion correction is active. "// &
2021 "Add one, e.g. VDW_POTENTIAL/POTENTIAL_TYPE PAIR_POTENTIAL with "// &
2022 "PAIR_POTENTIAL/TYPE DFTD3(BJ), REFERENCE_FUNCTIONAL SKALA, and "// &
2023 "PARAMETER_FILE_NAME dftd3.dat.")
2025 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2026 ELSE IF (dft_control%qs_control%method_id ==
do_method_dftb)
THEN
2027 ALLOCATE (dispersion_env)
2029 dispersion_env%doabc = .false.
2030 dispersion_env%c9cnst = .false.
2031 dispersion_env%lrc = .false.
2032 dispersion_env%srb = .false.
2033 dispersion_env%verbose = .false.
2034 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
2035 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
2036 dispersion_env%d3_exclude_pair)
2037 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel_table, &
2038 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
2039 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
2040 IF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d3)
THEN
2043 dispersion_env%eps_cn = dftb_control%epscn
2044 dispersion_env%s6 = dftb_control%sd3(1)
2045 dispersion_env%sr6 = dftb_control%sd3(2)
2046 dispersion_env%s8 = dftb_control%sd3(3)
2047 dispersion_env%domol = .false.
2048 dispersion_env%kgc8 = 0._dp
2049 dispersion_env%rc_disp = dftb_control%rcdisp
2050 dispersion_env%exp_pre = 0._dp
2051 dispersion_env%scaling = 0._dp
2052 dispersion_env%nd3_exclude_pair = 0
2053 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
2055 ELSE IF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d3bj)
THEN
2058 dispersion_env%eps_cn = dftb_control%epscn
2059 dispersion_env%s6 = dftb_control%sd3bj(1)
2060 dispersion_env%a1 = dftb_control%sd3bj(2)
2061 dispersion_env%s8 = dftb_control%sd3bj(3)
2062 dispersion_env%a2 = dftb_control%sd3bj(4)
2063 dispersion_env%domol = .false.
2064 dispersion_env%kgc8 = 0._dp
2065 dispersion_env%rc_disp = dftb_control%rcdisp
2066 dispersion_env%exp_pre = 0._dp
2067 dispersion_env%scaling = 0._dp
2068 dispersion_env%nd3_exclude_pair = 0
2069 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
2071 ELSE IF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d2)
THEN
2074 dispersion_env%exp_pre = dftb_control%exp_pre
2075 dispersion_env%scaling = dftb_control%scaling
2076 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
2077 dispersion_env%rc_disp = dftb_control%rcdisp
2082 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2083 ELSE IF (dft_control%qs_control%method_id ==
do_method_xtb)
THEN
2084 IF (.NOT. (dft_control%qs_control%xtb_control%do_tblite))
THEN
2085 ALLOCATE (dispersion_env)
2087 dispersion_env%doabc = .false.
2088 dispersion_env%c9cnst = .false.
2089 dispersion_env%lrc = .false.
2090 dispersion_env%srb = .false.
2091 dispersion_env%verbose = .false.
2092 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, &
2093 dispersion_env%r0ab, dispersion_env%rcov, &
2094 dispersion_env%r2r4, dispersion_env%cn, &
2095 dispersion_env%cnkind, dispersion_env%cnlist, &
2096 dispersion_env%d3_exclude_pair)
2097 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel_table, &
2098 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
2099 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
2101 dispersion_env%eps_cn = xtb_control%epscn
2102 dispersion_env%s6 = xtb_control%s6
2103 dispersion_env%s8 = xtb_control%s8
2104 dispersion_env%a1 = xtb_control%a1
2105 dispersion_env%a2 = xtb_control%a2
2106 dispersion_env%domol = .false.
2107 dispersion_env%kgc8 = 0._dp
2108 dispersion_env%rc_disp = xtb_control%rcdisp
2109 dispersion_env%rc_d4 = xtb_control%rcdisp
2110 dispersion_env%exp_pre = 0._dp
2111 dispersion_env%scaling = 0._dp
2112 dispersion_env%nd3_exclude_pair = 0
2113 dispersion_env%parameter_file_name = xtb_control%dispersion_parameter_file
2115 SELECT CASE (xtb_control%vdw_type)
2122 dispersion_env%ref_functional =
"none"
2125 dispersion_env%eeq_sparam = xtb_control%eeq_sparam
2127 dispersion_env, para_env=para_env)
2128 dispersion_env%cnfun = 2
2132 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2134 ELSE IF (dft_control%qs_control%semi_empirical)
THEN
2135 ALLOCATE (dispersion_env)
2137 dispersion_env%doabc = .false.
2138 dispersion_env%c9cnst = .false.
2139 dispersion_env%lrc = .false.
2140 dispersion_env%srb = .false.
2141 dispersion_env%verbose = .false.
2142 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
2143 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
2144 dispersion_env%d3_exclude_pair)
2145 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel_table, &
2146 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
2147 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
2148 IF (se_control%dispersion)
THEN
2151 dispersion_env%eps_cn = se_control%epscn
2152 dispersion_env%s6 = se_control%sd3(1)
2153 dispersion_env%sr6 = se_control%sd3(2)
2154 dispersion_env%s8 = se_control%sd3(3)
2155 dispersion_env%domol = .false.
2156 dispersion_env%kgc8 = 0._dp
2157 dispersion_env%rc_disp = se_control%rcdisp
2158 dispersion_env%exp_pre = 0._dp
2159 dispersion_env%scaling = 0._dp
2160 dispersion_env%nd3_exclude_pair = 0
2161 dispersion_env%parameter_file_name = se_control%dispersion_parameter_file
2166 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2170 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
2177 NULLIFY (xc_section)
2188 IF (
PRESENT(charge))
THEN
2189 dft_control%charge = charge
2190 nelectron = nelectron - dft_control%charge
2192 nelectron = nelectron - dft_control%charge
2195 IF (dft_control%multiplicity == 0)
THEN
2196 IF (
modulo(nelectron, 2) == 0)
THEN
2197 dft_control%multiplicity = 1
2199 dft_control%multiplicity = 2
2203 multiplicity = dft_control%multiplicity
2205 IF (
PRESENT(multip))
THEN
2206 multiplicity = multip
2209 IF ((dft_control%nspins < 1) .OR. (dft_control%nspins > 2))
THEN
2210 cpabort(
"nspins should be 1 or 2 for the time being ...")
2213 IF ((
modulo(nelectron, 2) /= 0) .AND. (dft_control%nspins == 1))
THEN
2214 IF (.NOT. dft_control%qs_control%ofgpw .AND. .NOT. dft_control%smear)
THEN
2215 cpabort(
"Use the LSD option for an odd number of electrons")
2220 IF (dft_control%do_xas_calculation)
THEN
2221 IF (dft_control%nspins == 1)
THEN
2222 cpabort(
"Use the LSD option for XAS with transition potential")
2232 IF (dft_control%qs_control%ofgpw)
THEN
2234 IF (dft_control%nspins == 1)
THEN
2236 nelectron_spin(1) = nelectron
2237 nelectron_spin(2) = 0
2241 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
2242 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
2243 IF (nelectron_spin(1) < 0)
THEN
2244 cpabort(
"LSD: too few electrons for this multiplicity")
2246 maxocc = maxval(nelectron_spin)
2247 n_mo(1) = min(nelectron_spin(1), 1)
2248 n_mo(2) = min(nelectron_spin(2), 1)
2253 IF (dft_control%nspins == 1)
THEN
2255 nelectron_spin(1) = nelectron
2256 nelectron_spin(2) = 0
2257 IF (
modulo(nelectron, 2) == 0)
THEN
2258 n_mo(1) = nelectron/2
2260 n_mo(1) = int(nelectron/2._dp) + 1
2268 IF (
modulo(nelectron + multiplicity - 1, 2) /= 0)
THEN
2269 cpabort(
"LSD: try to use a different multiplicity")
2272 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
2273 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
2275 IF (nelectron_spin(2) < 0)
THEN
2276 cpabort(
"LSD: too few electrons for this multiplicity")
2279 n_mo(1) = nelectron_spin(1)
2280 n_mo(2) = nelectron_spin(2)
2289 qs_env%total_zeff_corr = total_zeff_corr
2293 nelectron_total=nelectron, &
2294 nelectron_spin=nelectron_spin)
2296 IF (any(scf_control%added_mos_auto) .AND. .NOT. scf_control%smear%do_smear)
THEN
2297 cpabort(
"ADDED_MOS AUTO requires smearing")
2299 IF (any(scf_control%added_mos_auto) .AND. .NOT. do_kpoints)
THEN
2300 cpabort(
"ADDED_MOS AUTO currently requires a K-point calculation")
2303 IF (scf_control%smear%do_smear .AND. any(scf_control%added_mos_auto))
THEN
2304 n_mo_auto = max(4, ceiling(0.2_dp*real(maxval(n_mo(1:dft_control%nspins)), kind=
dp)))
2305 IF (dft_control%nspins == 2 .AND. all(scf_control%added_mos_auto(1:2)))
THEN
2306 n_mo_target = min(n_ao, maxval(n_mo(1:2)) + n_mo_auto)
2308 scf_control%added_mos(ispin) = max(0, n_mo_target - n_mo(ispin))
2309 scf_control%added_mos_auto(ispin) = .true.
2312 DO ispin = 1, dft_control%nspins
2313 IF (scf_control%added_mos_auto(ispin))
THEN
2314 scf_control%added_mos(ispin) = min(n_mo_auto, max(0, n_ao - n_mo(ispin)))
2315 scf_control%added_mos_auto(ispin) = .true.
2319 IF (output_unit > 0)
THEN
2320 IF (dft_control%nspins == 2)
THEN
2321 WRITE (unit=output_unit, fmt=
"(T2,A,2I5)") &
2322 "SCF smearing: automatically selected ADDED_MOS:", &
2323 scf_control%added_mos(1:dft_control%nspins)
2325 WRITE (unit=output_unit, fmt=
"(T2,A,I0)") &
2326 "SCF smearing: automatically selected ADDED_MOS: ", scf_control%added_mos(1)
2334 cpassert(
ASSOCIATED(mo_index_range))
2335 IF (all(mo_index_range > 0))
THEN
2336 IF (mo_index_range(1) > mo_index_range(2))
THEN
2337 CALL cp_abort(__location__, &
2338 "The upper orbital index ("// &
2340 ") of the MO_INDEX_RANGE should be equal or larger "// &
2341 "than the lower orbital index ("// &
2346 IF (.NOT. scf_control%use_ot)
THEN
2347 scf_control%added_mos(1) = min(max(scf_control%added_mos(1), &
2348 mo_index_range(2) - n_mo(1)), &
2350 IF (dft_control%nspins == 2)
THEN
2351 scf_control%added_mos(2) = min(max(scf_control%added_mos(2), &
2352 mo_index_range(2) - n_mo(2)), &
2356 ELSE IF (mo_index_range(2) < 0)
THEN
2357 IF (.NOT. scf_control%use_ot)
THEN
2359 scf_control%added_mos(1) = n_ao - n_mo(1)
2360 IF (dft_control%nspins == 2)
THEN
2362 scf_control%added_mos(2) = n_ao - n_mo(2)
2369 nlumo_required = max(nlumo_dos, nlumo_molden)
2370 IF (nlumo_dos == -1 .OR. nlumo_molden == -1) nlumo_required = -1
2371 IF (.NOT. scf_control%use_ot .AND. nlumo_required /= 0)
THEN
2372 IF (nlumo_required == -1)
THEN
2373 IF (scf_control%added_mos(1) /= -1 .OR. &
2374 (dft_control%nspins == 2 .AND. scf_control%added_mos(2) /= -1))
THEN
2375 CALL cp_warn(__location__, &
2376 "NLUMO requested by DOS/PDOS/Molden exceeds SCF%ADDED_MOS. "// &
2377 "For diagonalization calculations, SCF%ADDED_MOS is "// &
2378 "increased to provide the requested unoccupied orbitals.")
2380 scf_control%added_mos(1) = -1
2381 IF (dft_control%nspins == 2) scf_control%added_mos(2) = -1
2383 IF (scf_control%added_mos(1) >= 0 .AND. &
2384 nlumo_required > scf_control%added_mos(1))
THEN
2385 CALL cp_warn(__location__, &
2386 "NLUMO requested by DOS/PDOS/Molden exceeds SCF%ADDED_MOS. "// &
2387 "For diagonalization calculations, SCF%ADDED_MOS is "// &
2388 "increased to provide the requested unoccupied orbitals.")
2389 scf_control%added_mos(1) = nlumo_required
2391 IF (dft_control%nspins == 2 .AND. scf_control%added_mos(2) > 0 .AND. &
2392 nlumo_required > scf_control%added_mos(2))
THEN
2393 scf_control%added_mos(2) = nlumo_required
2398 IF (dft_control%nspins == 2)
THEN
2400 IF (scf_control%added_mos(2) == 0)
THEN
2401 n_mo_add = scf_control%added_mos(1)
2403 n_mo_add = scf_control%added_mos(2)
2405 IF (n_mo_add < 0) n_mo_add = n_ao - n_mo(2)
2406 IF (n_mo_add > n_ao - n_mo(2))
THEN
2407 cpwarn(
"More ADDED_MOs requested for beta spin than available.")
2409 scf_control%added_mos(2) = min(n_mo_add, n_ao - n_mo(2))
2410 n_mo(2) = n_mo(2) + scf_control%added_mos(2)
2421 IF (dft_control%qs_control%xtb_control%do_tblite .AND. .NOT. scf_control%use_ot)
THEN
2422 scf_control%added_mos(1) = n_ao - n_mo(1)
2423 ELSE IF (scf_control%added_mos(1) < 0)
THEN
2424 scf_control%added_mos(1) = n_ao - n_mo(1)
2425 ELSE IF (scf_control%added_mos(1) > n_ao - n_mo(1))
THEN
2426 CALL cp_warn(__location__, &
2427 "More added MOs requested than available. "// &
2428 "The full set of unoccupied MOs will be used. "// &
2429 "Use 'ADDED_MOS -1' to always use all available MOs "// &
2430 "and to get rid of this warning.")
2432 scf_control%added_mos(1) = min(scf_control%added_mos(1), n_ao - n_mo(1))
2433 n_mo(1) = n_mo(1) + scf_control%added_mos(1)
2435 IF (dft_control%nspins == 2)
THEN
2436 IF (n_mo(2) > n_mo(1))
THEN
2437 CALL cp_warn(__location__, &
2438 "More beta than alpha MOs requested. "// &
2439 "The number of beta MOs will be reduced to the number alpha MOs.")
2441 n_mo(2) = min(n_mo(1), n_mo(2))
2442 cpassert(n_mo(1) >= nelectron_spin(1))
2443 cpassert(n_mo(2) >= nelectron_spin(2))
2447 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
2448 IF (do_kpoints .AND. dft_control%nspins == 2)
THEN
2450 IF (n_mo(2) /= n_mo(1))
THEN
2451 CALL cp_warn(__location__, &
2452 "Kpoints: Different number of MOs requested. "// &
2453 "The number of beta MOs will be set to the number alpha MOs.")
2456 cpassert(n_mo(1) >= nelectron_spin(1))
2457 cpassert(n_mo(2) >= nelectron_spin(2))
2461 IF (scf_control%smear%do_smear)
THEN
2462 IF (scf_control%added_mos(1) == 0)
THEN
2463 cpabort(
"Extra MOs (ADDED_MOS) are required for smearing")
2468 IF ((scf_control%level_shift /= 0.0_dp) .OR. &
2469 (scf_control%diagonalization%eps_jacobi /= 0.0_dp) .OR. &
2470 (dft_control%roks .AND. (.NOT. scf_control%use_ot)))
THEN
2475 IF (dft_control%roks .AND. (.NOT. scf_control%use_ot))
THEN
2477 cpwarn(
"General ROKS scheme is not yet tested!")
2479 IF (scf_control%smear%do_smear)
THEN
2480 CALL cp_abort(__location__, &
2481 "The options ROKS and SMEAR are not compatible. "// &
2482 "Try UKS instead of ROKS")
2485 IF (dft_control%low_spin_roks)
THEN
2486 SELECT CASE (dft_control%qs_control%method_id)
2489 CALL cp_abort(__location__, &
2490 "xTB/DFTB methods are not compatible with low spin ROKS.")
2493 CALL cp_abort(__location__, &
2494 "SE methods are not compatible with low spin ROKS.")
2502 IF (dft_control%restricted .AND. (output_unit > 0))
THEN
2504 WRITE (output_unit, *)
""
2505 WRITE (output_unit, *)
" **************************************"
2506 WRITE (output_unit, *)
" restricted calculation cutting corners"
2507 WRITE (output_unit, *)
" experimental feature, check code "
2508 WRITE (output_unit, *)
" **************************************"
2512 IF (dft_control%qs_control%do_ls_scf)
THEN
2515 ALLOCATE (mos(dft_control%nspins))
2516 DO ispin = 1, dft_control%nspins
2520 nelectron=nelectron_spin(ispin), &
2521 n_el_f=real(nelectron_spin(ispin),
dp), &
2523 flexible_electron_count=dft_control%relax_multiplicity)
2530 IF (dft_control%switch_surf_dip)
THEN
2531 ALLOCATE (mos_last_converged(dft_control%nspins))
2532 DO ispin = 1, dft_control%nspins
2536 nelectron=nelectron_spin(ispin), &
2537 n_el_f=real(nelectron_spin(ispin),
dp), &
2539 flexible_electron_count=dft_control%relax_multiplicity)
2541 CALL set_qs_env(qs_env, mos_last_converged=mos_last_converged)
2544 IF (.NOT. be_silent)
THEN
2546 IF (
PRESENT(multip))
THEN
2547 dft_control%multiplicity = multiplicity
2552 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
2559 (.NOT. dft_control%qs_control%xtb_control%do_tblite)) .OR. &
2561 CALL get_qs_env(qs_env, dispersion_env=dispersion_env)
2569 IF (dft_control%do_admm)
THEN
2574 IF (dft_control%do_xas_calculation)
THEN
2589 CALL write_total_numbers(qs_kind_set, particle_set, qs_env%input)
2604 IF ((.NOT. dft_control%qs_control%do_ls_scf) .AND. &
2605 (.NOT. dft_control%qs_control%do_almo_scf))
THEN
2615 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, rho0_mpole=rho0_mpole)
2619 IF (output_unit > 0)
CALL m_flush(output_unit)
2620 CALL timestop(handle)
2622 END SUBROUTINE qs_init_subsys
2632 SUBROUTINE write_total_numbers(qs_kind_set, particle_set, force_env_section)
2634 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
2635 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
2636 TYPE(section_vals_type),
POINTER :: force_env_section
2638 INTEGER :: maxlgto, maxlppl, maxlppnl, natom, &
2639 natom_q, ncgf, nkind, nkind_q, npgf, &
2640 nset, nsgf, nshell, output_unit
2641 TYPE(cp_logger_type),
POINTER :: logger
2644 logger => cp_get_default_logger()
2645 output_unit = cp_print_key_unit_nr(logger, force_env_section,
"PRINT%TOTAL_NUMBERS", &
2648 IF (output_unit > 0)
THEN
2649 natom =
SIZE(particle_set)
2650 nkind =
SIZE(qs_kind_set)
2652 CALL get_qs_kind_set(qs_kind_set, &
2662 WRITE (unit=output_unit, fmt=
"(/,/,T2,A)") &
2663 "TOTAL NUMBERS AND MAXIMUM NUMBERS"
2665 IF (nset + npgf + ncgf > 0)
THEN
2666 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
2667 "Total number of", &
2668 "- Atomic kinds: ", nkind, &
2669 "- Atoms: ", natom, &
2670 "- Shell sets: ", nset, &
2671 "- Shells: ", nshell, &
2672 "- Primitive Cartesian functions: ", npgf, &
2673 "- Cartesian basis functions: ", ncgf, &
2674 "- Spherical basis functions: ", nsgf
2675 ELSE IF (nshell + nsgf > 0)
THEN
2676 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
2677 "Total number of", &
2678 "- Atomic kinds: ", nkind, &
2679 "- Atoms: ", natom, &
2680 "- Shells: ", nshell, &
2681 "- Spherical basis functions: ", nsgf
2683 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
2684 "Total number of", &
2685 "- Atomic kinds: ", nkind, &
2689 IF ((maxlppl > -1) .AND. (maxlppnl > -1))
THEN
2690 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T75,I6))") &
2691 "Maximum angular momentum of the", &
2692 "- Orbital basis functions: ", maxlgto, &
2693 "- Local part of the GTH pseudopotential: ", maxlppl, &
2694 "- Non-local part of the GTH pseudopotential: ", maxlppnl
2695 ELSE IF (maxlppl > -1)
THEN
2696 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T75,I6))") &
2697 "Maximum angular momentum of the", &
2698 "- Orbital basis functions: ", maxlgto, &
2699 "- Local part of the GTH pseudopotential: ", maxlppl
2701 WRITE (unit=output_unit, fmt=
"(/,T3,A,T75,I6)") &
2702 "Maximum angular momentum of the orbital basis functions: ", maxlgto
2706 CALL get_qs_kind_set(qs_kind_set, &
2713 basis_type=
"LRI_AUX")
2714 IF (nset + npgf + ncgf > 0)
THEN
2715 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
2716 "LRI_AUX Basis: ", &
2717 "Total number of", &
2718 "- Shell sets: ", nset, &
2719 "- Shells: ", nshell, &
2720 "- Primitive Cartesian functions: ", npgf, &
2721 "- Cartesian basis functions: ", ncgf, &
2722 "- Spherical basis functions: ", nsgf
2723 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
2724 " Maximum angular momentum ", maxlgto
2728 CALL get_qs_kind_set(qs_kind_set, &
2735 basis_type=
"RI_HXC")
2736 IF (nset + npgf + ncgf > 0)
THEN
2737 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
2739 "Total number of", &
2740 "- Shell sets: ", nset, &
2741 "- Shells: ", nshell, &
2742 "- Primitive Cartesian functions: ", npgf, &
2743 "- Cartesian basis functions: ", ncgf, &
2744 "- Spherical basis functions: ", nsgf
2745 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
2746 " Maximum angular momentum ", maxlgto
2750 CALL get_qs_kind_set(qs_kind_set, &
2757 basis_type=
"AUX_FIT")
2758 IF (nset + npgf + ncgf > 0)
THEN
2759 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
2760 "AUX_FIT ADMM-Basis: ", &
2761 "Total number of", &
2762 "- Shell sets: ", nset, &
2763 "- Shells: ", nshell, &
2764 "- Primitive Cartesian functions: ", npgf, &
2765 "- Cartesian basis functions: ", ncgf, &
2766 "- Spherical basis functions: ", nsgf
2767 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
2768 " Maximum angular momentum ", maxlgto
2772 CALL get_qs_kind_set(qs_kind_set, &
2782 IF (nset + npgf + ncgf > 0)
THEN
2783 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
2784 "Nuclear Basis: ", &
2785 "Total number of", &
2786 "- Quantum atomic kinds: ", nkind_q, &
2787 "- Quantum atoms: ", natom_q, &
2788 "- Shell sets: ", nset, &
2789 "- Shells: ", nshell, &
2790 "- Primitive Cartesian functions: ", npgf, &
2791 "- Cartesian basis functions: ", ncgf, &
2792 "- Spherical basis functions: ", nsgf
2793 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
2794 " Maximum angular momentum ", maxlgto
2798 CALL cp_print_key_finished_output(output_unit, logger, force_env_section, &
2799 "PRINT%TOTAL_NUMBERS")
2801 END SUBROUTINE write_total_numbers
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
subroutine, public almo_scf_env_create(qs_env)
Creation and basic initialization of the almo environment.
calculate the orbitals for a given atomic kind type
subroutine, public calculate_atomic_relkin(atomic_kind, qs_kind, rel_control, rtmat)
...
Define the atomic kind types and their sub types.
Automatic generation of auxiliary basis sets of different kind.
subroutine, public create_lri_aux_basis_set(lri_aux_basis_set, qs_kind, basis_cntrl, exact_1c_terms, tda_kernel)
Create a LRI_AUX basis set using some heuristics.
subroutine, public create_ri_aux_basis_set(ri_aux_basis_set, qs_kind, basis_cntrl, basis_type, basis_sort)
Create a RI_AUX basis set using some heuristics.
subroutine, public add_basis_set_to_container(container, basis_set, basis_set_type)
...
integer, parameter, public basis_sort_zet
subroutine, public deallocate_gto_basis_set(gto_basis_set)
...
subroutine, public create_primitive_basis_set(basis_set, pbasis, lmax)
...
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public cp2kqs2020
integer, save, public iannuzzi2007
integer, save, public iannuzzi2006
Handles all functions related to the CELL.
methods related to the blacs parallel environment
subroutine, public cp_blacs_env_release(blacs_env)
releases the given blacs_env
subroutine, public cp_blacs_env_create(blacs_env, para_env, blacs_grid_layout, blacs_repeatable, row_major, grid_2d)
allocates and initializes a type that represent a blacs context
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Utilities to set up the control types.
subroutine, public write_qs_control(qs_control, dft_section)
Purpose: Write the QS control parameters to the output unit.
subroutine, public read_rixs_control(rixs_control, rixs_section, qs_control)
Reads the input and stores in the rixs_control_type.
subroutine, public read_qs_section(qs_control, qs_section, cell)
...
subroutine, public read_tddfpt2_control(t_control, t_section, qs_control)
Read TDDFPT-related input parameters.
subroutine, public read_dft_control(dft_control, dft_section, cell)
...
subroutine, public write_admm_control(admm_control, dft_section)
Write the ADMM control parameters to the output unit.
subroutine, public write_dft_control(dft_control, dft_section)
Write the DFT control parameters to the output unit.
subroutine, public read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
reads the input parameters needed for ddapc.
subroutine, public read_mgrid_section(qs_control, dft_section)
...
contains information regarding the decoupling/recoupling method of Bloechl
subroutine, public cp_ddapc_ewald_create(cp_ddapc_ewald, qmmm_decoupl, qm_cell, force_env_section, subsys_section, para_env)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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...
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,...
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, file_access)
...
types that represent a subsys, i.e. a part of the system
subroutine, public write_symmetry(particle_set, cell, input_section)
Write symmetry information to output.
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
subroutine, public distribution_1d_release(distribution_1d)
releases the given distribution_1d
Distribution methods for atoms, particles, or molecules.
subroutine, public distribute_molecules_1d(atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, force_env_section, prev_molecule_kind_set, prev_local_molecules)
Distribute molecules and particles.
Types needed for a for a Energy Correction.
Energy correction environment setup and handling.
subroutine, public ec_write_input(ec_env)
Print out the energy correction input section.
subroutine, public ec_env_create(qs_env, ec_env, dft_section, ec_section)
Allocates and intitializes ec_env.
Definition and initialisation of the et_coupling data type.
subroutine, public et_coupling_create(et_coupling)
...
subroutine, public ewald_env_set(ewald_env, ewald_type, alpha, epsilon, eps_pol, gmax, ns_max, precs, o_spline, para_env, poisson_section, interaction_cutoffs, cell_hmat)
Purpose: Set the EWALD environment.
subroutine, public ewald_env_create(ewald_env, para_env)
allocates and intitializes a ewald_env
subroutine, public read_ewald_section(ewald_env, ewald_section)
Purpose: read the EWALD section.
subroutine, public read_ewald_section_tb(ewald_env, ewald_section, hmat, silent, pset, cell_periodic)
Purpose: read the EWALD section for TB methods.
subroutine, public ewald_env_get(ewald_env, ewald_type, alpha, eps_pol, epsilon, gmax, ns_max, o_spline, group, para_env, poisson_section, precs, rcut, do_multipoles, max_multipole, do_ipol, max_ipol_iter, interaction_cutoffs, cell_hmat)
Purpose: Get the EWALD environment.
subroutine, public ewald_pw_grid_update(ewald_pw, ewald_env, cell_hmat)
Rescales pw_grids for given box, if necessary.
subroutine, public ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section)
creates the structure ewald_pw_type
Types for excited states potential energies.
subroutine, public exstate_create(ex_env, excited_state, dft_section)
Allocates and intitializes exstate_env.
Definition of the atomic potential types.
subroutine, public fist_nonbond_env_create(fist_nonbond_env, atomic_kind_set, potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, vdw_scale14, shift_cutoff)
allocates and intitializes a fist_nonbond_env
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
subroutine, public init_md_ftable(nmax)
Initialize a table of F_n(t) values in the range 0 <= t <= 12 with a stepsize of 0....
Define type storing the global information of a run. Keep the amount of stored data small....
subroutine, public init_coulomb_local(hartree_local, natom)
...
Types and set/get functions for HFX.
subroutine, public hfx_create(x_data, para_env, hfx_section, atomic_kind_set, qs_kind_set, particle_set, dft_control, cell, orb_basis, ri_basis, nelectron_total, nkp_grid)
This routine allocates and initializes all types in hfx_data
subroutine, public compare_hfx_sections(hfx_section1, hfx_section2, is_identical, same_except_frac)
Compares the non-technical parts of two HFX input section and check whether they are the same Ignore ...
Routines for a Kim-Gordon-like partitioning into molecular subunits.
subroutine, public kg_env_create(qs_env, kg_env, qs_kind_set, input)
Allocates and intitializes kg_env.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Routines needed for kpoint calculation.
subroutine, public kpoint_initialize_mos(kpoint, mos, added_mos, for_aux_fit)
Initialize a set of MOs and density matrix for each kpoint (kpoint group).
subroutine, public kpoint_initialize(kpoint, particle_set, cell)
Generate the kpoints and initialize the kpoint environment.
subroutine, public kpoint_env_initialize(kpoint, para_env, blacs_env, with_aux_fit)
Initialize the kpoint environment.
Types and basic routines needed for a kpoint calculation.
subroutine, public set_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym, inversion_symmetry_only, symmetry_backend, symmetry_reduction_method, gamma_centered)
Set information in a kpoint environment.
subroutine, public kpoint_reset_initialization(kpoint)
Reset all data derived from a concrete k-point initialization. Input options such as the scheme,...
subroutine, public write_kpoint_info(kpoint, iounit, dft_section)
Write information on the kpoints to output.
subroutine, public get_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym, inversion_symmetry_only, symmetry_backend, symmetry_reduction_method, gamma_centered, lattice_fft)
Retrieve information from a kpoint environment.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
subroutine, public read_kpoint_section(kpoint, kpoint_section, a_vec, cell)
Read the kpoint input section.
initializes the environment for lri lri : local resolution of the identity
subroutine, public lri_env_init(lri_env, lri_section)
initializes the lri env
subroutine, public lri_env_basis(ri_type, qs_env, lri_env, qs_kind_set)
initializes the lri env
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Interface to the message passing library MPI.
Define the molecule kind structure types and the corresponding functionality.
subroutine, public write_molecule_kind_set(molecule_kind_set, subsys_section)
Write a moleculeatomic kind set data set to the output unit.
Define the data structure for the molecule information.
Types needed for MP2 calculations.
subroutine, public read_mp2_section(input, mp2_env)
...
Types needed for MP2 calculations.
subroutine, public mp2_env_create(mp2_env)
...
Multipole structure: for multipole (fixed and induced) in FF based MD.
integer, parameter, public do_multipole_none
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
Define methods related to particle_type.
subroutine, public write_qs_particle_coordinates(particle_set, qs_kind_set, subsys_section, label)
Write the atomic coordinates to the output unit.
subroutine, public write_structure_data(particle_set, cell, input_section)
Write structure data requested by a separate structure data input section to the output unit....
subroutine, public write_particle_distances(particle_set, cell, subsys_section)
Write the matrix of the particle distances to the output unit.
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public kelvin
container for various plainwaves related things
subroutine, public qs_basis_rotation(qs_env, kpoints, basis_type, storage_type)
Construct basis set rotation matrices.
subroutine, public qs_dftb_param_init(atomic_kind_set, qs_kind_set, dftb_control, dftb_potential, subsys_section, para_env)
...
Definition of the DFTB parameter types.
Working with the DFTB parameter types.
subroutine, public get_dftb_atom_param(dftb_parameter, name, typ, defined, z, zeff, natorb, lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
...
Calculation of non local dispersion functionals Some routines adapted from: Copyright (C) 2001-2009 Q...
subroutine, public qs_dispersion_nonloc_init(dispersion_env, para_env)
...
Calculation of dispersion using pair potentials.
subroutine, public qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
...
Definition of disperson types for DFT calculations.
Set disperson types for DFT calculations.
subroutine, public qs_dispersion_env_set(dispersion_env, xc_section)
...
subroutine, public qs_write_dispersion(qs_env, dispersion_env, ounit)
...
subroutine, public allocate_qs_energy(qs_energy)
Allocate and/or initialise a Quickstep energy data structure.
qs_environment methods that use many other modules
subroutine, public qs_env_setup(qs_env)
initializes various components of the qs_env, that need only atomic_kind_set, cell,...
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, mimic, 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_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, 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, matrix_vhxc, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, harris_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, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, mimic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, rhoz_cneo_set, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Set the QUICKSTEP environment.
subroutine, public qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section, silent, multip, charge)
Read the input and the database files for the setup of the QUICKSTEP environment.
Definition of gCP types for DFT calculations.
Set disperson types for DFT calculations.
subroutine, public qs_gcp_env_set(gcp_env, xc_section)
...
subroutine, public qs_gcp_init(qs_env, gcp_env)
...
Types needed for a for a Harris model calculation.
subroutine, public harris_rhoin_init(rhoin, basis_type, qs_kind_set, atomic_kind_set, local_particles, nspin)
...
Harris method environment setup and handling.
subroutine, public harris_write_input(harris_env)
Print out the Harris method input section.
subroutine, public harris_env_create(qs_env, harris_env, harris_section)
Allocates and intitializes harris_env.
Calculate the interaction radii for the operator matrix calculation.
subroutine, public write_pgf_orb_radii(basis, atomic_kind_set, qs_kind_set, subsys_section)
Write the orbital basis function radii to the output unit.
subroutine, public write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the one center projector.
subroutine, public write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the projector functions of the Goedecker pseudopotential (GTH, non-local part) to ...
subroutine, public init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
...
subroutine, public write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the exponential functions of the Goedecker pseudopotential (GTH,...
subroutine, public init_interaction_radii(qs_control, qs_kind_set)
Initialize all the atomic kind radii for a given threshold value.
subroutine, public write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
Write the radii of the core charge distributions to the output unit.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, hund_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public init_gapw_nlcc(qs_kind_set)
...
subroutine, public init_cneo_basis_set(qs_kind_set, qs_control)
...
subroutine, public write_qs_kind_set(qs_kind_set, subsys_section)
Write an atomic kind set data set to the output unit.
subroutine, public init_gapw_basis_set(qs_kind_set, qs_control, force_env_section, modify_qs_control)
...
subroutine, public init_qs_kind_set(qs_kind_set)
Initialise an atomic kind set data set.
subroutine, public set_qs_kind(qs_kind, paw_atom, ghost, floating, hard_radius, hard0_radius, covalent_radius, vdw_radius, lmax_rho0, zeff, no_optimize, dispersion, u_minus_j, hund_j, reltmat, dftb_parameter, xtb_parameter, elec_conf, pao_basis_size)
Set the components of an atomic kind data set.
subroutine, public check_qs_kind_set(qs_kind_set, dft_control, subsys_section)
...
subroutine, public write_gto_basis_sets(qs_kind_set, subsys_section)
Write all the GTO basis sets of an atomic kind set to the output unit (for the printing of the unnorm...
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, exc_accint, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
subroutine, public qs_ks_env_create(ks_env)
Allocates a new instance of ks_env.
Definition and initialisation of the mo data type.
subroutine, public allocate_mo_set(mo_set, nao, nmo, nelectron, n_el_f, maxocc, flexible_electron_count)
Allocates a mo set and partially initializes it (nao,nmo,nelectron, and flexible_electron_count are v...
subroutine, public rho0_s_grid_create(pw_env, rho0_mpole)
...
subroutine, public init_rho0(local_rho_set, qs_env, gapw_control, zcore)
...
subroutine, public init_rho_atom(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
...
Routines that work on qs_subsys_type.
subroutine, public qs_subsys_create(subsys, para_env, root_section, force_env_section, subsys_section, use_motion_section, cp_subsys, elkind, silent)
Creates a qs_subsys. Optionally an existsing cp_subsys is used.
types that represent a quickstep subsys
subroutine, public qs_subsys_get(subsys, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, cp_subsys, nelectron_total, nelectron_spin)
...
subroutine, public qs_subsys_set(subsys, cp_subsys, local_particles, local_molecules, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, nelectron_total, nelectron_spin)
...
Storage of past states of the qs_env. Methods to interpolate (or actually normally extrapolate) the n...
subroutine, public wfi_create_for_kp(wf_history)
Adapts wf_history storage flags for k-point calculations. For ASPC, switches from Gamma WFN storage t...
subroutine, public wfi_create(wf_history, interpolation_method_nr, extrapolation_order, has_unit_metric)
...
interpolate the wavefunctions to speed up the convergence when doing MD
subroutine, public wfi_release(wf_history)
releases a wf_history of a wavefunction (see doc/ReferenceCounting.html)
parameters that control a relativistic calculation
subroutine, public rel_c_create(rel_control)
allocates and initializes an rel control object with the default values
subroutine, public rel_c_read_parameters(rel_control, dft_section)
reads the parameters of the relativistic section into the given rel_control
parameters that control an scf iteration
subroutine, public scf_c_read_parameters(scf_control, inp_section)
reads the parameters of the scf section into the given scf_control
subroutine, public scf_c_write_parameters(scf_control, dft_section)
writes out the scf parameters
subroutine, public scf_c_create(scf_control)
allocates and initializes an scf control object with the default values
Methods for handling the 1/R^3 residual integral part.
subroutine, public semi_empirical_expns3_setup(qs_kind_set, se_control, method_id)
Setup the quantity necessary to handle the slowly convergent residual integral term 1/R^3.
Arrays of parameters used in the semi-empirical calculations \References Everywhere in this module TC...
subroutine, public init_se_intd_array()
Initialize all arrays used for the evaluation of the integrals.
Setup and Methods for semi-empirical multipole types.
subroutine, public nddo_mpole_setup(nddo_mpole, natom)
Setup NDDO multipole type.
Definition of the semi empirical multipole integral expansions types.
Type to store integrals for semi-empirical calculations.
subroutine, public semi_empirical_si_create(store_int_env, se_section, compression)
Allocate semi-empirical store integrals type.
Definition of the semi empirical parameter types.
subroutine, public se_taper_create(se_taper, integral_screening, do_ewald, taper_cou, range_cou, taper_exc, range_exc, taper_scr, range_scr, taper_lrc, range_lrc)
Creates the taper type used in SE calculations.
Working with the semi empirical parameter types.
subroutine, public se_cutoff_compatible(se_control, se_section, cell, output_unit)
Reset cutoffs trying to be somehow a bit smarter.
Experimental CP2K-native GPW real-space-grid path for SKALA TorchScript models.
logical function, public xc_section_uses_native_skala_evaluator(xc_section)
Return true when SKALA must be evaluated by the CP2K-native grid machinery.
logical function, public xc_section_uses_skala_model(xc_section)
Return true if the XC section requests a SKALA model (GauXC or native/FTorch).
subroutine, public tb_init_wf(tb, dft_control)
initialize wavefunction ...
subroutine, public tb_init_geometry(qs_env, tb)
intialize geometry objects ...
subroutine, public tb_set_calculator(tb, typ, accuracy, param_file)
...
subroutine, public tb_get_basis(tb, gto_basis_set, element_symbol, param, occ)
...
routines for DFT+NEGF calculations (coupling with the quantum transport code OMEN)
subroutine, public transport_env_create(qs_env)
creates the transport environment
type(xc_rho_cflags_type) function, public xc_functionals_get_needs(functionals, lsd, calc_potential)
...
subroutine, public xtb_parameters_set(param)
Read atom parameters for xTB Hamiltonian from input file.
subroutine, public xtb_parameters_init(param, gfn_type, element_symbol, parameter_file_path, parameter_file_name, para_env)
...
subroutine, public xtb_spinpol_ext(param, gfn_type, xtb_control)
...
subroutine, public xtb_spinpol_init(param, gfn_type, element_symbol, parameter_file_path, spinpol_param_file_name, para_env)
...
subroutine, public init_xtb_basis(param, gto_basis_set, ngauss, ngaussflex)
...
xTB (repulsive) pair potentials Reference: Stefan Grimme, Christoph Bannwarth, Philip Shushkov JCTC 1...
subroutine, public xtb_pp_radius(qs_kind_set, ppradius, eps_pair, kfparam)
...
Definition of the xTB parameter types.
subroutine, public get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, wall, hen, zeta, xi, kappa0, alpg, occupation, ngauss, electronegativity, chmax, en, kqat2, kcn, kq)
...
subroutine, public allocate_xtb_atom_param(xtb_parameter)
...
subroutine, public set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, ngauss, chmax, en, kqat2, kcn, kq)
...
subroutine, public write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represents a system: atoms, molecules, their pos,vel,...
structure to store local (to a processor) ordered lists of integers.
Contains information on the energy correction functional for KG.
to build arrays of pointers
Contains information on the excited states energy.
contains the initially parsed file and the initial parallel environment
Contains information about kpoints.
stores all the informations relevant to an mpi environment
contained for different pw related things
Contains information on the Harris method.
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps track of the previous wavefunctions and can extrapolate them for the next step of md
contains the parameters needed by a relativistic calculation
Global Multipolar NDDO information type.
Semi-empirical store integrals type.
Taper type use in semi-empirical calculations.
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...