203#include "./base/base_uses.f90"
210 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_environment'
235 SUBROUTINE qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, cell, cell_ref, &
236 qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section)
244 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
245 LOGICAL,
INTENT(IN),
OPTIONAL :: qmmm
248 LOGICAL,
INTENT(IN) :: use_motion_section
250 CHARACTER(LEN=default_string_length) :: basis_type
251 INTEGER :: ikind, method_id, nelectron_total, &
253 LOGICAL :: do_admm_rpa, do_ec_hfx, do_et, do_exx, do_hfx, do_kpoints, is_identical, is_semi, &
254 mp2_present, my_qmmm, qmmm_decoupl, same_except_frac, silent, use_ref_cell
255 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: rtmat
257 TYPE(
cell_type),
POINTER :: my_cell, my_cell_ref
265 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
272 et_coupling_section, hfx_section, kpoint_section, mp2_section, rpa_hfx_section, &
275 NULLIFY (my_cell, my_cell_ref, atomic_kind_set, particle_set, &
276 qs_kind_set, kpoint_section, dft_section, ec_section, &
277 subsys, ks_env, dft_control, blacs_env)
279 CALL set_qs_env(qs_env, input=force_env_section)
280 IF (.NOT.
ASSOCIATED(subsys_section))
THEN
286 IF (
PRESENT(qmmm)) my_qmmm = qmmm
287 qmmm_decoupl = .false.
288 IF (
PRESENT(qmmm_env_qm))
THEN
292 qmmm_decoupl = my_qmmm .AND. qmmm_env_qm%periodic .AND. qmmm_env_qm%multipole
294 qs_env%qmmm_env_qm => qmmm_env_qm
300 SELECT CASE (method_id)
313 force_env_section=force_env_section, &
314 subsys_section=subsys_section, &
315 use_motion_section=use_motion_section, &
316 root_section=root_section, &
317 cp_subsys=cp_subsys, cell=cell, cell_ref=cell_ref, &
327 cell_ref=my_cell_ref, &
328 use_ref_cell=use_ref_cell, &
329 atomic_kind_set=atomic_kind_set, &
330 qs_kind_set=qs_kind_set, &
331 particle_set=particle_set)
334 IF (
PRESENT(globenv))
THEN
336 globenv%blacs_repeatable)
345 force_env_section, subsys_section, para_env)
348 IF (
PRESENT(kpoint_env))
THEN
350 kpoints => kpoint_env
351 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
357 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
365 CALL qs_init_subsys(qs_env, para_env, subsys, my_cell, my_cell_ref, use_ref_cell, &
366 subsys_section, silent=silent)
368 CALL get_qs_env(qs_env, dft_control=dft_control)
369 IF (method_id ==
do_method_lrigpw .OR. dft_control%qs_control%lri_optbas)
THEN
370 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
373 CALL cp_warn(__location__,
"Experimental code: "// &
374 "RIGPW should only be used for testing.")
375 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
379 IF (my_qmmm .AND.
PRESENT(qmmm_env_qm) .AND. .NOT. dft_control%qs_control%commensurate_mgrids)
THEN
381 CALL cp_abort(__location__,
"QM/MM with coupling GAUSS or S-WAVE requires "// &
382 "keyword FORCE_EVAL/DFT/MGRID/COMMENSURATE to be enabled.")
387 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, blacs_env=blacs_env)
391 CALL get_qs_env(qs_env=qs_env, wf_history=wf_history)
398 CALL get_qs_env(qs_env, dft_control=dft_control, scf_control=scf_control, nelectron_total=nelectron_total)
403 IF (dft_control%do_admm)
THEN
404 basis_type =
'AUX_FIT'
408 CALL hfx_create(qs_env%x_data, para_env, hfx_section, atomic_kind_set, &
409 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
410 nelectron_total=nelectron_total, nkp_grid=nkp_grid)
415 IF (mp2_present)
THEN
416 cpassert(
ASSOCIATED(qs_env%mp2_env))
429 qs_env%mp2_env%ri_rpa%reuse_hfx = .true.
430 IF (.NOT. do_hfx) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
432 IF (.NOT. (is_identical .OR. same_except_frac)) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
433 IF (dft_control%do_admm .AND. .NOT. do_admm_rpa) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
435 IF (.NOT. qs_env%mp2_env%ri_rpa%reuse_hfx)
THEN
436 IF (do_admm_rpa)
THEN
437 basis_type =
'AUX_FIT'
441 CALL hfx_create(qs_env%mp2_env%ri_rpa%x_data, para_env, rpa_hfx_section, atomic_kind_set, &
442 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
443 nelectron_total=nelectron_total)
445 qs_env%mp2_env%ri_rpa%x_data => qs_env%x_data
450 IF (dft_control%qs_control%do_kg)
THEN
452 CALL kg_env_create(qs_env, qs_env%kg_env, qs_kind_set, qs_env%input)
457 l_val=qs_env%excited_state)
458 NULLIFY (exstate_env)
459 CALL exstate_create(exstate_env, qs_env%excited_state, dft_section)
460 CALL set_qs_env(qs_env, exstate_env=exstate_env)
463 "PROPERTIES%ET_COUPLING")
469 IF (qs_env%do_transport)
THEN
473 IF (dft_control%qs_control%do_ls_scf)
THEN
480 l_val=qs_env%energy_correction)
485 IF (qs_env%energy_correction)
THEN
490 IF (ec_env%do_ec_hfx)
THEN
493 IF (ec_env%basis_inconsistent)
THEN
494 CALL cp_abort(__location__, &
495 "Energy correction methods with hybrid functionals: "// &
496 "correction and ground state need to use the same basis. "// &
497 "Checked by comparing basis set names only.")
501 IF (ec_env%do_ec_admm .AND. .NOT. dft_control%do_admm)
THEN
502 CALL cp_abort(__location__,
"Need an ADMM input section for ADMM EC to work")
505 ec_env%reuse_hfx = .true.
506 IF (.NOT. do_hfx) ec_env%reuse_hfx = .false.
508 IF (.NOT. (is_identical .OR. same_except_frac)) ec_env%reuse_hfx = .false.
509 IF (dft_control%do_admm .AND. .NOT. ec_env%do_ec_admm) ec_env%reuse_hfx = .false.
511 IF (.NOT. ec_env%reuse_hfx)
THEN
512 IF (ec_env%do_ec_admm)
THEN
513 basis_type =
'AUX_FIT'
517 CALL hfx_create(ec_env%x_data, para_env, ec_hfx_section, atomic_kind_set, &
518 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
519 nelectron_total=nelectron_total)
521 ec_env%x_data => qs_env%x_data
530 IF (dft_control%qs_control%do_almo_scf)
THEN
535 CALL get_qs_env(qs_env, rel_control=rel_control)
536 IF (rel_control%rel_method /=
rel_none)
THEN
538 nkind =
SIZE(atomic_kind_set)
542 IF (
ASSOCIATED(rtmat))
CALL set_qs_kind(qs_kind_set(ikind), reltmat=rtmat)
561 SUBROUTINE qs_init_subsys(qs_env, para_env, subsys, cell, cell_ref, use_ref_cell, subsys_section, &
567 TYPE(
cell_type),
POINTER :: cell, cell_ref
568 LOGICAL,
INTENT(in) :: use_ref_cell
570 LOGICAL,
INTENT(in),
OPTIONAL :: silent
572 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_init_subsys'
574 CHARACTER(len=2) :: element_symbol
575 INTEGER :: handle, ikind, ispin, iw, lmax_sphere, maxl, maxlgto, maxlgto_lri, maxlppl, &
576 maxlppnl, method_id, multiplicity, my_ival, n_ao, n_mo_add, natom, nelectron, ngauss, &
577 nkind, output_unit, sort_basis, tnadd_method
578 INTEGER,
DIMENSION(2) :: n_mo, nelectron_spin
579 LOGICAL :: all_potential_present, be_silent, do_kpoints, do_ri_hfx, do_ri_mp2, do_ri_rpa, &
580 do_ri_sos_mp2, do_rpa_ri_exx, do_wfc_im_time, e1terms, has_unit_metric, lribas, &
581 mp2_present, orb_gradient
582 REAL(kind=
dp) :: alpha, ccore, ewald_rcut, fxx, maxocc, &
583 rcut, total_zeff_corr, verlet_skin, &
595 ri_aux_basis_set, ri_hfx_basis, &
596 ri_xas_basis, tmp_basis_set
599 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: mos, mos_last_converged
608 POINTER :: dftb_potential
613 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
621 TYPE(
section_vals_type),
POINTER :: dft_section, et_coupling_section, et_ddapc_section, &
622 ewald_section, lri_section, mp2_section, nl_section, poisson_section, pp_section, &
623 print_section, qs_section, se_section, tddfpt_section, xc_section, xtb_section
628 CALL timeset(routinen, handle)
634 IF (
PRESENT(silent)) be_silent = silent
639 NULLIFY (mos, se_taper)
640 NULLIFY (dft_control)
643 NULLIFY (local_molecules)
644 NULLIFY (local_particles)
645 NULLIFY (scf_control)
646 NULLIFY (dft_section)
647 NULLIFY (et_coupling_section)
649 NULLIFY (mos_last_converged)
657 qs_kind_set=qs_kind_set, &
658 atomic_kind_set=atomic_kind_set, &
659 molecule_set=molecule_set, &
660 molecule_kind_set=molecule_kind_set)
666 IF (dft_control%do_tddfpt_calculation)
THEN
671 IF (.NOT. be_silent)
THEN
674 SELECT CASE (method_id)
686 "PRINT%PROGRAM_BANNER")
690 dft_control%qs_control%periodicity = sum(cell%perd)
694 IF (dft_control%do_sccs .AND. dft_control%qs_control%gapw)
THEN
695 cpabort(
"SCCS is not yet implemented with GAPW")
697 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
700 SELECT CASE (dft_control%qs_control%wf_interpolation_method_nr)
708 dft_control%qs_control%et_coupling_calc = .false.
711 dft_control%qs_control%et_coupling_calc = .true.
712 dft_control%qs_control%ddapc_restraint = .true.
713 CALL read_ddapc_section(dft_control%qs_control, ddapc_restraint_section=et_ddapc_section)
724 ALLOCATE (rel_control)
727 CALL set_qs_env(qs_env, rel_control=rel_control)
732 NULLIFY (ewald_env, ewald_pw, dftb_potential)
733 dftb_control => dft_control%qs_control%dftb_control
735 subsys_section=subsys_section, para_env=para_env)
736 CALL set_qs_env(qs_env, dftb_potential=dftb_potential)
738 IF (dftb_control%do_ewald)
THEN
742 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
748 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
749 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
751 ELSEIF (dft_control%qs_control%method_id ==
do_method_xtb)
THEN
753 xtb_control => dft_control%qs_control%xtb_control
754 NULLIFY (ewald_env, ewald_pw)
757 qs_kind => qs_kind_set(ikind)
759 cpassert(.NOT.
ASSOCIATED(qs_kind%xtb_parameter))
762 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
764 xtb_control%parameter_file_path, xtb_control%parameter_file_name, &
772 NULLIFY (tmp_basis_set)
773 IF (qs_kind%xtb_parameter%z == 1)
THEN
775 ngauss = xtb_control%h_sto_ng
777 ngauss = xtb_control%sto_ng
779 IF (qs_kind%xtb_parameter%defined)
THEN
784 IF (
ASSOCIATED(qs_kind%all_potential))
THEN
785 DEALLOCATE (qs_kind%all_potential%elec_conf)
786 DEALLOCATE (qs_kind%all_potential)
790 IF (qs_kind%xtb_parameter%defined)
THEN
791 zeff_correction = 0.0_dp
793 zeff=qs_kind%xtb_parameter%zeff, zeff_correction=zeff_correction)
794 CALL get_potential(qs_kind%all_potential, alpha_core_charge=alpha)
795 ccore = qs_kind%xtb_parameter%zeff*sqrt((alpha/
pi)**3)
796 CALL set_potential(qs_kind%all_potential, ccore_charge=ccore)
797 qs_kind%xtb_parameter%zeff = qs_kind%xtb_parameter%zeff - zeff_correction
802 IF (xtb_control%do_ewald)
THEN
806 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
811 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
812 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
819 dft_control%qs_control%lri_optbas .OR. &
829 CALL get_qs_kind_set(qs_kind_set, all_potential_present=all_potential_present)
830 IF ((dft_control%qs_control%method_id ==
do_method_gpw) .OR. &
833 IF (all_potential_present)
THEN
834 cpabort(
"All-electron calculations with GPW, GAPW_XC, and OFGPW are not implemented")
839 CALL get_qs_kind_set(qs_kind_set, dft_plus_u_atom_present=dft_control%dft_plus_u)
841 IF (dft_control%do_admm)
THEN
845 NULLIFY (aux_fit_basis)
846 qs_kind => qs_kind_set(ikind)
847 CALL get_qs_kind(qs_kind, basis_set=aux_fit_basis, basis_type=
"AUX_FIT")
848 IF (.NOT. (
ASSOCIATED(aux_fit_basis)))
THEN
850 cpabort(
"AUX_FIT basis set is not defined. ")
860 e1terms = lri_env%exact_1c_terms
862 IF (dft_control%qs_control%do_kg)
THEN
870 NULLIFY (lri_aux_basis)
871 qs_kind => qs_kind_set(ikind)
872 CALL get_qs_kind(qs_kind, basis_set=lri_aux_basis, basis_type=
"LRI_AUX")
873 IF (.NOT. (
ASSOCIATED(lri_aux_basis)))
THEN
875 CALL cp_warn(__location__,
"Automatic Generation of LRI_AUX basis. "// &
876 "This is experimental code.")
885 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_RPA%HF%RI%_SECTION_PARAMETERS_", &
887 IF (do_ri_hfx .OR. do_rpa_ri_exx)
THEN
891 NULLIFY (ri_hfx_basis)
892 qs_kind => qs_kind_set(ikind)
893 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_hfx_basis, &
895 IF (.NOT. (
ASSOCIATED(ri_hfx_basis)))
THEN
897 IF (dft_control%do_admm)
THEN
899 basis_type=
"AUX_FIT", basis_sort=sort_basis)
902 basis_sort=sort_basis)
913 NULLIFY (ri_hfx_basis)
914 qs_kind => qs_kind_set(ikind)
915 CALL get_qs_kind(qs_kind, basis_set=ri_hfx_basis, basis_type=
"RI_HXC")
916 IF (.NOT. (
ASSOCIATED(ri_hfx_basis)))
THEN
918 CALL cp_warn(__location__,
"Automatic Generation of RI_HXC basis. "// &
919 "This is experimental code.")
929 IF (mp2_present)
THEN
933 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
934 l_val=do_wfc_im_time)
937 CALL cp_warn(__location__, &
938 "Low-scaling RPA requires SORT_BASIS EXP keyword (in DFT input section) for good performance")
943 CALL get_qs_env(qs_env, mp2_env=mp2_env, nkind=nkind)
944 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_MP2%_SECTION_PARAMETERS_", l_val=do_ri_mp2)
945 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_SOS_MP2%_SECTION_PARAMETERS_", l_val=do_ri_sos_mp2)
946 CALL section_vals_val_get(qs_env%input,
"DFT%XC%WF_CORRELATION%RI_RPA%_SECTION_PARAMETERS_", l_val=do_ri_rpa)
947 IF (do_ri_mp2 .OR. do_ri_sos_mp2 .OR. do_ri_rpa)
THEN
949 NULLIFY (ri_aux_basis_set)
950 qs_kind => qs_kind_set(ikind)
951 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_aux_basis_set, &
953 IF (.NOT. (
ASSOCIATED(ri_aux_basis_set)))
THEN
964 IF (dft_control%do_xas_tdp_calculation)
THEN
968 NULLIFY (ri_xas_basis)
969 qs_kind => qs_kind_set(ikind)
970 CALL get_qs_kind(qs_kind, basis_set=ri_xas_basis, basis_type=
"RI_XAS")
971 IF (.NOT.
ASSOCIATED(ri_xas_basis))
THEN
981 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, maxlppl=maxlppl, maxlppnl=maxlppnl)
983 lmax_sphere = dft_control%qs_control%gapw_control%lmax_sphere
984 IF (lmax_sphere .LT. 0)
THEN
985 lmax_sphere = 2*maxlgto
986 dft_control%qs_control%gapw_control%lmax_sphere = lmax_sphere
988 IF (dft_control%qs_control%method_id ==
do_method_lrigpw .OR. dft_control%qs_control%lri_optbas)
THEN
989 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"LRI_AUX")
991 maxlgto = max(maxlgto, maxlgto_lri)
993 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"RI_HXC")
994 maxlgto = max(maxlgto, maxlgto_lri)
996 IF (dft_control%do_xas_tdp_calculation)
THEN
998 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type=
"RI_XAS")
999 maxlgto = max(maxlgto, maxlgto_lri)
1001 maxl = max(2*maxlgto, maxlppl, maxlppnl, lmax_sphere) + 1
1013 qs_control => dft_control%qs_control
1020 maxl = max(3*maxlgto + 1, 0)
1029 qs_kind => qs_kind_set(ikind)
1030 IF (qs_kind%xtb_parameter%defined)
THEN
1031 CALL get_qs_kind(qs_kind, basis_set=tmp_basis_set)
1032 IF (xtb_control%old_coulomb_damping)
THEN
1034 qs_kind%xtb_parameter%rcut = rcut
1036 rcut = xtb_control%coulomb_sr_cut
1037 fxx = 2.0_dp*xtb_control%coulomb_sr_eps*qs_kind%xtb_parameter%eta**2
1038 fxx = 0.80_dp*(1.0_dp/fxx)**0.3333_dp
1039 rcut = min(rcut, xtb_control%coulomb_sr_cut)
1040 qs_kind%xtb_parameter%rcut = min(rcut, fxx)
1043 qs_kind%xtb_parameter%rcut = 0.0_dp
1048 IF (.NOT. be_silent)
THEN
1060 particle_set=particle_set, &
1061 local_particles=local_particles, &
1062 molecule_kind_set=molecule_kind_set, &
1063 molecule_set=molecule_set, &
1064 local_molecules=local_molecules, &
1065 force_env_section=qs_env%input)
1068 ALLOCATE (scf_control)
1076 has_unit_metric = .false.
1077 IF (dft_control%qs_control%semi_empirical)
THEN
1078 IF (dft_control%qs_control%se_control%orthogonal_basis) has_unit_metric = .true.
1080 IF (dft_control%qs_control%dftb)
THEN
1081 IF (dft_control%qs_control%dftb_control%orthogonal_basis) has_unit_metric = .true.
1083 CALL set_qs_env(qs_env, has_unit_metric=has_unit_metric)
1087 interpolation_method_nr= &
1088 dft_control%qs_control%wf_interpolation_method_nr, &
1089 extrapolation_order=dft_control%qs_control%wf_extrapolation_order, &
1090 has_unit_metric=has_unit_metric)
1094 scf_control=scf_control, &
1095 wf_history=wf_history)
1098 cell_ref=cell_ref, &
1099 use_ref_cell=use_ref_cell, &
1104 CALL set_ks_env(ks_env, dft_control=dft_control)
1106 CALL qs_subsys_set(subsys, local_molecules=local_molecules, &
1107 local_particles=local_particles, cell=cell)
1114 atomic_kind_set=atomic_kind_set, &
1115 dft_control=dft_control, &
1116 scf_control=scf_control)
1120 IF (dft_control%qs_control%do_ls_scf .OR. &
1121 dft_control%qs_control%do_almo_scf)
THEN
1122 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1124 IF (scf_control%use_ot)
THEN
1125 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.true.)
1127 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1132 dft_control%smear = scf_control%smear%do_smear
1135 IF (.NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb))
THEN
1136 IF (dft_control%apply_period_efield)
THEN
1137 CALL get_qs_env(qs_env=qs_env, requires_mo_derivs=orb_gradient)
1138 IF (.NOT. orb_gradient)
THEN
1139 CALL cp_abort(__location__,
"Periodic Efield needs orbital gradient and direct optimization."// &
1140 " Use the OT optimization method.")
1142 IF (dft_control%smear)
THEN
1143 CALL cp_abort(__location__,
"Periodic Efield needs equal occupation numbers."// &
1144 " Smearing option is not possible.")
1153 NULLIFY (rho_atom_set)
1154 gapw_control => dft_control%qs_control%gapw_control
1155 CALL init_rho_atom(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
1156 CALL set_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
1158 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, natom=natom)
1160 CALL init_rho0(local_rho_set, qs_env, gapw_control)
1172 ELSE IF (dft_control%qs_control%semi_empirical)
THEN
1173 NULLIFY (se_store_int_env, se_nddo_mpole, se_nonbond_env)
1174 natom =
SIZE(particle_set)
1176 se_control => dft_control%qs_control%se_control
1181 SELECT CASE (dft_control%qs_control%method_id)
1187 CALL init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
1192 IF (se_control%do_ewald .OR. se_control%do_ewald_gks)
THEN
1193 ALLOCATE (ewald_env)
1196 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1199 "PRINT%GRID_INFORMATION")
1204 print_section=print_section)
1210 IF (se_control%do_ewald)
THEN
1211 CALL ewald_env_get(ewald_env, max_multipole=se_control%max_multipole)
1215 ALLOCATE (se_nonbond_env)
1217 do_electrostatics=.true., verlet_skin=verlet_skin, ewald_rcut=ewald_rcut, &
1218 ei_scale14=0.0_dp, vdw_scale14=0.0_dp, shift_cutoff=.false.)
1221 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw, &
1222 se_nonbond_env=se_nonbond_env, se_nddo_mpole=se_nddo_mpole)
1225 dft_control%qs_control%method_id)
1228 CALL se_taper_create(se_taper, se_control%integral_screening, se_control%do_ewald, &
1229 se_control%taper_cou, se_control%range_cou, &
1230 se_control%taper_exc, se_control%range_exc, &
1231 se_control%taper_scr, se_control%range_scr, &
1232 se_control%taper_lrc, se_control%range_lrc)
1236 CALL set_qs_env(qs_env, se_store_int_env=se_store_int_env)
1240 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
1246 ALLOCATE (dispersion_env)
1247 NULLIFY (xc_section)
1251 NULLIFY (pp_section)
1255 NULLIFY (nl_section)
1259 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1260 ELSE IF (dft_control%qs_control%method_id ==
do_method_dftb)
THEN
1261 ALLOCATE (dispersion_env)
1263 dispersion_env%doabc = .false.
1264 dispersion_env%c9cnst = .false.
1265 dispersion_env%lrc = .false.
1266 dispersion_env%srb = .false.
1267 dispersion_env%verbose = .false.
1268 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
1269 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
1270 dispersion_env%d3_exclude_pair)
1271 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1272 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1273 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1274 IF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d3)
THEN
1277 dispersion_env%eps_cn = dftb_control%epscn
1278 dispersion_env%s6 = dftb_control%sd3(1)
1279 dispersion_env%sr6 = dftb_control%sd3(2)
1280 dispersion_env%s8 = dftb_control%sd3(3)
1281 dispersion_env%domol = .false.
1282 dispersion_env%kgc8 = 0._dp
1283 dispersion_env%rc_disp = dftb_control%rcdisp
1284 dispersion_env%exp_pre = 0._dp
1285 dispersion_env%scaling = 0._dp
1286 dispersion_env%nd3_exclude_pair = 0
1287 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1289 ELSEIF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d3bj)
THEN
1292 dispersion_env%eps_cn = dftb_control%epscn
1293 dispersion_env%s6 = dftb_control%sd3bj(1)
1294 dispersion_env%a1 = dftb_control%sd3bj(2)
1295 dispersion_env%s8 = dftb_control%sd3bj(3)
1296 dispersion_env%a2 = dftb_control%sd3bj(4)
1297 dispersion_env%domol = .false.
1298 dispersion_env%kgc8 = 0._dp
1299 dispersion_env%rc_disp = dftb_control%rcdisp
1300 dispersion_env%exp_pre = 0._dp
1301 dispersion_env%scaling = 0._dp
1302 dispersion_env%nd3_exclude_pair = 0
1303 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1305 ELSEIF (dftb_control%dispersion .AND. dftb_control%dispersion_type ==
dispersion_d2)
THEN
1308 dispersion_env%exp_pre = dftb_control%exp_pre
1309 dispersion_env%scaling = dftb_control%scaling
1310 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1311 dispersion_env%rc_disp = dftb_control%rcdisp
1316 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1317 ELSE IF (dft_control%qs_control%method_id ==
do_method_xtb)
THEN
1318 ALLOCATE (dispersion_env)
1320 dispersion_env%doabc = .false.
1321 dispersion_env%c9cnst = .false.
1322 dispersion_env%lrc = .false.
1323 dispersion_env%srb = .false.
1324 dispersion_env%verbose = .false.
1325 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
1326 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
1327 dispersion_env%d3_exclude_pair)
1328 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1329 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1330 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1333 dispersion_env%eps_cn = xtb_control%epscn
1334 dispersion_env%s6 = xtb_control%s6
1335 dispersion_env%s8 = xtb_control%s8
1336 dispersion_env%a1 = xtb_control%a1
1337 dispersion_env%a2 = xtb_control%a2
1338 dispersion_env%domol = .false.
1339 dispersion_env%kgc8 = 0._dp
1340 dispersion_env%rc_disp = xtb_control%rcdisp
1341 dispersion_env%exp_pre = 0._dp
1342 dispersion_env%scaling = 0._dp
1343 dispersion_env%nd3_exclude_pair = 0
1344 dispersion_env%parameter_file_name = xtb_control%dispersion_parameter_file
1346 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1347 ELSE IF (dft_control%qs_control%semi_empirical)
THEN
1348 ALLOCATE (dispersion_env)
1350 dispersion_env%doabc = .false.
1351 dispersion_env%c9cnst = .false.
1352 dispersion_env%lrc = .false.
1353 dispersion_env%srb = .false.
1354 dispersion_env%verbose = .false.
1355 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
1356 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
1357 dispersion_env%d3_exclude_pair)
1358 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1359 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1360 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1361 IF (se_control%dispersion)
THEN
1364 dispersion_env%eps_cn = se_control%epscn
1365 dispersion_env%s6 = se_control%sd3(1)
1366 dispersion_env%sr6 = se_control%sd3(2)
1367 dispersion_env%s8 = se_control%sd3(3)
1368 dispersion_env%domol = .false.
1369 dispersion_env%kgc8 = 0._dp
1370 dispersion_env%rc_disp = se_control%rcdisp
1371 dispersion_env%exp_pre = 0._dp
1372 dispersion_env%scaling = 0._dp
1373 dispersion_env%nd3_exclude_pair = 0
1374 dispersion_env%parameter_file_name = se_control%dispersion_parameter_file
1379 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1383 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
1390 NULLIFY (xc_section)
1401 nelectron = nelectron - dft_control%charge
1403 IF (dft_control%multiplicity == 0)
THEN
1404 IF (
modulo(nelectron, 2) == 0)
THEN
1405 dft_control%multiplicity = 1
1407 dft_control%multiplicity = 2
1411 multiplicity = dft_control%multiplicity
1413 IF ((dft_control%nspins < 1) .OR. (dft_control%nspins > 2))
THEN
1414 cpabort(
"nspins should be 1 or 2 for the time being ...")
1417 IF ((
modulo(nelectron, 2) /= 0) .AND. (dft_control%nspins == 1))
THEN
1418 IF (.NOT. dft_control%qs_control%ofgpw .AND. .NOT. dft_control%smear)
THEN
1419 cpabort(
"Use the LSD option for an odd number of electrons")
1424 IF (dft_control%do_xas_calculation)
THEN
1425 IF (dft_control%nspins == 1)
THEN
1426 cpabort(
"Use the LSD option for XAS with transition potential")
1437 IF (dft_control%qs_control%ofgpw)
THEN
1439 IF (dft_control%nspins == 1)
THEN
1441 nelectron_spin(1) = nelectron
1442 nelectron_spin(2) = 0
1446 IF (
modulo(nelectron + multiplicity - 1, 2) /= 0)
THEN
1447 cpabort(
"LSD: try to use a different multiplicity")
1449 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
1450 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
1451 IF (nelectron_spin(1) < 0)
THEN
1452 cpabort(
"LSD: too few electrons for this multiplicity")
1454 maxocc = maxval(nelectron_spin)
1455 n_mo(1) = min(nelectron_spin(1), 1)
1456 n_mo(2) = min(nelectron_spin(2), 1)
1461 IF (dft_control%nspins == 1)
THEN
1463 nelectron_spin(1) = nelectron
1464 nelectron_spin(2) = 0
1465 IF (
modulo(nelectron, 2) == 0)
THEN
1466 n_mo(1) = nelectron/2
1468 n_mo(1) = int(nelectron/2._dp) + 1
1476 IF (
modulo(nelectron + multiplicity - 1, 2) /= 0)
THEN
1477 cpabort(
"LSD: try to use a different multiplicity")
1480 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
1481 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
1483 IF (nelectron_spin(2) < 0)
THEN
1484 cpabort(
"LSD: too few electrons for this multiplicity")
1487 n_mo(1) = nelectron_spin(1)
1488 n_mo(2) = nelectron_spin(2)
1497 qs_env%total_zeff_corr = total_zeff_corr
1501 nelectron_total=nelectron, &
1502 nelectron_spin=nelectron_spin)
1505 IF (dft_control%nspins == 2)
THEN
1506 IF (scf_control%added_mos(2) < 0)
THEN
1507 n_mo_add = n_ao - n_mo(2)
1508 ELSEIF (scf_control%added_mos(2) > 0)
THEN
1509 n_mo_add = scf_control%added_mos(2)
1511 n_mo_add = scf_control%added_mos(1)
1513 IF (n_mo_add > n_ao - n_mo(2)) &
1514 cpwarn(
"More ADDED_MOs requested for beta spin than available.")
1515 scf_control%added_mos(2) = min(n_mo_add, n_ao - n_mo(2))
1516 n_mo(2) = n_mo(2) + scf_control%added_mos(2)
1527 IF (scf_control%added_mos(1) < 0)
THEN
1528 scf_control%added_mos(1) = n_ao - n_mo(1)
1529 ELSEIF (scf_control%added_mos(1) > n_ao - n_mo(1))
THEN
1530 CALL cp_warn(__location__, &
1531 "More added MOs requested than available. "// &
1532 "The full set of unoccupied MOs will be used. "// &
1533 "Use 'ADDED_MOS -1' to always use all available MOs "// &
1534 "and to get rid of this warning.")
1536 scf_control%added_mos(1) = min(scf_control%added_mos(1), n_ao - n_mo(1))
1537 n_mo(1) = n_mo(1) + scf_control%added_mos(1)
1539 IF (dft_control%nspins == 2)
THEN
1540 IF (n_mo(2) > n_mo(1)) &
1541 CALL cp_warn(__location__, &
1542 "More beta than alpha MOs requested. "// &
1543 "The number of beta MOs will be reduced to the number alpha MOs.")
1544 n_mo(2) = min(n_mo(1), n_mo(2))
1545 cpassert(n_mo(1) >= nelectron_spin(1))
1546 cpassert(n_mo(2) >= nelectron_spin(2))
1550 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
1551 IF (do_kpoints .AND. dft_control%nspins == 2)
THEN
1553 IF (n_mo(2) /= n_mo(1)) &
1554 CALL cp_warn(__location__, &
1555 "Kpoints: Different number of MOs requested. "// &
1556 "The number of beta MOs will be set to the number alpha MOs.")
1558 cpassert(n_mo(1) >= nelectron_spin(1))
1559 cpassert(n_mo(2) >= nelectron_spin(2))
1563 IF (scf_control%smear%do_smear)
THEN
1564 IF (scf_control%added_mos(1) == 0)
THEN
1565 cpabort(
"Extra MOs (ADDED_MOS) are required for smearing")
1571 "PRINT%MO/CARTESIAN"), &
1573 (scf_control%level_shift /= 0.0_dp) .OR. &
1574 (scf_control%diagonalization%eps_jacobi /= 0.0_dp) .OR. &
1575 (dft_control%roks .AND. (.NOT. scf_control%use_ot)))
THEN
1580 IF (dft_control%roks .AND. (.NOT. scf_control%use_ot))
THEN
1582 cpwarn(
"General ROKS scheme is not yet tested!")
1584 IF (scf_control%smear%do_smear)
THEN
1585 CALL cp_abort(__location__, &
1586 "The options ROKS and SMEAR are not compatible. "// &
1587 "Try UKS instead of ROKS")
1590 IF (dft_control%low_spin_roks)
THEN
1591 SELECT CASE (dft_control%qs_control%method_id)
1594 CALL cp_abort(__location__, &
1595 "xTB/DFTB methods are not compatible with low spin ROKS.")
1598 CALL cp_abort(__location__, &
1599 "SE methods are not compatible with low spin ROKS.")
1607 IF (dft_control%restricted .AND. (output_unit > 0))
THEN
1609 WRITE (output_unit, *)
""
1610 WRITE (output_unit, *)
" **************************************"
1611 WRITE (output_unit, *)
" restricted calculation cutting corners"
1612 WRITE (output_unit, *)
" experimental feature, check code "
1613 WRITE (output_unit, *)
" **************************************"
1617 IF (dft_control%qs_control%do_ls_scf)
THEN
1620 ALLOCATE (mos(dft_control%nspins))
1621 DO ispin = 1, dft_control%nspins
1625 nelectron=nelectron_spin(ispin), &
1626 n_el_f=real(nelectron_spin(ispin),
dp), &
1628 flexible_electron_count=dft_control%relax_multiplicity)
1635 IF (dft_control%switch_surf_dip)
THEN
1636 ALLOCATE (mos_last_converged(dft_control%nspins))
1637 DO ispin = 1, dft_control%nspins
1641 nelectron=nelectron_spin(ispin), &
1642 n_el_f=real(nelectron_spin(ispin),
dp), &
1644 flexible_electron_count=dft_control%relax_multiplicity)
1646 CALL set_qs_env(qs_env, mos_last_converged=mos_last_converged)
1649 IF (.NOT. be_silent)
THEN
1654 IF (dft_control%qs_control%method_id ==
do_method_gpw .OR. &
1662 CALL get_qs_env(qs_env, dispersion_env=dispersion_env)
1670 IF (dft_control%do_admm)
THEN
1675 IF (dft_control%do_xas_calculation)
THEN
1690 CALL write_total_numbers(qs_kind_set, particle_set, qs_env%input)
1705 IF ((.NOT. dft_control%qs_control%do_ls_scf) .AND. &
1706 (.NOT. dft_control%qs_control%do_almo_scf))
THEN
1716 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, rho0_mpole=rho0_mpole)
1720 IF (output_unit > 0)
CALL m_flush(output_unit)
1721 CALL timestop(handle)
1723 END SUBROUTINE qs_init_subsys
1733 SUBROUTINE write_total_numbers(qs_kind_set, particle_set, force_env_section)
1735 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1736 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
1737 TYPE(section_vals_type),
POINTER :: force_env_section
1739 INTEGER :: maxlgto, maxlppl, maxlppnl, natom, ncgf, &
1740 nkind, npgf, nset, nsgf, nshell, &
1742 TYPE(cp_logger_type),
POINTER :: logger
1745 logger => cp_get_default_logger()
1746 output_unit = cp_print_key_unit_nr(logger, force_env_section,
"PRINT%TOTAL_NUMBERS", &
1749 IF (output_unit > 0)
THEN
1750 natom =
SIZE(particle_set)
1751 nkind =
SIZE(qs_kind_set)
1753 CALL get_qs_kind_set(qs_kind_set, &
1763 WRITE (unit=output_unit, fmt=
"(/,/,T2,A)") &
1764 "TOTAL NUMBERS AND MAXIMUM NUMBERS"
1766 IF (nset + npgf + ncgf > 0)
THEN
1767 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
1768 "Total number of", &
1769 "- Atomic kinds: ", nkind, &
1770 "- Atoms: ", natom, &
1771 "- Shell sets: ", nset, &
1772 "- Shells: ", nshell, &
1773 "- Primitive Cartesian functions: ", npgf, &
1774 "- Cartesian basis functions: ", ncgf, &
1775 "- Spherical basis functions: ", nsgf
1776 ELSE IF (nshell + nsgf > 0)
THEN
1777 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
1778 "Total number of", &
1779 "- Atomic kinds: ", nkind, &
1780 "- Atoms: ", natom, &
1781 "- Shells: ", nshell, &
1782 "- Spherical basis functions: ", nsgf
1784 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T71,I10))") &
1785 "Total number of", &
1786 "- Atomic kinds: ", nkind, &
1790 IF ((maxlppl > -1) .AND. (maxlppnl > -1))
THEN
1791 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T75,I6))") &
1792 "Maximum angular momentum of the", &
1793 "- Orbital basis functions: ", maxlgto, &
1794 "- Local part of the GTH pseudopotential: ", maxlppl, &
1795 "- Non-local part of the GTH pseudopotential: ", maxlppnl
1796 ELSEIF (maxlppl > -1)
THEN
1797 WRITE (unit=output_unit, fmt=
"(/,T3,A,(T30,A,T75,I6))") &
1798 "Maximum angular momentum of the", &
1799 "- Orbital basis functions: ", maxlgto, &
1800 "- Local part of the GTH pseudopotential: ", maxlppl
1802 WRITE (unit=output_unit, fmt=
"(/,T3,A,T75,I6)") &
1803 "Maximum angular momentum of the orbital basis functions: ", maxlgto
1807 CALL get_qs_kind_set(qs_kind_set, &
1814 basis_type=
"LRI_AUX")
1815 IF (nset + npgf + ncgf > 0)
THEN
1816 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1817 "LRI_AUX Basis: ", &
1818 "Total number of", &
1819 "- Shell sets: ", nset, &
1820 "- Shells: ", nshell, &
1821 "- Primitive Cartesian functions: ", npgf, &
1822 "- Cartesian basis functions: ", ncgf, &
1823 "- Spherical basis functions: ", nsgf
1824 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
1825 " Maximum angular momentum ", maxlgto
1829 CALL get_qs_kind_set(qs_kind_set, &
1836 basis_type=
"RI_HXC")
1837 IF (nset + npgf + ncgf > 0)
THEN
1838 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1840 "Total number of", &
1841 "- Shell sets: ", nset, &
1842 "- Shells: ", nshell, &
1843 "- Primitive Cartesian functions: ", npgf, &
1844 "- Cartesian basis functions: ", ncgf, &
1845 "- Spherical basis functions: ", nsgf
1846 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
1847 " Maximum angular momentum ", maxlgto
1851 CALL get_qs_kind_set(qs_kind_set, &
1858 basis_type=
"AUX_FIT")
1859 IF (nset + npgf + ncgf > 0)
THEN
1860 WRITE (unit=output_unit, fmt=
"(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1861 "AUX_FIT ADMM-Basis: ", &
1862 "Total number of", &
1863 "- Shell sets: ", nset, &
1864 "- Shells: ", nshell, &
1865 "- Primitive Cartesian functions: ", npgf, &
1866 "- Cartesian basis functions: ", ncgf, &
1867 "- Spherical basis functions: ", nsgf
1868 WRITE (unit=output_unit, fmt=
"(T30,A,T75,I6)") &
1869 " Maximum angular momentum ", maxlgto
1873 CALL cp_print_key_finished_output(output_unit, logger, force_env_section, &
1874 "PRINT%TOTAL_NUMBERS")
1876 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 get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius)
...
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_tddfpt2_control(t_control, t_section, qs_control)
Read TDDFPT-related input parameters.
subroutine, public read_dft_control(dft_control, dft_section)
...
subroutine, public read_qs_section(qs_control, qs_section)
...
subroutine, public write_admm_control(admm_control, dft_section)
Write the ADMM control parameters to the output unit.
subroutine, public read_tddfpt_control(t_control, dft_section)
...
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...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
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.
Routines for a linear scaling quickstep SCF run based on the density matrix.
subroutine, public ls_scf_create(qs_env)
Creation and basic initialization of the LS type.
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_tb(ewald_env, ewald_section, hmat)
Purpose: read the EWALD section for TB methods.
subroutine, public read_ewald_section(ewald_env, ewald_section)
Purpose: read the EWALD section.
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 read_kpoint_section(kpoint, kpoint_section, a_vec)
Read the kpoint input section.
subroutine, public write_kpoint_info(kpoint, dft_section)
Write information on the kpoints to output.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
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)
Retrieve information from a kpoint environment.
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.
container for various plainwaves related things
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.
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 set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, 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, 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, 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, rhs)
Set the QUICKSTEP environment.
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.
subroutine, public qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, cell, cell_ref, qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section)
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)
...
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, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, 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_r3d_rs_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, 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, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
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, basis_type, total_zeff_corr)
Get attributes of an atomic kind set.
subroutine, public init_gapw_nlcc(qs_kind_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, reltmat, dftb_parameter, xtb_parameter, elec_conf, pao_basis_size)
Set the components of an atomic kind data set.
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 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 set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, 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_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, 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_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, 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, cell, cell_ref, elkind)
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)
...
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.
routines for DFT+NEGF calculations (coupling with the quantum transport code OMEN)
subroutine, public transport_env_create(qs_env)
creates the transport environment
subroutine, public xtb_parameters_set(param)
Read atom parameters for xTB Hamiltonian from input file.
subroutine, public xtb_parameters_init(param, element_symbol, parameter_file_path, parameter_file_name, para_env)
...
subroutine, public init_xtb_basis(param, gto_basis_set, ngauss)
...
subroutine, public xtb_parameters_read(param, element_symbol, xtb_section)
Read atom parameters for xTB Hamiltonian from input file.
Definition of the xTB parameter types.
subroutine, public allocate_xtb_atom_param(xtb_parameter)
...
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
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.