(git:f824184)
Loading...
Searching...
No Matches
qs_environment.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \par History
10!> - Merged with the Quickstep MODULE method_specification (17.01.2002,MK)
11!> - USE statements cleaned, added
12!> (25.09.2002,MK)
13!> - Added more LSD structure (01.2003,Joost VandeVondele)
14!> - New molecule data types introduced (Sep. 2003,MK)
15!> - Cleaning; getting rid of pnode (02.10.2003,MK)
16!> - Sub-system setup added (08.10.2003,MK)
17!> \author MK (18.05.2000)
18! **************************************************************************************************
30 USE bibliography, ONLY: iannuzzi2006,&
32 cite_reference,&
34 USE cell_types, ONLY: cell_type
44 USE cp_control_utils, ONLY: &
61 USE ec_environment, ONLY: ec_env_create,&
80 USE gamma, ONLY: init_md_ftable
83 USE header, ONLY: dftb_header,&
84 qs_header,&
85 se_header,&
90 USE input_constants, ONLY: &
111 USE kinds, ONLY: default_string_length,&
112 dp
116 USE kpoint_types, ONLY: get_kpoint_info,&
126 USE machine, ONLY: m_flush
127 USE mathconstants, ONLY: pi
132 USE mp2_setup, ONLY: read_mp2_section
133 USE mp2_types, ONLY: mp2_env_create,&
142 USE physcon, ONLY: kelvin
143 USE pw_env_types, ONLY: pw_env_type
162 USE qs_gcp_types, ONLY: qs_gcp_type
163 USE qs_gcp_utils, ONLY: qs_gcp_env_set,&
176 USE qs_kind_types, ONLY: &
180 USE qs_ks_types, ONLY: qs_ks_env_create,&
184 USE qs_mo_types, ONLY: allocate_mo_set,&
187 USE qs_rho0_methods, ONLY: init_rho0
192 USE qs_subsys_types, ONLY: qs_subsys_get,&
217 USE tblite_interface, ONLY: tb_get_basis,&
219 tb_init_wf,&
224 USE xtb_parameters, ONLY: init_xtb_basis,&
234#include "./base/base_uses.f90"
235
236 IMPLICIT NONE
237
238 PRIVATE
239
240 ! *** Global parameters ***
241 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_environment'
242
243 ! *** Public subroutines ***
244 PUBLIC :: qs_init
245
246CONTAINS
247
248! **************************************************************************************************
249!> \brief Reject unsupported GAPW low-spin ROKS inputs before basis, grid and HFX setup.
250!> \param dft_control DFT and Quickstep controls read from input
251!> \param dft_section DFT input section
252!> \param subsys_section Subsystem input section, including all atomic kinds
253! **************************************************************************************************
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
257
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
262
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.")
266 END IF
267 IF (.NOT. dft_control%qs_control%gapw) RETURN
268
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.")
271 END IF
272 IF (dft_control%do_admm) THEN
273 CALL cp_abort(__location__, "ADMM not compatible with low spin ROKS method.")
274 END IF
275
276 ! Only XC and full-AO exchange are reevaluated for the spin configurations.
277 ! Other spin-dependent corrections would retain the high-spin contribution.
278 IF (dft_control%sic_method_id /= sic_none) THEN
279 CALL cp_abort(__location__, "GAPW low spin ROKS does not support SIC.")
280 END IF
281 IF (dft_control%qs_control%s2_restraint) THEN
282 CALL cp_abort(__location__, "GAPW low spin ROKS does not support S2 restraints.")
283 END IF
284 section => section_vals_get_subs_vals(subsys_section, "KIND")
285 CALL section_vals_get(section, n_repetition=nrep)
286 DO irep = 1, nrep
287 subsection => section_vals_get_subs_vals(section, "DFT_PLUS_U", i_rep_section=irep)
288 CALL section_vals_val_get(subsection, "_SECTION_PARAMETERS_", l_val=active)
289 IF (active) CALL cp_abort(__location__, "GAPW low spin ROKS does not support DFT+U.")
290 END DO
291 section => section_vals_get_subs_vals(dft_section, "QS%DDAPC_RESTRAINT")
292 CALL section_vals_get(section, explicit=explicit, n_repetition=nrep)
293 IF (explicit) THEN
294 DO irep = 1, nrep
295 CALL section_vals_val_get(section, "TYPE_OF_DENSITY", i_rep_section=irep, i_val=option)
296 IF (option == do_spin_density) THEN
297 CALL cp_abort(__location__, "GAPW low spin ROKS does not support spin DDAPC restraints.")
298 END IF
299 END DO
300 END IF
301 section => section_vals_get_subs_vals(dft_section, "QS%CDFT%ATOM_GROUP")
302 CALL section_vals_get(section, explicit=explicit, n_repetition=nrep)
303 IF (explicit) THEN
304 DO irep = 1, nrep
305 CALL section_vals_val_get(section, "CONSTRAINT_TYPE", i_rep_section=irep, i_val=option)
306 IF (option /= cdft_charge_constraint) THEN
307 CALL cp_abort(__location__, "GAPW low spin ROKS does not support spin CDFT constraints.")
308 END IF
309 END DO
310 END IF
311
312 xc_section => section_vals_get_subs_vals(dft_section, "XC")
313 section => section_vals_get_subs_vals(xc_section, "HF")
314 CALL section_vals_get(section, explicit=explicit, n_repetition=nrep)
315 IF (explicit) THEN
316 IF (nrep /= 1) CALL cp_abort(__location__, "GAPW low spin ROKS requires a single HF section.")
317 CALL section_vals_val_get(section, "RI%_SECTION_PARAMETERS_", l_val=active)
318 IF (active) CALL cp_abort(__location__, "GAPW low spin ROKS does not support RI-HFX.")
319 CALL section_vals_val_get(section, "ACE%ACTIVE", l_val=active)
320 IF (active) CALL cp_abort(__location__, "GAPW low spin ROKS does not support ACE-HFX.")
321 CALL section_vals_val_get(section, "SCREENING%SCREEN_ON_INITIAL_P", l_val=active)
322 IF (active) CALL cp_abort(__location__, "GAPW low spin ROKS does not support SCREEN_ON_INITIAL_P.")
323 END IF
324 CALL section_vals_val_get(xc_section, "VDW_POTENTIAL%POTENTIAL_TYPE", i_val=option)
325 IF (option == xc_vdw_fun_nonloc) THEN
326 CALL cp_abort(__location__, "GAPW low spin ROKS does not support nonlocal vdW functionals.")
327 END IF
328 IF (dft_control%use_gauxc) THEN
329 IF (xc_section_uses_native_skala_evaluator(xc_section)) THEN
330 CALL cp_abort(__location__, &
331 "GAPW low spin ROKS requires the molecular GauXC grid, not native Skala grids.")
332 END IF
333 ELSE
334 section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
335 needs = xc_functionals_get_needs(section, lsd=.true., calc_potential=.true.)
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.")
338 END IF
339 END IF
340 END SUBROUTINE check_gapw_low_spin_roks
341
342! **************************************************************************************************
343!> \brief Read the input and the database files for the setup of the
344!> QUICKSTEP environment.
345!> \param qs_env ...
346!> \param para_env ...
347!> \param root_section ...
348!> \param globenv ...
349!> \param cp_subsys ...
350!> \param kpoint_env ...
351!> \param qmmm ...
352!> \param qmmm_env_qm ...
353!> \param force_env_section ...
354!> \param subsys_section ...
355!> \param use_motion_section ...
356!> \param silent ...
357!> \param multip ...
358!> \param charge ...
359!> \author Creation (22.05.2000,MK)
360! **************************************************************************************************
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)
364
365 TYPE(qs_environment_type), POINTER :: qs_env
366 TYPE(mp_para_env_type), POINTER :: para_env
367 TYPE(section_vals_type), OPTIONAL, POINTER :: root_section
368 TYPE(global_environment_type), OPTIONAL, POINTER :: globenv
369 TYPE(cp_subsys_type), OPTIONAL, POINTER :: cp_subsys
370 TYPE(kpoint_type), OPTIONAL, POINTER :: kpoint_env
371 LOGICAL, INTENT(IN), OPTIONAL :: qmmm
372 TYPE(qmmm_env_qm_type), OPTIONAL, POINTER :: qmmm_env_qm
373 TYPE(section_vals_type), POINTER :: force_env_section, subsys_section
374 LOGICAL, INTENT(IN) :: use_motion_section
375 LOGICAL, INTENT(IN), OPTIONAL :: silent
376 INTEGER, INTENT(IN), OPTIONAL :: multip, charge
377
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
389 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
390 TYPE(cell_type), POINTER :: my_cell, my_cell_ref
391 TYPE(cp_blacs_env_type), POINTER :: blacs_env
392 TYPE(dft_control_type), POINTER :: dft_control
393 TYPE(distribution_1d_type), POINTER :: local_particles
394 TYPE(energy_correction_type), POINTER :: ec_env
395 TYPE(excited_energy_type), POINTER :: exstate_env
396 TYPE(harris_type), POINTER :: harris_env
397 TYPE(kpoint_type), POINTER :: kpoints
398 TYPE(lri_environment_type), POINTER :: lri_env
399 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
400 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
401 TYPE(qs_ks_env_type), POINTER :: ks_env
402 TYPE(qs_subsys_type), POINTER :: subsys
403 TYPE(qs_wf_history_type), POINTER :: wf_history
404 TYPE(rel_control_type), POINTER :: rel_control
405 TYPE(scf_control_type), POINTER :: scf_control
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
409
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)
413
414 CALL set_qs_env(qs_env, input=force_env_section)
415 IF (.NOT. ASSOCIATED(subsys_section)) THEN
416 subsys_section => section_vals_get_subs_vals(force_env_section, "SUBSYS")
417 END IF
418 CALL section_vals_val_get(force_env_section, "DFT%QS%METHOD", i_val=method_id)
419
420 ! QMMM
421 my_qmmm = .false.
422 IF (PRESENT(qmmm)) my_qmmm = qmmm
423 qmmm_decoupl = .false.
424 IF (PRESENT(qmmm_env_qm)) THEN
425 IF (qmmm_env_qm%qmmm_coupl_type == do_qmmm_gauss .OR. &
426 qmmm_env_qm%qmmm_coupl_type == do_qmmm_swave) THEN
427 ! For GAUSS/SWAVE methods there could be a DDAPC decoupling requested
428 qmmm_decoupl = my_qmmm .AND. qmmm_env_qm%periodic .AND. qmmm_env_qm%multipole .AND. &
429 method_id /= do_method_dftb .AND. method_id /= do_method_xtb
430 END IF
431 qs_env%qmmm_env_qm => qmmm_env_qm
432 END IF
433 CALL set_qs_env(qs_env=qs_env, qmmm=my_qmmm)
434
435 ! Possibly initialize arrays for SE
436 SELECT CASE (method_id)
439 CALL init_se_intd_array()
440 is_semi = .true.
442 is_semi = .true.
443 CASE DEFAULT
444 is_semi = .false.
445 END SELECT
446
447 ALLOCATE (subsys)
448 CALL qs_subsys_create(subsys, para_env, &
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)
455
456 ALLOCATE (ks_env)
457 CALL qs_ks_env_create(ks_env)
458 CALL set_ks_env(ks_env, subsys=subsys)
459 CALL set_qs_env(qs_env, ks_env=ks_env)
460
461 CALL qs_subsys_get(subsys, &
462 cell=my_cell, &
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)
468
469 CALL set_ks_env(ks_env, para_env=para_env)
470 IF (PRESENT(globenv)) THEN
471 CALL cp_blacs_env_create(blacs_env, para_env, globenv%blacs_grid_layout, &
472 globenv%blacs_repeatable)
473 ELSE
474 CALL cp_blacs_env_create(blacs_env, para_env)
475 END IF
476 CALL set_ks_env(ks_env, blacs_env=blacs_env)
477 CALL cp_blacs_env_release(blacs_env)
478
479 ! *** Setup the grids for the G-space Interpolation if any
480 CALL cp_ddapc_ewald_create(qs_env%cp_ddapc_ewald, qmmm_decoupl, my_cell, &
481 force_env_section, subsys_section, para_env)
482
483 ! kpoints
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)
488 CALL kpoint_initialize(kpoints, particle_set, my_cell)
489 ELSE
490 owned_kpoints = .true.
491 NULLIFY (kpoints)
492 CALL kpoint_create(kpoints)
493 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
494 kpoint_section => section_vals_get_subs_vals(qs_env%input, "DFT%KPOINTS")
495 CALL read_kpoint_section(kpoints, kpoint_section, my_cell%hmat, my_cell)
496 CALL section_vals_get(kpoint_section, explicit=kpoint_explicit)
497 ot_energies = .false.
498 CALL section_vals_val_get(qs_env%input, "DFT%SCF%OT%ENERGIES", l_val=ot_energies)
499 IF (.NOT. kpoint_explicit .AND. ot_energies) THEN
500 ! Use the production Mermin driver instead of maintaining a second sparse Gamma path.
501 CALL set_kpoint_info(kpoints, kp_scheme="GAMMA")
502 END IF
503 CALL get_kpoint_info(kpoints, verbose=kpoint_verbose)
504 IF (kpoint_verbose) CALL set_kpoint_info(kpoints, verbose=.false.)
505 do_hfx = .false.
506 hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%HF")
507 CALL section_vals_get(hfx_section, explicit=do_hfx)
508 do_exx = .false.
509 rpa_hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%HF")
510 CALL section_vals_get(rpa_hfx_section, explicit=do_exx)
511 do_gw = .false.
512 gw_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%GW")
513 CALL section_vals_get(gw_section, explicit=do_gw)
514 IF (.NOT. do_gw) THEN
515 gw_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%BANDSTRUCTURE%GW")
516 CALL section_vals_get(gw_section, explicit=do_gw)
517 END IF
518 do_tddfpt = .false.
519 do_tddfpt_unsupported_kpoints = .false.
520 do_bse = .false.
521 tddfpt_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%TDDFPT")
522 CALL section_vals_get(tddfpt_section, explicit=do_tddfpt)
523 IF (do_tddfpt) THEN
524 CALL section_vals_val_get(tddfpt_section, "KERNEL", i_val=tddfpt_kernel)
525 do_tddfpt_unsupported_kpoints = tddfpt_kernel /= tddfpt_kernel_none
526 IF (.NOT. do_tddfpt_unsupported_kpoints) THEN
527 CALL get_kpoint_info(kpoints, use_real_wfn=use_real_wfn)
528 IF (use_real_wfn) THEN
529 CALL cp_abort(__location__, "K-point TDDFPT requires complex wavefunctions.")
530 END IF
531 END IF
532 CALL section_vals_val_get(tddfpt_section, "DO_BSE", l_val=do_bse)
533 IF (.NOT. do_bse) THEN
534 CALL section_vals_val_get(tddfpt_section, "DO_BSE_W_ONLY", l_val=do_bse)
535 END IF
536 IF (.NOT. do_bse) THEN
537 CALL section_vals_val_get(tddfpt_section, "DO_BSE_GW_ONLY", l_val=do_bse)
538 END IF
539 END IF
540 do_active_space = .false.
541 active_space_section => section_vals_get_subs_vals(qs_env%input, "DFT%ACTIVE_SPACE")
542 CALL section_vals_get(active_space_section, explicit=do_active_space)
543 do_xtb_tblite = .false.
544 IF (method_id == do_method_xtb) THEN
545 CALL section_vals_val_get(qs_env%input, "DFT%QS%XTB%TBLITE%_SECTION_PARAMETERS_", &
546 l_val=do_xtb_tblite)
547 END IF
548 do_dftb_scc = .false.
549 IF (method_id == do_method_dftb) THEN
550 CALL section_vals_val_get(qs_env%input, "DFT%QS%DFTB%SELF_CONSISTENT", &
551 l_val=do_dftb_scc)
552 END IF
553 do_linear_response = .false.
554 IF (PRESENT(globenv)) do_linear_response = globenv%run_type_id == linear_response_run
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
558 CALL section_vals_val_get(root_section, "DEBUG%DEBUG_FORCES", &
559 l_val=do_debug_forces)
560 CALL section_vals_val_get(root_section, "DEBUG%DEBUG_STRESS_TENSOR", &
561 l_val=do_debug_stress_tensor)
562 do_debug_fdiff = do_debug_forces .OR. do_debug_stress_tensor
563 END IF
564 do_mp2 = .false.
565 do_ri_mp2 = .false.
566 do_ri_sos_mp2 = .false.
567 do_ri_rpa = .false.
568 do_wfc_low_scaling = .false.
569 do_wfc_low_scaling_kpoints = .false.
570 mp2_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION")
571 CALL section_vals_get(mp2_section, explicit=mp2_present)
572 IF (mp2_present) THEN
573 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%MP2%_SECTION_PARAMETERS_", &
574 l_val=do_mp2)
575 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_MP2%_SECTION_PARAMETERS_", &
576 l_val=do_ri_mp2)
577 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_SOS_MP2%_SECTION_PARAMETERS_", &
578 l_val=do_ri_sos_mp2)
579 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%_SECTION_PARAMETERS_", &
580 l_val=do_ri_rpa)
581 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
582 l_val=do_wfc_low_scaling)
583 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%LOW_SCALING%DO_KPOINTS", &
584 l_val=do_wfc_low_scaling_kpoints)
585 IF (.NOT. do_bse) THEN
586 CALL section_vals_val_get(qs_env%input, &
587 "DFT%XC%WF_CORRELATION%RI_RPA%GW%BSE%_SECTION_PARAMETERS_", &
588 l_val=do_bse)
589 END IF
590 END IF
591 CALL restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
592 do_tddfpt_unsupported_kpoints, &
593 do_active_space, do_linear_response, &
594 do_debug_fdiff, &
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.)
599 CALL kpoint_initialize(kpoints, particle_set, my_cell)
600 END IF
601
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)
604
605 CALL get_qs_env(qs_env, dft_control=dft_control)
606 IF (owned_kpoints) THEN
607 do_dftb_scc_high_l = .false.
608 IF (method_id == do_method_dftb .AND. do_dftb_scc) THEN
609 do_dftb_scc_high_l = dftb_kind_set_has_high_l(qs_kind_set)
610 END IF
611 CALL restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
612 do_tddfpt_unsupported_kpoints, &
613 do_active_space, do_linear_response, &
614 do_debug_fdiff, &
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
622 CALL kpoint_reset_initialization(kpoints)
623 CALL set_kpoint_info(kpoints, verbose=kpoint_verbose)
624 CALL kpoint_initialize(kpoints, particle_set, my_cell)
625 END IF
626 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
627 CALL write_kpoint_info(kpoints, dft_section=dft_section)
628 END IF
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)
631 CALL lri_env_basis("LRI", qs_env, lri_env, qs_kind_set)
632 ELSE IF (method_id == do_method_rigpw) THEN
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)
636 CALL lri_env_basis("RI", qs_env, lri_env, qs_kind_set)
637 END IF
638
639 IF (my_qmmm .AND. PRESENT(qmmm_env_qm) .AND. .NOT. dft_control%qs_control%commensurate_mgrids) THEN
640 IF ((qmmm_env_qm%qmmm_coupl_type == do_qmmm_gauss .OR. &
641 qmmm_env_qm%qmmm_coupl_type == do_qmmm_swave) .AND. &
642 method_id /= do_method_dftb .AND. method_id /= do_method_xtb) 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.")
645 END IF
646 END IF
647
648 ! more kpoint stuff
649 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, blacs_env=blacs_env)
650 IF (do_kpoints) THEN
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.")
653 END IF
654 CALL kpoint_env_initialize(kpoints, para_env, blacs_env, with_aux_fit=dft_control%do_admm)
655 CALL kpoint_initialize_mos(kpoints, qs_env%mos)
656 CALL get_qs_env(qs_env=qs_env, wf_history=wf_history)
657 CALL wfi_create_for_kp(wf_history)
658 END IF
659 ! basis set symmetry rotations
660 IF (do_kpoints) THEN
661 CALL qs_basis_rotation(qs_env, kpoints)
662 IF (dft_control%do_admm) THEN
663 CALL qs_basis_rotation(qs_env, kpoints, basis_type="AUX_FIT", storage_type="AUX_FIT")
664 END IF
665 END IF
666
667 do_hfx = .false.
668 hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%HF")
669 CALL section_vals_get(hfx_section, explicit=do_hfx)
670 CALL get_qs_env(qs_env, dft_control=dft_control, scf_control=scf_control, nelectron_total=nelectron_total)
671 IF (do_hfx) THEN
672 ! Retrieve particle_set and atomic_kind_set (needed for both kinds of initialization)
673 nkp_grid = 1
674 IF (do_kpoints) CALL get_kpoint_info(kpoints, nkp_grid=nkp_grid)
675 IF (dft_control%do_admm) THEN
676 basis_type = 'AUX_FIT'
677 ELSE
678 basis_type = 'ORB'
679 END IF
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)
683 END IF
684
685 mp2_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION")
686 CALL section_vals_get(mp2_section, explicit=mp2_present)
687 IF (mp2_present) THEN
688 cpassert(ASSOCIATED(qs_env%mp2_env))
689 CALL read_mp2_section(qs_env%input, qs_env%mp2_env)
690 ! create the EXX section if necessary
691 do_exx = .false.
692 rpa_hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%HF")
693 CALL section_vals_get(rpa_hfx_section, explicit=do_exx)
694 IF (do_exx) THEN
695
696 ! do_exx in call of hfx_create decides whether to go without ADMM (do_exx=.TRUE.) or with
697 ! ADMM (do_exx=.FALSE.)
698 CALL section_vals_val_get(mp2_section, "RI_RPA%ADMM", l_val=do_admm_rpa)
699
700 ! Reuse the HFX integrals from the qs_env if applicable
701 qs_env%mp2_env%ri_rpa%reuse_hfx = .true.
702 IF (.NOT. do_hfx) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
703 CALL compare_hfx_sections(hfx_section, rpa_hfx_section, is_identical, same_except_frac)
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.
706
707 IF (.NOT. qs_env%mp2_env%ri_rpa%reuse_hfx) THEN
708 IF (do_admm_rpa) THEN
709 basis_type = 'AUX_FIT'
710 ELSE
711 basis_type = 'ORB'
712 END IF
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)
716 ELSE
717 qs_env%mp2_env%ri_rpa%x_data => qs_env%x_data
718 END IF
719 END IF
720 END IF
721
722 IF (dft_control%qs_control%do_kg) THEN
723 CALL cite_reference(iannuzzi2006)
724 CALL kg_env_create(qs_env, qs_env%kg_env, qs_kind_set, qs_env%input)
725 END IF
726
727 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
728 CALL section_vals_val_get(dft_section, "EXCITED_STATES%_SECTION_PARAMETERS_", &
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)
733
734 et_coupling_section => section_vals_get_subs_vals(qs_env%input, &
735 "PROPERTIES%ET_COUPLING")
736 CALL section_vals_get(et_coupling_section, explicit=do_et)
737 IF (do_et) CALL et_coupling_create(qs_env%et_coupling)
738
739 transport_section => section_vals_get_subs_vals(qs_env%input, "DFT%TRANSPORT")
740 CALL section_vals_get(transport_section, explicit=qs_env%do_transport)
741 IF (qs_env%do_transport) THEN
742 CALL transport_env_create(qs_env)
743 END IF
744
745 CALL get_qs_env(qs_env, harris_env=harris_env)
746 IF (qs_env%harris_method) THEN
747 ! initialize the Harris input density and potential integrals
748 IF (harris_env%density_source == hden_atomic) 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)
752 ELSE
753 harris_env%rhoin%nspin = dft_control%nspins
754 END IF
755 ! Print information of the HARRIS section
756 CALL harris_write_input(harris_env)
757 END IF
758
759 NULLIFY (ec_env)
760 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
761 CALL section_vals_val_get(dft_section, "ENERGY_CORRECTION%_SECTION_PARAMETERS_", &
762 l_val=qs_env%energy_correction)
763 ec_section => section_vals_get_subs_vals(qs_env%input, "DFT%ENERGY_CORRECTION")
764 CALL ec_env_create(qs_env, ec_env, dft_section, ec_section)
765 CALL set_qs_env(qs_env, ec_env=ec_env)
766
767 IF (qs_env%energy_correction) THEN
768 ! Energy correction with Hartree-Fock exchange
769 ec_hfx_section => section_vals_get_subs_vals(ec_section, "XC%HF")
770 CALL section_vals_get(ec_hfx_section, explicit=do_ec_hfx)
771
772 IF (ec_env%do_ec_hfx) THEN
773
774 ! kpoints and HFX not yet compatible
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.")
779 END IF
780
781 ! Hybrid functionals require same basis
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.")
787 END IF
788
789 ! Similar to RPA_HFX we can check if HFX integrals from the qs_env can be reused
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")
792 END IF
793
794 ec_env%reuse_hfx = .true.
795 IF (.NOT. do_hfx) ec_env%reuse_hfx = .false.
796 CALL compare_hfx_sections(hfx_section, ec_hfx_section, is_identical, same_except_frac)
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.
799
800 IF (.NOT. ec_env%reuse_hfx) THEN
801 IF (ec_env%do_ec_admm) THEN
802 basis_type = 'AUX_FIT'
803 ELSE
804 basis_type = 'ORB'
805 END IF
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)
809 ELSE
810 ec_env%x_data => qs_env%x_data
811 END IF
812 END IF
813
814 ! Print information of the EC section
815 CALL ec_write_input(ec_env)
816
817 END IF
818
819 IF (dft_control%qs_control%do_almo_scf) THEN
820 CALL almo_scf_env_create(qs_env)
821 END IF
822
823 ! see if we have atomic relativistic corrections
824 CALL get_qs_env(qs_env, rel_control=rel_control)
825 IF (rel_control%rel_method /= rel_none) THEN
826 IF (rel_control%rel_transformation == rel_trans_atom) THEN
827 nkind = SIZE(atomic_kind_set)
828 DO ikind = 1, nkind
829 NULLIFY (rtmat)
830 CALL calculate_atomic_relkin(atomic_kind_set(ikind), qs_kind_set(ikind), rel_control, rtmat)
831 IF (ASSOCIATED(rtmat)) CALL set_qs_kind(qs_kind_set(ikind), reltmat=rtmat)
832 END DO
833 END IF
834 END IF
835
836 END SUBROUTINE qs_init
837
838! **************************************************************************************************
839!> \brief Restrict atomic k-point symmetry for methods not supporting it yet
840!> \param kpoints ...
841!> \param method_id ...
842!> \param do_gw ...
843!> \param do_tddfpt ...
844!> \param do_active_space ...
845!> \param do_linear_response ...
846!> \param do_debug_fdiff ...
847!> \param do_mp2 ...
848!> \param do_rpa ...
849!> \param do_bse ...
850!> \param do_wfc_low_scaling ...
851!> \param do_wfc_low_scaling_kpoints ...
852!> \param do_xtb_tblite ...
853!> \param do_dftb_scc_high_l ...
854!> \param restricted ...
855! **************************************************************************************************
856 SUBROUTINE restrict_unsupported_atomic_kpoint_symmetry(kpoints, method_id, do_gw, &
857 do_tddfpt, do_active_space, do_linear_response, &
858 do_debug_fdiff, &
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)
862 TYPE(kpoint_type), POINTER :: kpoints
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
868
869 CHARACTER(LEN=default_string_length) :: kp_scheme, reason
870 LOGICAL :: full_grid, inversion_symmetry_only, &
871 kpoint_symmetry
872
873 IF (PRESENT(restricted)) restricted = .false.
874
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
878 CALL get_kpoint_info(kpoints, kp_scheme=kp_scheme)
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.")
885 ELSE
886 CALL cp_abort(__location__, &
887 "DFT%KPOINTS are not supported with "//trim(reason)// &
888 "; remove DFT%KPOINTS for these calculations.")
889 END IF
890 END IF
891 END IF
892 IF (do_active_space) THEN
893 CALL get_kpoint_info(kpoints, kp_scheme=kp_scheme)
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.")
899 END IF
900 END IF
901
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
905
906 reason = unsupported_atomic_kpoint_symmetry_reason(method_id, do_gw, &
907 do_tddfpt, do_active_space, do_linear_response, &
908 do_debug_fdiff, &
909 do_mp2, do_rpa, do_bse, do_wfc_low_scaling, &
910 do_wfc_low_scaling_kpoints, do_xtb_tblite, &
911 do_dftb_scc_high_l)
912 IF (len_trim(reason) == 0) RETURN
913
914 CALL cp_warn(__location__, &
915 "Atomic k-point symmetry is currently not implemented for "//trim(reason)// &
916 "; restricting to inversion/time-reversal symmetry.")
917 CALL set_kpoint_info(kpoints, inversion_symmetry_only=.true.)
918 IF (PRESENT(restricted)) restricted = .true.
919
920 END SUBROUTINE restrict_unsupported_atomic_kpoint_symmetry
921
922! **************************************************************************************************
923!> \brief Return the reason why k-points are not enabled for a method
924!> \param method_id ...
925!> \param do_gw ...
926!> \param do_tddfpt ...
927!> \param do_linear_response ...
928!> \param do_mp2 ...
929!> \param do_bse ...
930!> \param do_xtb_tblite ...
931!> \return reason
932! **************************************************************************************************
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
939
940 reason = ""
941 mark_used(do_gw)
942 mark_used(do_mp2)
943 mark_used(do_xtb_tblite)
944
945 IF (do_bse) THEN
946 reason = "BSE"
947 RETURN
948 END IF
949 IF (do_tddfpt) THEN
950 reason = "TDDFPT/TDDFT"
951 RETURN
952 END IF
953 IF (do_linear_response) THEN
954 reason = "LINEAR_RESPONSE/DFPT"
955 RETURN
956 END IF
957 SELECT CASE (method_id)
958 CASE (do_method_rigpw)
959 reason = "RIGPW"
960 CASE (do_method_ofgpw)
961 reason = "OFGPW"
964 reason = "semiempirical methods"
965 CASE DEFAULT
966 reason = ""
967 END SELECT
968
969 END FUNCTION unsupported_kpoint_method_reason
970
971! **************************************************************************************************
972!> \brief Return the reason why atomic k-point symmetry is not enabled
973!> \param method_id ...
974!> \param do_gw ...
975!> \param do_tddfpt ...
976!> \param do_active_space ...
977!> \param do_linear_response ...
978!> \param do_debug_fdiff ...
979!> \param do_mp2 ...
980!> \param do_rpa ...
981!> \param do_bse ...
982!> \param do_wfc_low_scaling ...
983!> \param do_wfc_low_scaling_kpoints ...
984!> \param do_xtb_tblite ...
985!> \param do_dftb_scc_high_l ...
986!> \return reason
987! **************************************************************************************************
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
998
999 reason = ""
1000 mark_used(do_debug_fdiff)
1001 mark_used(do_xtb_tblite)
1002
1003 SELECT CASE (method_id)
1004 CASE (do_method_dftb)
1005 IF (do_dftb_scc_high_l) reason = "SCC-DFTB with d orbitals"
1006 CASE (do_method_lrigpw)
1007 reason = "LRIGPW"
1008 CASE (do_method_rigpw)
1009 reason = "RIGPW"
1012 reason = "semiempirical methods"
1013 CASE DEFAULT
1014 reason = ""
1015 END SELECT
1016
1017 IF (len_trim(reason) > 0) RETURN
1018 IF (do_bse) THEN
1019 reason = "BSE"
1020 ELSE IF (do_gw) THEN
1021 reason = "GW"
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
1029 reason = "MP2"
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
1035 reason = "RPA"
1036 END IF
1037
1038 END FUNCTION unsupported_atomic_kpoint_symmetry_reason
1039
1040! **************************************************************************************************
1041!> \brief Return whether the DFTB kind set contains d orbitals
1042!> \param qs_kind_set ...
1043!> \return has_high_l
1044! **************************************************************************************************
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
1048
1049 INTEGER :: ikind, lmax
1050 LOGICAL :: any_defined, defined
1051 TYPE(qs_dftb_atom_type), POINTER :: dftb_parameter
1052
1053 has_high_l = .true.
1054 IF (.NOT. ASSOCIATED(qs_kind_set)) RETURN
1055
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
1061 defined = .false.
1062 lmax = -1
1063 CALL get_dftb_atom_param(dftb_parameter, defined=defined, lmax=lmax)
1064 IF (.NOT. defined) cycle
1065 any_defined = .true.
1066 IF (lmax > 1) RETURN
1067 END DO
1068
1069 IF (any_defined) has_high_l = .false.
1070
1071 END FUNCTION dftb_kind_set_has_high_l
1072
1073! **************************************************************************************************
1074!> \brief Initialize the qs environment (subsys)
1075!> \param qs_env ...
1076!> \param para_env ...
1077!> \param subsys ...
1078!> \param cell ...
1079!> \param cell_ref ...
1080!> \param use_ref_cell ...
1081!> \param subsys_section ...
1082!> \param silent ...
1083!> \param multip ...
1084!> \param charge ...
1085!> \author Creation (22.05.2000,MK)
1086! **************************************************************************************************
1087 SUBROUTINE qs_init_subsys(qs_env, para_env, subsys, cell, cell_ref, use_ref_cell, subsys_section, &
1088 silent, multip, charge)
1089
1090 TYPE(qs_environment_type), POINTER :: qs_env
1091 TYPE(mp_para_env_type), POINTER :: para_env
1092 TYPE(qs_subsys_type), POINTER :: subsys
1093 TYPE(cell_type), POINTER :: cell, cell_ref
1094 LOGICAL, INTENT(in) :: use_ref_cell
1095 TYPE(section_vals_type), POINTER :: subsys_section
1096 LOGICAL, INTENT(in), OPTIONAL :: silent
1097 INTEGER, INTENT(IN), OPTIONAL :: multip, charge
1098
1099 CHARACTER(len=*), PARAMETER :: routinen = 'qs_init_subsys'
1100
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
1115 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
1116 TYPE(cp_logger_type), POINTER :: logger
1117 TYPE(dft_control_type), POINTER :: dft_control
1118 TYPE(dftb_control_type), POINTER :: dftb_control
1119 TYPE(distribution_1d_type), POINTER :: local_molecules, local_particles
1120 TYPE(ewald_environment_type), POINTER :: ewald_env
1121 TYPE(ewald_pw_type), POINTER :: ewald_pw
1122 TYPE(fist_nonbond_env_type), POINTER :: se_nonbond_env
1123 TYPE(gapw_control_type), POINTER :: gapw_control
1124 TYPE(gto_basis_set_type), POINTER :: aux_fit_basis, lri_aux_basis, &
1125 rhoin_basis, ri_aux_basis_set, &
1126 ri_hfx_basis, ri_xas_basis, &
1127 tmp_basis_set
1128 TYPE(harris_type), POINTER :: harris_env
1129 TYPE(local_rho_type), POINTER :: local_rho_set
1130 TYPE(lri_environment_type), POINTER :: lri_env
1131 TYPE(mo_set_type), DIMENSION(:), POINTER :: mos, mos_last_converged
1132 TYPE(molecule_kind_type), DIMENSION(:), POINTER :: molecule_kind_set
1133 TYPE(molecule_type), DIMENSION(:), POINTER :: molecule_set
1134 TYPE(mp2_type), POINTER :: mp2_env
1135 TYPE(nddo_mpole_type), POINTER :: se_nddo_mpole
1136 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
1137 TYPE(pw_env_type), POINTER :: pw_env
1138 TYPE(qs_control_type), POINTER :: qs_control
1139 TYPE(qs_dftb_pairpot_type), DIMENSION(:, :), &
1140 POINTER :: dftb_potential
1141 TYPE(qs_dispersion_type), POINTER :: dispersion_env
1142 TYPE(qs_energy_type), POINTER :: energy
1143 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
1144 TYPE(qs_gcp_type), POINTER :: gcp_env
1145 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
1146 TYPE(qs_kind_type), POINTER :: qs_kind
1147 TYPE(qs_ks_env_type), POINTER :: ks_env
1148 TYPE(qs_wf_history_type), POINTER :: wf_history
1149 TYPE(rho0_mpole_type), POINTER :: rho0_mpole
1150 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho_atom_set
1151 TYPE(scf_control_type), POINTER :: scf_control
1152 TYPE(se_taper_type), POINTER :: se_taper
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, &
1156 xc_section
1157 TYPE(semi_empirical_control_type), POINTER :: se_control
1158 TYPE(semi_empirical_si_type), POINTER :: se_store_int_env
1159 TYPE(xtb_control_type), POINTER :: xtb_control
1160
1161 CALL timeset(routinen, handle)
1162 NULLIFY (logger)
1163 logger => cp_get_default_logger()
1164 output_unit = cp_logger_get_default_io_unit(logger)
1165
1166 be_silent = .false.
1167 IF (PRESENT(silent)) be_silent = silent
1168
1169 CALL cite_reference(cp2kqs2020)
1170
1171 ! Initialise the Quickstep environment
1172 NULLIFY (mos, se_taper)
1173 NULLIFY (dft_control)
1174 NULLIFY (energy)
1175 NULLIFY (force)
1176 NULLIFY (local_molecules)
1177 NULLIFY (local_particles)
1178 NULLIFY (scf_control)
1179 NULLIFY (dft_section)
1180 NULLIFY (et_coupling_section)
1181 NULLIFY (ks_env)
1182 NULLIFY (mos_last_converged)
1183 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
1184 qs_section => section_vals_get_subs_vals(dft_section, "QS")
1185 et_coupling_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%ET_COUPLING")
1186 ! reimplemented TDDFPT
1187 tddfpt_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%TDDFPT")
1188 rixs_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%RIXS")
1189
1190 CALL qs_subsys_get(subsys, particle_set=particle_set, &
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)
1195
1196 ! Read the input section with the DFT control parameters
1197 CALL read_dft_control(dft_control, dft_section, cell)
1198
1199 ! Set periodicity flag
1200 dft_control%qs_control%periodicity = sum(cell%perd)
1201
1202 ! Read the input section with the Quickstep control parameters
1203 CALL read_qs_section(dft_control%qs_control, qs_section, cell)
1204
1205 CALL check_gapw_low_spin_roks(dft_control, dft_section, subsys_section)
1206
1207 ! Print the Quickstep program banner (copyright and version number)
1208 IF (.NOT. be_silent) THEN
1209 iw = cp_print_key_unit_nr(logger, dft_section, "PRINT%PROGRAM_BANNER", extension=".Log")
1210 CALL section_vals_val_get(qs_section, "METHOD", i_val=method_id)
1211 SELECT CASE (method_id)
1212 CASE DEFAULT
1213 CALL qs_header(iw)
1216 CALL se_header(iw)
1217 CASE (do_method_dftb)
1218 CALL dftb_header(iw)
1219 CASE (do_method_xtb)
1220 IF (dft_control%qs_control%xtb_control%do_tblite) THEN
1221 CALL tblite_header(iw, dft_control%qs_control%xtb_control%tblite_method)
1222 ELSE
1223 gfn_type = dft_control%qs_control%xtb_control%gfn_type
1224 CALL xtb_header(iw, gfn_type)
1225 END IF
1226 END SELECT
1227 CALL cp_print_key_finished_output(iw, logger, dft_section, &
1228 "PRINT%PROGRAM_BANNER")
1229 END IF
1230
1231 IF (dft_control%do_sccs .AND. dft_control%qs_control%gapw) THEN
1232 cpabort("SCCS is not yet implemented with GAPW")
1233 END IF
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. &
1239 dft_control%qs_control%xtb_control%tblite_scc_mixer == tblite_scc_mixer_tblite .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
1246 END IF
1247 ! reset some of the settings for wfn extrapolation for kpoints
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.")
1252 dft_control%qs_control%wf_interpolation_method_nr = wfi_use_prev_wf_method_nr
1253 END SELECT
1254 END IF
1255
1256 ! Check if any kind of electron transfer calculation has to be performed
1257 CALL section_vals_val_get(et_coupling_section, "TYPE_OF_CONSTRAINT", i_val=my_ival)
1258 dft_control%qs_control%et_coupling_calc = .false.
1259 IF (my_ival == do_et_ddapc) THEN
1260 et_ddapc_section => section_vals_get_subs_vals(et_coupling_section, "DDAPC_RESTRAINT_A")
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)
1264 END IF
1265
1266 CALL read_mgrid_section(dft_control%qs_control, dft_section)
1267
1268 ! Reimplemented TDDFPT
1269 CALL read_tddfpt2_control(dft_control%tddfpt2_control, tddfpt_section, dft_control%qs_control)
1270
1271 ! RIXS
1272 CALL section_vals_get(rixs_section, explicit=qs_env%do_rixs)
1273 IF (qs_env%do_rixs) THEN
1274 CALL read_rixs_control(dft_control%rixs_control, rixs_section, dft_control%qs_control)
1275 END IF
1276
1277 ! Create relativistic control section
1278 block
1279 TYPE(rel_control_type), POINTER :: rel_control
1280 ALLOCATE (rel_control)
1281 CALL rel_c_create(rel_control)
1282 CALL rel_c_read_parameters(rel_control, dft_section)
1283 CALL set_qs_env(qs_env, rel_control=rel_control)
1284 END block
1285
1286 ! Read DFTB parameter files
1287 IF (dft_control%qs_control%method_id == do_method_dftb) THEN
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)
1293 ! check for Ewald
1294 IF (dftb_control%do_ewald) THEN
1295 ALLOCATE (ewald_env)
1296 CALL ewald_env_create(ewald_env, para_env)
1297 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
1298 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1299 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
1300 print_section => section_vals_get_subs_vals(qs_env%input, "PRINT%GRID_INFORMATION")
1301 CALL get_qs_kind_set(qs_kind_set, basis_rcut=ewald_rcut)
1302 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat, &
1303 cell_periodic=cell%perd)
1304 ALLOCATE (ewald_pw)
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)
1307 END IF
1308 ELSE IF (dft_control%qs_control%method_id == do_method_xtb) THEN
1309 ! Read xTB parameter file
1310 xtb_control => dft_control%qs_control%xtb_control
1311 CALL get_qs_env(qs_env, nkind=nkind)
1312 IF (xtb_control%do_tblite) THEN
1313 ! put geometry to tblite
1314 CALL tb_init_geometry(qs_env, qs_env%tb_tblite)
1315 ! select tblite method
1316 CALL tb_set_calculator(qs_env%tb_tblite, xtb_control%tblite_method, &
1317 xtb_control%tblite_accuracy, xtb_control%tblite_param_file)
1318 !set up wave function
1319 CALL tb_init_wf(qs_env%tb_tblite, dft_control)
1320 !get basis set
1321 DO ikind = 1, nkind
1322 qs_kind => qs_kind_set(ikind)
1323 ! Setup proper xTB parameters
1324 cpassert(.NOT. ASSOCIATED(qs_kind%xtb_parameter))
1325 CALL allocate_xtb_atom_param(qs_kind%xtb_parameter)
1326 ! Set default parameters
1327 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
1328
1329 NULLIFY (tmp_basis_set)
1330 CALL tb_get_basis(qs_env%tb_tblite, tmp_basis_set, element_symbol, qs_kind%xtb_parameter, occ)
1331 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, "ORB")
1332 CALL set_xtb_atom_param(qs_kind%xtb_parameter, occupation=occ)
1333
1334 !setting the potential for the computation
1335 zeff_correction = 0.0_dp
1336 CALL init_potential(qs_kind%all_potential, itype="BARE", &
1337 zeff=real(sum(occ), dp), zeff_correction=zeff_correction)
1338 END DO
1339 ELSE
1340 NULLIFY (ewald_env, ewald_pw)
1341 DO ikind = 1, nkind
1342 qs_kind => qs_kind_set(ikind)
1343 ! Setup proper xTB parameters
1344 cpassert(.NOT. ASSOCIATED(qs_kind%xtb_parameter))
1345 CALL allocate_xtb_atom_param(qs_kind%xtb_parameter)
1346 ! Set default parameters
1347 gfn_type = dft_control%qs_control%xtb_control%gfn_type
1348 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
1349 CALL xtb_parameters_init(qs_kind%xtb_parameter, gfn_type, element_symbol, &
1350 xtb_control%parameter_file_path, xtb_control%parameter_file_name, &
1351 para_env)
1352 IF (xtb_control%do_spinpol) THEN
1353 CALL xtb_spinpol_init(qs_kind%xtb_parameter, gfn_type, element_symbol, &
1354 xtb_control%parameter_file_path, xtb_control%spinpol_param_file_name, &
1355 para_env)
1356 CALL xtb_spinpol_ext(qs_kind%xtb_parameter, gfn_type, xtb_control)
1357 END IF
1358 ! set dependent parameters
1359 CALL xtb_parameters_set(qs_kind%xtb_parameter)
1360 ! Generate basis set
1361 NULLIFY (tmp_basis_set)
1362 IF (qs_kind%xtb_parameter%z == 1) THEN
1363 ! special case hydrogen
1364 ngauss = xtb_control%h_sto_ng
1365 ELSE
1366 ngauss = xtb_control%sto_ng
1367 END IF
1368 IF (qs_kind%xtb_parameter%defined) THEN
1369 IF (xtb_control%sto_flex) THEN
1370 CALL get_xtb_atom_param(qs_kind%xtb_parameter, ngauss=ngaussflex)
1371 CALL init_xtb_basis(qs_kind%xtb_parameter, tmp_basis_set, ngauss, ngaussflex)
1372 ELSE
1373 CALL init_xtb_basis(qs_kind%xtb_parameter, tmp_basis_set, ngauss)
1374 END IF
1375 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, "ORB")
1376 ELSE
1377 CALL set_qs_kind(qs_kind, ghost=.true.)
1378 IF (ASSOCIATED(qs_kind%all_potential)) THEN
1379 DEALLOCATE (qs_kind%all_potential%elec_conf)
1380 DEALLOCATE (qs_kind%all_potential)
1381 END IF
1382 END IF
1383 ! potential
1384 IF (qs_kind%xtb_parameter%defined) THEN
1385 zeff_correction = 0.0_dp
1386 CALL init_potential(qs_kind%all_potential, itype="BARE", &
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
1392 END IF
1393 CALL write_xtb_atom_param(qs_kind%xtb_parameter, gfn_type, subsys_section)
1394 END DO
1395 !
1396 ! set repulsive potential range
1397 !
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)
1400 ! check for Ewald
1401 IF (xtb_control%do_ewald) THEN
1402 ALLOCATE (ewald_env)
1403 CALL ewald_env_create(ewald_env, para_env)
1404 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
1405 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1406 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
1407 print_section => section_vals_get_subs_vals(qs_env%input, "PRINT%GRID_INFORMATION")
1408 IF (gfn_type == 0) THEN
1409 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat, &
1410 silent=silent, pset="EEQ", cell_periodic=cell%perd)
1411 ELSE
1412 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat, &
1413 silent=silent, cell_periodic=cell%perd)
1414 END IF
1415 ALLOCATE (ewald_pw)
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)
1418 END IF
1419 END IF
1420 END IF
1421 ! lri or ri env initialization
1422 lri_section => section_vals_get_subs_vals(qs_section, "LRIGPW")
1423 IF (dft_control%qs_control%method_id == do_method_lrigpw .OR. &
1424 dft_control%qs_control%lri_optbas .OR. &
1425 dft_control%qs_control%method_id == do_method_rigpw) THEN
1426 CALL lri_env_init(lri_env, lri_section)
1427 CALL set_qs_env(qs_env, lri_env=lri_env)
1428 END IF
1429
1430 ! Check basis and fill in missing parts
1431 CALL check_qs_kind_set(qs_kind_set, dft_control, subsys_section=subsys_section)
1432
1433 ! Check that no all-electron potential is present if GPW or GAPW_XC
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. &
1436 (dft_control%qs_control%method_id == do_method_gapw_xc) .OR. &
1437 (dft_control%qs_control%method_id == do_method_ofgpw)) THEN
1438 IF (all_potential_present) THEN
1439 cpabort("All-electron calculations with GPW, GAPW_XC, and OFGPW are not implemented")
1440 END IF
1441 END IF
1442
1443 ! Check that no cneo potential is present if not GAPW
1444 CALL get_qs_kind_set(qs_kind_set, cneo_potential_present=cneo_potential_present)
1445 IF (cneo_potential_present .AND. &
1446 dft_control%qs_control%method_id /= do_method_gapw) THEN
1447 cpabort("CNEO calculations require GAPW method")
1448 END IF
1449
1450 ! DFT+U
1451 CALL get_qs_kind_set(qs_kind_set, dft_plus_u_atom_present=dft_control%dft_plus_u)
1452
1453 ! Minimum tracking linear response U and J
1454 CALL get_qs_kind_set(qs_kind_set, do_mtlr_present=dft_control%mtlr_u_j)
1455
1456 IF (dft_control%do_admm) THEN
1457 ! Check if ADMM basis is available
1458 CALL get_qs_env(qs_env, nkind=nkind)
1459 DO ikind = 1, nkind
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
1464 ! AUX_FIT basis set is not available
1465 cpabort("AUX_FIT basis set is not defined. ")
1466 END IF
1467 END DO
1468 END IF
1469
1470 lribas = .false.
1471 e1terms = .false.
1472 IF (dft_control%qs_control%method_id == do_method_lrigpw) THEN
1473 lribas = .true.
1474 CALL get_qs_env(qs_env, lri_env=lri_env)
1475 e1terms = lri_env%exact_1c_terms
1476 END IF
1477 IF (dft_control%qs_control%do_kg) THEN
1478 CALL section_vals_val_get(dft_section, "KG_METHOD%TNADD_METHOD", i_val=tnadd_method)
1479 IF (tnadd_method == kg_tnadd_embed_ri) lribas = .true.
1480 END IF
1481 IF (lribas) THEN
1482 ! Check if LRI_AUX basis is available, auto-generate if needed
1483 CALL get_qs_env(qs_env, nkind=nkind)
1484 DO ikind = 1, nkind
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
1489 ! LRI_AUX basis set is not yet loaded
1490 CALL cp_warn(__location__, "Automatic Generation of LRI_AUX basis. "// &
1491 "This is experimental code.")
1492 ! Generate a default basis
1493 CALL create_lri_aux_basis_set(lri_aux_basis, qs_kind, dft_control%auto_basis_lri_aux, e1terms)
1494 CALL add_basis_set_to_container(qs_kind%basis_sets, lri_aux_basis, "LRI_AUX")
1495 END IF
1496 END DO
1497 END IF
1498
1499 CALL section_vals_val_get(qs_env%input, "DFT%XC%HF%RI%_SECTION_PARAMETERS_", l_val=do_ri_hfx)
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
1503 CALL get_qs_env(qs_env, nkind=nkind)
1504 CALL section_vals_val_get(qs_env%input, "DFT%SORT_BASIS", i_val=sort_basis)
1505 DO ikind = 1, nkind
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
1511 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto)
1512 IF (dft_control%do_admm) THEN
1513 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hfx, &
1514 basis_type="AUX_FIT", basis_sort=sort_basis)
1515 ELSE
1516 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hfx, &
1517 basis_sort=sort_basis)
1518 END IF
1519 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_hfx_basis, "RI_HFX")
1520 END IF
1521 END DO
1522 END IF
1523
1524 IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
1525 ! Check if RI_HXC basis is available, auto-generate if needed
1526 CALL get_qs_env(qs_env, nkind=nkind)
1527 DO ikind = 1, nkind
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
1532 ! Generate a default basis
1533 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hxc)
1534 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_hfx_basis, "RI_HXC")
1535 END IF
1536 END DO
1537 END IF
1538
1539 ! Harris method
1540 NULLIFY (harris_env)
1541 CALL section_vals_val_get(dft_section, "HARRIS_METHOD%_SECTION_PARAMETERS_", &
1542 l_val=qs_env%harris_method)
1543 harris_section => section_vals_get_subs_vals(dft_section, "HARRIS_METHOD")
1544 CALL harris_env_create(qs_env, harris_env, harris_section)
1545 CALL set_qs_env(qs_env, harris_env=harris_env)
1546 !
1547 IF (qs_env%harris_method .AND. qs_env%harris_env%density_source == hden_atomic) THEN
1548 CALL get_qs_env(qs_env, nkind=nkind)
1549 ! Check if RI_HXC basis is available, auto-generate if needed
1550 DO ikind = 1, nkind
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
1555 ! Generate a default basis
1556 CALL create_ri_aux_basis_set(tmp_basis_set, qs_kind, dft_control%auto_basis_ri_hxc)
1557 CALL create_primitive_basis_set(tmp_basis_set, rhoin_basis, lmax=0)
1558 CALL deallocate_gto_basis_set(tmp_basis_set)
1559 CALL add_basis_set_to_container(qs_kind%basis_sets, rhoin_basis, "RHOIN")
1560 END IF
1561 END DO
1562 END IF
1563
1564 mp2_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION")
1565 CALL section_vals_get(mp2_section, explicit=mp2_present)
1566 IF (mp2_present) THEN
1567
1568 ! basis should be sorted for imaginary time RPA/GW
1569 CALL section_vals_val_get(qs_env%input, "DFT%SORT_BASIS", i_val=sort_basis)
1570 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
1571 l_val=do_wfc_im_time)
1572
1573 IF (do_wfc_im_time .AND. sort_basis /= basis_sort_zet) THEN
1574 CALL cp_warn(__location__, &
1575 "Low-scaling RPA requires SORT_BASIS EXP keyword (in DFT input section) for good performance")
1576 END IF
1577
1578 ! Check if RI_AUX basis (for MP2/RPA) is given, auto-generate if not
1579 CALL mp2_env_create(qs_env%mp2_env)
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
1585 DO ikind = 1, nkind
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
1591 ! RI_AUX basis set is not yet loaded
1592 ! Generate a default basis
1593 CALL create_ri_aux_basis_set(ri_aux_basis_set, qs_kind, dft_control%auto_basis_ri_aux, basis_sort=sort_basis)
1594 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_aux_basis_set, "RI_AUX")
1595 ! Add a flag, which allows to check if the basis was generated
1596 ! when applying ERI_METHOD OS to mp2, ri-rpa, gw etc
1597 qs_env%mp2_env%ri_aux_auto_generated = .true.
1598 END IF
1599 END DO
1600 END IF
1601
1602 END IF
1603
1604 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs) THEN
1605 ! Check if RI_XAS basis is given, auto-generate if not
1606 CALL get_qs_env(qs_env, nkind=nkind)
1607 DO ikind = 1, nkind
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
1612 ! Generate a default basis
1613 CALL create_ri_aux_basis_set(ri_xas_basis, qs_kind, dft_control%auto_basis_ri_xas)
1614 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_xas_basis, "RI_XAS")
1615 END IF
1616 END DO
1617 END IF
1618
1619 ! Initialize the spherical harmonics and the orbital transformation matrices
1620 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, maxlppl=maxlppl, maxlppnl=maxlppnl)
1621
1622 ! CNEO nuclear basis contributes to GAPW rho0
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)
1626 END IF
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
1631 END IF
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")
1634 !take maxlgto from lri basis if larger (usually)
1635 maxlgto = max(maxlgto, maxlgto_lri)
1636 ELSE IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
1637 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type="RI_HXC")
1638 maxlgto = max(maxlgto, maxlgto_lri)
1639 END IF
1640 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs) THEN
1641 !done as a precaution
1642 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type="RI_XAS")
1643 maxlgto = max(maxlgto, maxlgto_lri)
1644 END IF
1645 maxl = max(2*maxlgto, maxlppl, maxlppnl, lmax_sphere) + 1
1646
1647 CALL init_orbital_pointers(maxl)
1648
1649 CALL init_spherical_harmonics(maxl, 0)
1650
1651 ! Initialise the qs_kind_set
1652 CALL init_qs_kind_set(qs_kind_set)
1653
1654 ! Initialise GAPW soft basis and projectors
1655 IF (dft_control%qs_control%method_id == do_method_gapw .OR. &
1656 dft_control%qs_control%method_id == do_method_gapw_xc) THEN
1657 qs_control => dft_control%qs_control
1658 CALL init_gapw_basis_set(qs_kind_set, qs_control, qs_env%input)
1659 END IF
1660
1661 ! Initialise CNEO nuclear soft basis
1662 IF (cneo_potential_present) THEN
1663 CALL init_cneo_basis_set(qs_kind_set, qs_control)
1664 END IF
1665
1666 ! Initialize the pretabulation for the calculation of the
1667 ! incomplete Gamma function F_n(t) after McMurchie-Davidson
1668 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto)
1669 maxl = max(3*maxlgto + 1, 0)
1670 CALL init_md_ftable(maxl)
1671
1672 ! Initialize the atomic interaction radii
1673 CALL init_interaction_radii(dft_control%qs_control, qs_kind_set)
1674 !
1675 IF (dft_control%qs_control%method_id == do_method_xtb) THEN
1676 IF (.NOT. dft_control%qs_control%xtb_control%do_tblite) THEN
1677 ! cutoff radius
1678 CALL get_qs_env(qs_env, nkind=nkind)
1679 DO ikind = 1, nkind
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)
1688 ELSE
1689 qs_kind%xtb_parameter%rcut = 0.0_dp
1690 END IF
1691 END DO
1692 END IF
1693 END IF
1694
1695 IF (.NOT. be_silent) THEN
1696 CALL write_pgf_orb_radii("orb", atomic_kind_set, qs_kind_set, subsys_section)
1697 CALL write_pgf_orb_radii("aux", atomic_kind_set, qs_kind_set, subsys_section)
1698 CALL write_pgf_orb_radii("lri", atomic_kind_set, qs_kind_set, subsys_section)
1699 CALL write_pgf_orb_radii("nuc", atomic_kind_set, qs_kind_set, subsys_section)
1700 CALL write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
1701 CALL write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
1702 CALL write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
1703 CALL write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
1704 END IF
1705
1706 ! Distribute molecules and atoms using the new data structures
1707 CALL distribute_molecules_1d(atomic_kind_set=atomic_kind_set, &
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)
1714
1715 ! SCF parameters
1716 ALLOCATE (scf_control)
1717 ! set (non)-self consistency
1718 IF (dft_control%qs_control%dftb) THEN
1719 scf_control%non_selfconsistent = .NOT. dft_control%qs_control%dftb_control%self_consistent
1720 END IF
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.
1724 ELSE
1725 scf_control%non_selfconsistent = (dft_control%qs_control%xtb_control%gfn_type == 0)
1726 END IF
1727 END IF
1728 IF (qs_env%harris_method) THEN
1729 scf_control%non_selfconsistent = .true.
1730 END IF
1731 CALL scf_c_create(scf_control)
1732 CALL scf_c_read_parameters(scf_control, dft_section)
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.")
1736 END IF
1737 IF (.NOT. scf_control%smear%do_smear) THEN
1738 cpabort("Grand canonical SCF requires smearing.")
1739 END IF
1740 IF (scf_control%smear%method == smear_energy_window .OR. &
1741 scf_control%smear%method == smear_list) THEN
1742 CALL cp_abort(__location__, &
1743 "Grand canonical SCF requires Fermi-Dirac, Gaussian, "// &
1744 "Methfessel-Paxton or Marzari-Vanderbilt smearing.")
1745 END IF
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.")
1751 END IF
1752 END IF
1753 IF (.NOT. dft_control%qs_control%do_ls_scf) THEN
1754 SELECT CASE (dft_control%qs_control%method_id)
1755 CASE (do_method_dftb)
1756 IF (dft_control%qs_control%dftb_control%tblite_scc_mixer == tblite_scc_mixer_tblite) THEN
1757 scf_control%max_scf = dft_control%qs_control%dftb_control%tblite_mixer_iterations
1758 END IF
1759 CASE (do_method_xtb)
1760 IF (dft_control%qs_control%xtb_control%tblite_scc_mixer == tblite_scc_mixer_tblite) THEN
1761 scf_control%max_scf = dft_control%qs_control%xtb_control%tblite_mixer_iterations
1762 END IF
1763 END SELECT
1764 END IF
1765
1766 ! Allocate the data structure for Quickstep energies
1767 CALL allocate_qs_energy(energy)
1768
1769 ! Check for orthogonal basis
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.
1773 END IF
1774 IF (dft_control%qs_control%dftb) THEN
1775 IF (dft_control%qs_control%dftb_control%orthogonal_basis) has_unit_metric = .true.
1776 END IF
1777 CALL set_qs_env(qs_env, has_unit_metric=has_unit_metric)
1778
1779 ! Select the MTLR SCF initialization after reading SCF_GUESS.
1780 IF (dft_control%mtlr_u_j) THEN
1781 SELECT CASE (scf_control%density_guess)
1782 CASE (atomic_guess)
1783 IF (dft_control%mtlr_reference_scf_explicit .AND. &
1784 dft_control%mtlr_reference_scf) THEN
1785 dft_control%mtlr_initialization_mode = mtlr_reference_from_atomic
1786 ELSE
1787 dft_control%mtlr_initialization_mode = mtlr_atomic_perturbations
1788 END IF
1789 CASE (restart_guess)
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.")
1795 END IF
1796 dft_control%mtlr_initialization_mode = mtlr_reference_from_restart
1797 CASE DEFAULT
1798 cpabort("MTLR requires SCF_GUESS RESTART or SCF_GUESS ATOMIC.")
1799 END SELECT
1800
1801 dft_control%mtlr_reference_scf = &
1802 dft_control%mtlr_initialization_mode /= mtlr_atomic_perturbations
1803
1804 SELECT CASE (dft_control%mtlr_initialization_mode)
1806 ! Initialize every perturbation SCF from the atomic guess.
1807 dft_control%qs_control%wf_interpolation_method_nr = wfi_use_guess_method_nr
1809 ! Initialize every perturbation SCF from the restored reference MOs.
1810 dft_control%qs_control%wf_interpolation_method_nr = wfi_use_prev_wf_method_nr
1811 CASE DEFAULT
1812 cpabort("The MTLR SCF initialization mode was not resolved.")
1813 END SELECT
1814 END IF
1815
1816 ! Activate the interpolation
1817 CALL wfi_create(wf_history, &
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)
1822
1823 ! Set the current Quickstep environment
1824 CALL set_qs_env(qs_env=qs_env, &
1825 scf_control=scf_control, &
1826 wf_history=wf_history)
1827
1828 CALL qs_subsys_set(subsys, &
1829 cell_ref=cell_ref, &
1830 use_ref_cell=use_ref_cell, &
1831 energy=energy, &
1832 force=force)
1833
1834 CALL get_qs_env(qs_env, ks_env=ks_env)
1835 CALL set_ks_env(ks_env, dft_control=dft_control)
1836
1837 CALL qs_subsys_set(subsys, local_molecules=local_molecules, &
1838 local_particles=local_particles, cell=cell)
1839
1840 CALL distribution_1d_release(local_particles)
1841 CALL distribution_1d_release(local_molecules)
1842 CALL wfi_release(wf_history)
1843
1844 CALL get_qs_env(qs_env=qs_env, &
1845 atomic_kind_set=atomic_kind_set, &
1846 dft_control=dft_control, &
1847 scf_control=scf_control)
1848
1849 ! Decide what conditions need mo_derivs
1850 ! right now, this only appears to be OT
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.)
1854 ELSE
1855 IF (scf_control%use_ot) THEN
1856 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.true.)
1857 ELSE
1858 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1859 END IF
1860 END IF
1861
1862 ! XXXXXXX this is backwards XXXXXXXX
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
1865 ! set tblite default smearing
1866 scf_control%smear%do_smear = .true.
1867 scf_control%smear%method = smear_fermi_dirac
1868 scf_control%smear%electronic_temperature = 300._dp/kelvin
1869 scf_control%smear%eps_fermi_dirac = 1.e-6_dp
1870 END IF
1871 END IF
1872 dft_control%smear = scf_control%smear%do_smear
1873
1874 ! Periodic efield needs equal occupation and orbital gradients
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.")
1881 END IF
1882 IF (dft_control%smear) THEN
1883 CALL cp_abort(__location__, "Periodic Efield needs equal occupation numbers."// &
1884 " Smearing option is not possible.")
1885 END IF
1886 END IF
1887 END IF
1888
1889 ! Initialize the GAPW local densities and potentials
1890 IF (dft_control%qs_control%method_id == do_method_gapw .OR. &
1891 dft_control%qs_control%method_id == do_method_gapw_xc) THEN
1892 ! Allocate and initialize the set of atomic densities
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)
1897 IF (dft_control%qs_control%method_id /= do_method_gapw_xc) THEN
1898 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, natom=natom)
1899 ! Allocate and initialize the compensation density rho0
1900 CALL init_rho0(local_rho_set, qs_env, gapw_control)
1901 ! Allocate and Initialize the local coulomb term
1902 CALL init_coulomb_local(qs_env%hartree_local, natom)
1903 END IF
1904 ! NLCC
1905 CALL init_gapw_nlcc(qs_kind_set)
1906 ! Accurate XC integration
1907 IF (gapw_control%accurate_xcint) THEN
1908 cpassert(gapw_control%oweights >= 0)
1909 cpassert(.NOT. ASSOCIATED(gapw_control%aw))
1910 CALL get_qs_env(qs_env, nkind=nkind)
1911 ALLOCATE (gapw_control%aw(nkind))
1912 alpha = gapw_control%aweights
1913 DO ikind = 1, nkind
1914 qs_kind => qs_kind_set(ikind)
1915 CALL get_qs_kind(qs_kind, hard_radius=rc, paw_atom=paw_atom)
1916 IF (paw_atom) THEN
1917 gapw_control%aw(ikind) = alpha*(1.2_dp/rc)**2
1918 ELSE
1919 gapw_control%aw(ikind) = 0.0_dp
1920 END IF
1921 END DO
1922 END IF
1923 ELSE IF (dft_control%qs_control%method_id == do_method_lrigpw) THEN
1924 ! allocate local ri environment
1925 ! nothing to do here?
1926 ELSE IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
1927 ! allocate ri environment
1928 ! nothing to do here?
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)
1932 se_section => section_vals_get_subs_vals(qs_section, "SE")
1933 se_control => dft_control%qs_control%se_control
1934
1935 ! Make the cutoff radii choice a bit smarter
1936 CALL se_cutoff_compatible(se_control, se_section, cell, output_unit)
1937
1938 SELECT CASE (dft_control%qs_control%method_id)
1939 CASE DEFAULT
1942 ! Neighbor lists have to be MAX(interaction range, orbital range)
1943 ! set new kind radius
1944 CALL init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
1945 END SELECT
1946 ! Initialize to zero the max multipole to treat in the EWALD scheme..
1947 se_control%max_multipole = do_multipole_none
1948 ! check for Ewald
1949 IF (se_control%do_ewald .OR. se_control%do_ewald_gks) THEN
1950 ALLOCATE (ewald_env)
1951 CALL ewald_env_create(ewald_env, para_env)
1952 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
1953 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1954 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
1955 print_section => section_vals_get_subs_vals(qs_env%input, &
1956 "PRINT%GRID_INFORMATION")
1957 CALL read_ewald_section(ewald_env, ewald_section)
1958 ! Create ewald grids
1959 ALLOCATE (ewald_pw)
1960 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, &
1961 print_section=print_section)
1962 ! Initialize ewald grids
1963 CALL ewald_pw_grid_update(ewald_pw, ewald_env, cell%hmat)
1964 ! Setup the nonbond environment (real space part of Ewald)
1965 CALL ewald_env_get(ewald_env, rcut=ewald_rcut)
1966 ! Setup the maximum level of multipoles to be treated in the periodic SE scheme
1967 IF (se_control%do_ewald) THEN
1968 CALL ewald_env_get(ewald_env, max_multipole=se_control%max_multipole)
1969 END IF
1970 CALL section_vals_val_get(se_section, "NEIGHBOR_LISTS%VERLET_SKIN", &
1971 r_val=verlet_skin)
1972 ALLOCATE (se_nonbond_env)
1973 CALL fist_nonbond_env_create(se_nonbond_env, atomic_kind_set, do_nonbonded=.true., &
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.)
1976 ! Create and Setup NDDO multipole environment
1977 CALL nddo_mpole_setup(se_nddo_mpole, natom)
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)
1980 ! Handle the residual integral part 1/R^3
1981 CALL semi_empirical_expns3_setup(qs_kind_set, se_control, &
1982 dft_control%qs_control%method_id)
1983 END IF
1984 ! Taper function
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)
1990 CALL set_qs_env(qs_env, se_taper=se_taper)
1991 ! Store integral environment
1992 CALL semi_empirical_si_create(se_store_int_env, se_section)
1993 CALL set_qs_env(qs_env, se_store_int_env=se_store_int_env)
1994 END IF
1995
1996 ! Initialize possible dispersion parameters
1997 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
1998 dft_control%qs_control%method_id == do_method_gapw .OR. &
1999 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
2000 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
2001 dft_control%qs_control%method_id == do_method_rigpw .OR. &
2002 dft_control%qs_control%method_id == do_method_ofgpw) THEN
2003 ALLOCATE (dispersion_env)
2004 NULLIFY (xc_section)
2005 xc_section => section_vals_get_subs_vals(dft_section, "XC")
2006 CALL qs_dispersion_env_set(dispersion_env, xc_section)
2007 IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN
2008 NULLIFY (pp_section)
2009 pp_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%PAIR_POTENTIAL")
2010 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
2011 ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN
2012 NULLIFY (nl_section)
2013 nl_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%NON_LOCAL")
2014 CALL qs_dispersion_nonloc_init(dispersion_env, para_env)
2015 END IF
2016 IF (dispersion_env%type == xc_vdw_fun_none .AND. &
2017 xc_section_uses_skala_model(xc_section)) THEN
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.")
2024 END IF
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)
2028 ! set general defaults
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
2041 dispersion_env%type = xc_vdw_fun_pairpot
2042 dispersion_env%pp_type = vdw_pairpot_dftd3
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
2054 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
2055 ELSE IF (dftb_control%dispersion .AND. dftb_control%dispersion_type == dispersion_d3bj) THEN
2056 dispersion_env%type = xc_vdw_fun_pairpot
2057 dispersion_env%pp_type = vdw_pairpot_dftd3bj
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
2070 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
2071 ELSE IF (dftb_control%dispersion .AND. dftb_control%dispersion_type == dispersion_d2) THEN
2072 dispersion_env%type = xc_vdw_fun_pairpot
2073 dispersion_env%pp_type = vdw_pairpot_dftd2
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
2078 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
2079 ELSE
2080 dispersion_env%type = xc_vdw_fun_none
2081 END IF
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)
2086 ! set general defaults
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)
2100 dispersion_env%type = xc_vdw_fun_pairpot
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
2114 !
2115 SELECT CASE (xtb_control%vdw_type)
2117 dispersion_env%pp_type = vdw_pairpot_dftd3bj
2118 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
2119 IF (xtb_control%vdw_type == xtb_vdw_type_none) dispersion_env%type = xc_vdw_fun_none
2120 CASE (xtb_vdw_type_d4)
2121 dispersion_env%pp_type = vdw_pairpot_dftd4
2122 dispersion_env%ref_functional = "none"
2123 ! GFN0 supplies its EEQ charges directly to D4. GFN1 does not, so propagate the
2124 ! common EEQ solver settings for the D4 charge model used in that case.
2125 dispersion_env%eeq_sparam = xtb_control%eeq_sparam
2126 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, &
2127 dispersion_env, para_env=para_env)
2128 dispersion_env%cnfun = 2
2129 CASE DEFAULT
2130 cpabort("vdw type")
2131 END SELECT
2132 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2133 END IF
2134 ELSE IF (dft_control%qs_control%semi_empirical) THEN
2135 ALLOCATE (dispersion_env)
2136 ! set general defaults
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
2149 dispersion_env%type = xc_vdw_fun_pairpot
2150 dispersion_env%pp_type = vdw_pairpot_dftd3
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
2162 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
2163 ELSE
2164 dispersion_env%type = xc_vdw_fun_none
2165 END IF
2166 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
2167 END IF
2168
2169 ! Initialize possible geomertical counterpoise correction potential
2170 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
2171 dft_control%qs_control%method_id == do_method_gapw .OR. &
2172 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
2173 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
2174 dft_control%qs_control%method_id == do_method_rigpw .OR. &
2175 dft_control%qs_control%method_id == do_method_ofgpw) THEN
2176 ALLOCATE (gcp_env)
2177 NULLIFY (xc_section)
2178 xc_section => section_vals_get_subs_vals(dft_section, "XC")
2179 CALL qs_gcp_env_set(gcp_env, xc_section)
2180 CALL qs_gcp_init(qs_env, gcp_env)
2181 CALL set_qs_env(qs_env, gcp_env=gcp_env)
2182 END IF
2183
2184 ! Allocate the MO data types
2185 CALL get_qs_kind_set(qs_kind_set, nsgf=n_ao, nelectron=nelectron)
2186
2187 ! The total number of electrons
2188 IF (PRESENT(charge)) THEN
2189 dft_control%charge = charge
2190 nelectron = nelectron - dft_control%charge
2191 ELSE
2192 nelectron = nelectron - dft_control%charge
2193 END IF
2194
2195 IF (dft_control%multiplicity == 0) THEN
2196 IF (modulo(nelectron, 2) == 0) THEN
2197 dft_control%multiplicity = 1
2198 ELSE
2199 dft_control%multiplicity = 2
2200 END IF
2201 END IF
2202
2203 multiplicity = dft_control%multiplicity
2204
2205 IF (PRESENT(multip)) THEN
2206 multiplicity = multip
2207 END IF
2208
2209 IF ((dft_control%nspins < 1) .OR. (dft_control%nspins > 2)) THEN
2210 cpabort("nspins should be 1 or 2 for the time being ...")
2211 END IF
2212
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")
2216 END IF
2217 END IF
2218
2219 ! The transition potential method to calculate XAS needs LSD
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")
2223 END IF
2224 END IF
2225
2226 ! assigning the number of states per spin initial version, not yet very
2227 ! general. Should work for an even number of electrons and a single
2228 ! additional electron this set of options that requires full matrices,
2229 ! however, makes things a bit ugly right now.... we try to make a
2230 ! distinction between the number of electrons per spin and the number of
2231 ! MOs per spin this should allow the use of fractional occupations later on
2232 IF (dft_control%qs_control%ofgpw) THEN
2233
2234 IF (dft_control%nspins == 1) THEN
2235 maxocc = nelectron
2236 nelectron_spin(1) = nelectron
2237 nelectron_spin(2) = 0
2238 n_mo(1) = 1
2239 n_mo(2) = 0
2240 ELSE
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")
2245 END IF
2246 maxocc = maxval(nelectron_spin)
2247 n_mo(1) = min(nelectron_spin(1), 1)
2248 n_mo(2) = min(nelectron_spin(2), 1)
2249 END IF
2250
2251 ELSE
2252
2253 IF (dft_control%nspins == 1) THEN
2254 maxocc = 2.0_dp
2255 nelectron_spin(1) = nelectron
2256 nelectron_spin(2) = 0
2257 IF (modulo(nelectron, 2) == 0) THEN
2258 n_mo(1) = nelectron/2
2259 ELSE
2260 n_mo(1) = int(nelectron/2._dp) + 1
2261 END IF
2262 n_mo(2) = 0
2263 ELSE
2264 maxocc = 1.0_dp
2265
2266 ! The simplist spin distribution is written here. Special cases will
2267 ! need additional user input
2268 IF (modulo(nelectron + multiplicity - 1, 2) /= 0) THEN
2269 cpabort("LSD: try to use a different multiplicity")
2270 END IF
2271
2272 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
2273 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
2274
2275 IF (nelectron_spin(2) < 0) THEN
2276 cpabort("LSD: too few electrons for this multiplicity")
2277 END IF
2278
2279 n_mo(1) = nelectron_spin(1)
2280 n_mo(2) = nelectron_spin(2)
2281
2282 END IF
2283
2284 END IF
2285
2286 ! Read the total_zeff_corr here [SGh]
2287 CALL get_qs_kind_set(qs_kind_set, total_zeff_corr=total_zeff_corr)
2288 ! store it in qs_env
2289 qs_env%total_zeff_corr = total_zeff_corr
2290
2291 ! Store the number of electrons once and for all
2292 CALL qs_subsys_set(subsys, &
2293 nelectron_total=nelectron, &
2294 nelectron_spin=nelectron_spin)
2295
2296 IF (any(scf_control%added_mos_auto) .AND. .NOT. scf_control%smear%do_smear) THEN
2297 cpabort("ADDED_MOS AUTO requires smearing")
2298 END IF
2299 IF (any(scf_control%added_mos_auto) .AND. .NOT. do_kpoints) THEN
2300 cpabort("ADDED_MOS AUTO currently requires a K-point calculation")
2301 END IF
2302
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)
2307 DO ispin = 1, 2
2308 scf_control%added_mos(ispin) = max(0, n_mo_target - n_mo(ispin))
2309 scf_control%added_mos_auto(ispin) = .true.
2310 END DO
2311 ELSE
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.
2316 END IF
2317 END DO
2318 END IF
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)
2324 ELSE
2325 WRITE (unit=output_unit, fmt="(T2,A,I0)") &
2326 "SCF smearing: automatically selected ADDED_MOS: ", scf_control%added_mos(1)
2327 END IF
2328 END IF
2329 END IF
2330
2331 ! Ensure that all orbitals requested for printout are added even
2332 ! if the keyword ADDED_MOS was not specified or set properly
2333 mo_index_range => section_get_ivals(dft_section, "PRINT%MO%MO_INDEX_RANGE")
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 ("// &
2339 trim(adjustl(cp_to_string(mo_index_range(2))))// &
2340 ") of the MO_INDEX_RANGE should be equal or larger "// &
2341 "than the lower orbital index ("// &
2342 trim(adjustl(cp_to_string(mo_index_range(1))))// &
2343 ") for printout.")
2344 END IF
2345 ! Adapt ADDED_MOS automatically if needed for printout
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)), &
2349 n_ao - 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)), &
2353 n_ao - n_mo(2))
2354 END IF
2355 END IF
2356 ELSE IF (mo_index_range(2) < 0) THEN
2357 IF (.NOT. scf_control%use_ot) THEN
2358 ! Add all available orbitals
2359 scf_control%added_mos(1) = n_ao - n_mo(1)
2360 IF (dft_control%nspins == 2) THEN
2361 ! Ensure the same number for the spin-down (beta) orbitals
2362 scf_control%added_mos(2) = n_ao - n_mo(2)
2363 END IF
2364 END IF
2365 END IF
2366
2367 nlumo_dos = section_get_ival(dft_section, "PRINT%DOS%NLUMO")
2368 nlumo_molden = section_get_ival(dft_section, "PRINT%MO_MOLDEN%NLUMO")
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.")
2379 END IF
2380 scf_control%added_mos(1) = -1
2381 IF (dft_control%nspins == 2) scf_control%added_mos(2) = -1
2382 ELSE
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
2390 END IF
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
2394 END IF
2395 END IF
2396 END IF
2397
2398 IF (dft_control%nspins == 2) THEN
2399 ! Check and set number of added (unoccupied) orbitals for beta spin
2400 IF (scf_control%added_mos(2) == 0) THEN
2401 n_mo_add = scf_control%added_mos(1)
2402 ELSE
2403 n_mo_add = scf_control%added_mos(2)
2404 END IF
2405 IF (n_mo_add < 0) n_mo_add = n_ao - n_mo(2) ! use all available MOs
2406 IF (n_mo_add > n_ao - n_mo(2)) THEN
2407 cpwarn("More ADDED_MOs requested for beta spin than available.")
2408 END IF
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)
2411 END IF
2412
2413 ! proceed alpha orbitals after the beta orbitals; this is essential to avoid
2414 ! reduction in the number of available unoccupied molecular orbitals.
2415 ! E.g. n_ao = 10, nelectrons = 10, multiplicity = 3 implies n_mo(1) = 6, n_mo(2) = 4;
2416 ! added_mos(1:2) = (6,undef) should increase the number of molecular orbitals as
2417 ! n_mo(1) = min(n_ao, n_mo(1) + added_mos(1)) = 10, n_mo(2) = 10.
2418 ! However, if we try to proceed alpha orbitals first, this leads us n_mo(1:2) = (10,8)
2419 ! due to the following assignment instruction above:
2420 ! IF (scf_control%added_mos(2) > 0) THEN ... ELSE; n_mo_add = scf_control%added_mos(1); END IF
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) ! tblite needs all MO's
2423 ELSE IF (scf_control%added_mos(1) < 0) THEN
2424 scf_control%added_mos(1) = n_ao - n_mo(1) ! use all available MOs
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.")
2431 END IF
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)
2434
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.")
2440 END IF
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))
2444 END IF
2445
2446 ! kpoints
2447 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
2448 IF (do_kpoints .AND. dft_control%nspins == 2) THEN
2449 ! we need equal number of calculated states
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.")
2454 END IF
2455 n_mo(2) = n_mo(1)
2456 cpassert(n_mo(1) >= nelectron_spin(1))
2457 cpassert(n_mo(2) >= nelectron_spin(2))
2458 END IF
2459
2460 ! Compatibility checks for smearing
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")
2464 END IF
2465 END IF
2466
2467 ! Some options require that all MOs are computed ...
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
2471 n_mo(:) = n_ao
2472 END IF
2473
2474 ! Compatibility checks for ROKS
2475 IF (dft_control%roks .AND. (.NOT. scf_control%use_ot)) THEN
2476 IF (scf_control%roks_scheme == general_roks) THEN
2477 cpwarn("General ROKS scheme is not yet tested!")
2478 END IF
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")
2483 END IF
2484 END IF
2485 IF (dft_control%low_spin_roks) THEN
2486 SELECT CASE (dft_control%qs_control%method_id)
2487 CASE DEFAULT
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.")
2495 END SELECT
2496 END IF
2497
2498 ! in principle the restricted calculation could be performed
2499 ! using just one set of MOs and special casing most of the code
2500 ! right now we'll just take care of what is effectively an additional constraint
2501 ! at as few places as possible, just duplicating the beta orbitals
2502 IF (dft_control%restricted .AND. (output_unit > 0)) THEN
2503 ! it is really not yet tested till the end ! Joost
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, *) " **************************************"
2509 END IF
2510
2511 ! no point in allocating these things here ?
2512 IF (dft_control%qs_control%do_ls_scf) THEN
2513 NULLIFY (mos)
2514 ELSE
2515 ALLOCATE (mos(dft_control%nspins))
2516 DO ispin = 1, dft_control%nspins
2517 CALL allocate_mo_set(mo_set=mos(ispin), &
2518 nao=n_ao, &
2519 nmo=n_mo(ispin), &
2520 nelectron=nelectron_spin(ispin), &
2521 n_el_f=real(nelectron_spin(ispin), dp), &
2522 maxocc=maxocc, &
2523 flexible_electron_count=dft_control%relax_multiplicity)
2524 END DO
2525 END IF
2526
2527 CALL set_qs_env(qs_env, mos=mos)
2528
2529 ! allocate mos when switch_surf_dip is triggered [SGh]
2530 IF (dft_control%switch_surf_dip) THEN
2531 ALLOCATE (mos_last_converged(dft_control%nspins))
2532 DO ispin = 1, dft_control%nspins
2533 CALL allocate_mo_set(mo_set=mos_last_converged(ispin), &
2534 nao=n_ao, &
2535 nmo=n_mo(ispin), &
2536 nelectron=nelectron_spin(ispin), &
2537 n_el_f=real(nelectron_spin(ispin), dp), &
2538 maxocc=maxocc, &
2539 flexible_electron_count=dft_control%relax_multiplicity)
2540 END DO
2541 CALL set_qs_env(qs_env, mos_last_converged=mos_last_converged)
2542 END IF
2543
2544 IF (.NOT. be_silent) THEN
2545 ! Print the DFT control parameters
2546 IF (PRESENT(multip)) THEN
2547 dft_control%multiplicity = multiplicity
2548 END IF
2549 CALL write_dft_control(dft_control, dft_section)
2550
2551 ! Print the vdW control parameters
2552 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
2553 dft_control%qs_control%method_id == do_method_gapw .OR. &
2554 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
2555 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
2556 dft_control%qs_control%method_id == do_method_rigpw .OR. &
2557 dft_control%qs_control%method_id == do_method_dftb .OR. &
2558 (dft_control%qs_control%method_id == do_method_xtb .AND. &
2559 (.NOT. dft_control%qs_control%xtb_control%do_tblite)) .OR. &
2560 dft_control%qs_control%method_id == do_method_ofgpw) THEN
2561 CALL get_qs_env(qs_env, dispersion_env=dispersion_env)
2562 CALL qs_write_dispersion(qs_env, dispersion_env)
2563 END IF
2564
2565 ! Print the Quickstep control parameters
2566 CALL write_qs_control(dft_control%qs_control, dft_section)
2567
2568 ! Print the ADMM control parameters
2569 IF (dft_control%do_admm) THEN
2570 CALL write_admm_control(dft_control%admm_control, dft_section)
2571 END IF
2572
2573 ! Print XES/XAS control parameters
2574 IF (dft_control%do_xas_calculation) THEN
2575 CALL cite_reference(iannuzzi2007)
2576 !CALL write_xas_control(dft_control%xas_control,dft_section)
2577 END IF
2578
2579 ! Print the unnormalized basis set information (input data)
2580 CALL write_gto_basis_sets(qs_kind_set, subsys_section)
2581
2582 ! Print the atomic kind set
2583 CALL write_qs_kind_set(qs_kind_set, subsys_section)
2584
2585 ! Print the molecule kind set
2586 CALL write_molecule_kind_set(molecule_kind_set, subsys_section)
2587
2588 ! Print the total number of kinds, atoms, basis functions etc.
2589 CALL write_total_numbers(qs_kind_set, particle_set, qs_env%input)
2590
2591 ! Print the atomic coordinates
2592 CALL write_qs_particle_coordinates(particle_set, qs_kind_set, subsys_section, label="QUICKSTEP")
2593
2594 ! Print the interatomic distances
2595 CALL write_particle_distances(particle_set, cell, subsys_section)
2596
2597 ! Print the requested structure data
2598 CALL write_structure_data(particle_set, cell, subsys_section)
2599
2600 ! Print symmetry information
2601 CALL write_symmetry(particle_set, cell, subsys_section)
2602
2603 ! Print the SCF parameters
2604 IF ((.NOT. dft_control%qs_control%do_ls_scf) .AND. &
2605 (.NOT. dft_control%qs_control%do_almo_scf)) THEN
2606 CALL scf_c_write_parameters(scf_control, dft_section)
2607 END IF
2608 END IF
2609
2610 ! Sets up pw_env, qs_charges, mpools ...
2611 CALL qs_env_setup(qs_env)
2612
2613 ! Allocate and initialise rho0 soft on the global grid
2614 IF (dft_control%qs_control%method_id == do_method_gapw) THEN
2615 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, rho0_mpole=rho0_mpole)
2616 CALL rho0_s_grid_create(pw_env, rho0_mpole)
2617 END IF
2618
2619 IF (output_unit > 0) CALL m_flush(output_unit)
2620 CALL timestop(handle)
2621
2622 END SUBROUTINE qs_init_subsys
2623
2624! **************************************************************************************************
2625!> \brief Write the total number of kinds, atoms, etc. to the logical unit
2626!> number lunit.
2627!> \param qs_kind_set ...
2628!> \param particle_set ...
2629!> \param force_env_section ...
2630!> \author Creation (06.10.2000)
2631! **************************************************************************************************
2632 SUBROUTINE write_total_numbers(qs_kind_set, particle_set, force_env_section)
2633
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
2637
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
2642
2643 NULLIFY (logger)
2644 logger => cp_get_default_logger()
2645 output_unit = cp_print_key_unit_nr(logger, force_env_section, "PRINT%TOTAL_NUMBERS", &
2646 extension=".Log")
2647
2648 IF (output_unit > 0) THEN
2649 natom = SIZE(particle_set)
2650 nkind = SIZE(qs_kind_set)
2651
2652 CALL get_qs_kind_set(qs_kind_set, &
2653 maxlgto=maxlgto, &
2654 ncgf=ncgf, &
2655 npgf=npgf, &
2656 nset=nset, &
2657 nsgf=nsgf, &
2658 nshell=nshell, &
2659 maxlppl=maxlppl, &
2660 maxlppnl=maxlppnl)
2661
2662 WRITE (unit=output_unit, fmt="(/,/,T2,A)") &
2663 "TOTAL NUMBERS AND MAXIMUM NUMBERS"
2664
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
2682 ELSE
2683 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T71,I10))") &
2684 "Total number of", &
2685 "- Atomic kinds: ", nkind, &
2686 "- Atoms: ", natom
2687 END IF
2688
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
2700 ELSE
2701 WRITE (unit=output_unit, fmt="(/,T3,A,T75,I6)") &
2702 "Maximum angular momentum of the orbital basis functions: ", maxlgto
2703 END IF
2704
2705 ! LRI_AUX BASIS
2706 CALL get_qs_kind_set(qs_kind_set, &
2707 maxlgto=maxlgto, &
2708 ncgf=ncgf, &
2709 npgf=npgf, &
2710 nset=nset, &
2711 nsgf=nsgf, &
2712 nshell=nshell, &
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
2725 END IF
2726
2727 ! RI_HXC BASIS
2728 CALL get_qs_kind_set(qs_kind_set, &
2729 maxlgto=maxlgto, &
2730 ncgf=ncgf, &
2731 npgf=npgf, &
2732 nset=nset, &
2733 nsgf=nsgf, &
2734 nshell=nshell, &
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))") &
2738 "RI_HXC Basis: ", &
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
2747 END IF
2748
2749 ! AUX_FIT BASIS
2750 CALL get_qs_kind_set(qs_kind_set, &
2751 maxlgto=maxlgto, &
2752 ncgf=ncgf, &
2753 npgf=npgf, &
2754 nset=nset, &
2755 nsgf=nsgf, &
2756 nshell=nshell, &
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
2769 END IF
2770
2771 ! NUCLEAR BASIS
2772 CALL get_qs_kind_set(qs_kind_set, &
2773 nkind_q=nkind_q, &
2774 natom_q=natom_q, &
2775 maxlgto=maxlgto, &
2776 ncgf=ncgf, &
2777 npgf=npgf, &
2778 nset=nset, &
2779 nsgf=nsgf, &
2780 nshell=nshell, &
2781 basis_type="NUC")
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
2795 END IF
2796
2797 END IF
2798 CALL cp_print_key_finished_output(output_unit, logger, force_env_section, &
2799 "PRINT%TOTAL_NUMBERS")
2800
2801 END SUBROUTINE write_total_numbers
2802
2803END MODULE qs_environment
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
almo_scf_env methods
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.
Definition auto_basis.F:15
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.
Definition auto_basis.F:242
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.
Definition auto_basis.F:57
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.
Definition cell_types.F:15
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
Work with symmetry.
Definition cp_symmetry.F:13
subroutine, public write_symmetry(particle_set, cell, input_section)
Write symmetry information to output.
Definition cp_symmetry.F:61
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...
Definition gamma.F:15
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....
Definition gamma.F:540
Define type storing the global information of a run. Keep the amount of stored data small....
subroutine, public init_coulomb_local(hartree_local, natom)
...
subroutine, public dftb_header(iw)
...
Definition header.F:193
subroutine, public qs_header(iw)
...
Definition header.F:310
subroutine, public se_header(iw)
...
Definition header.F:286
subroutine, public xtb_header(iw, gfn_type)
...
Definition header.F:217
subroutine, public tblite_header(iw, tb_type)
...
Definition header.F:252
Types and set/get functions for HFX.
Definition hfx_types.F:16
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
Definition hfx_types.F:564
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 ...
Definition hfx_types.F:2984
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public smear_fermi_dirac
integer, parameter, public do_method_ofgpw
integer, parameter, public xc_vdw_fun_none
integer, parameter, public dispersion_d3
integer, parameter, public gfn1xtb
integer, parameter, public do_method_rigpw
integer, parameter, public smear_energy_window
integer, parameter, public do_method_gpw
integer, parameter, public vdw_pairpot_dftd3
integer, parameter, public do_method_pdg
integer, parameter, public wfi_linear_wf_method_nr
integer, parameter, public tddfpt_kernel_none
integer, parameter, public linear_response_run
integer, parameter, public wfi_linear_ps_method_nr
integer, parameter, public do_method_pnnl
integer, parameter, public atomic_guess
integer, parameter, public xc_vdw_fun_nonloc
integer, parameter, public vdw_pairpot_dftd4
integer, parameter, public xtb_vdw_type_d3
integer, parameter, public wfi_use_guess_method_nr
integer, parameter, public cdft_charge_constraint
integer, parameter, public mtlr_reference_from_restart
integer, parameter, public smear_list
integer, parameter, public kg_tnadd_embed_ri
integer, parameter, public dispersion_d3bj
integer, parameter, public debug_run
integer, parameter, public tblite_scc_mixer_tblite
integer, parameter, public diag_ot
integer, parameter, public do_method_rm1
integer, parameter, public do_qmmm_swave
integer, parameter, public do_method_pm3
integer, parameter, public mtlr_atomic_perturbations
integer, parameter, public do_method_mndo
integer, parameter, public xtb_vdw_type_d4
integer, parameter, public do_method_gapw
integer, parameter, public do_method_mndod
integer, parameter, public rel_trans_atom
integer, parameter, public xtb_vdw_type_none
integer, parameter, public do_method_am1
integer, parameter, public do_method_dftb
integer, parameter, public wfi_use_prev_wf_method_nr
integer, parameter, public do_spin_density
integer, parameter, public do_qmmm_gauss
integer, parameter, public rel_none
integer, parameter, public general_roks
integer, parameter, public vdw_pairpot_dftd2
integer, parameter, public do_method_lrigpw
integer, parameter, public sic_none
integer, parameter, public dispersion_d2
integer, parameter, public do_method_xtb
integer, parameter, public mtlr_reference_from_atomic
integer, parameter, public restart_guess
integer, parameter, public do_method_pm6fm
integer, parameter, public xc_vdw_fun_pairpot
integer, parameter, public do_et_ddapc
integer, parameter, public vdw_pairpot_dftd3bj
integer, parameter, public do_method_gapw_xc
integer, parameter, public do_method_pm6
integer, parameter, public hden_atomic
objects that represent the structure of input sections and the data contained in an input section
integer function, dimension(:), pointer, public section_get_ivals(section_vals, keyword_name)
...
integer function, public section_get_ival(section_vals, keyword_name)
...
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
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.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
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.
Definition machine.F:17
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Definition machine.F:127
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.
Definition mp2_setup.F:14
subroutine, public read_mp2_section(input, mp2_env)
...
Definition mp2_setup.F:62
Types needed for MP2 calculations.
Definition mp2_types.F:14
subroutine, public mp2_env_create(mp2_env)
...
Definition mp2_types.F:445
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.
Calculation of the spherical harmonics and the corresponding orbital transformation matrices.
subroutine, public init_spherical_harmonics(maxl, output_unit)
Initialize or update the orbital transformation matrices.
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:
Definition physcon.F:68
real(kind=dp), parameter, public kelvin
Definition physcon.F:165
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.
Definition qs_mo_types.F:22
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).
interface to tblite
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)
Definition transport.F:19
subroutine, public transport_env_create(qs_env)
creates the transport environment
Definition transport.F:122
type(xc_rho_cflags_type) function, public xc_functionals_get_needs(functionals, lsd, calc_potential)
...
contains the structure
Read xTB parameters.
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.
Definition xtb_types.F:20
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)
...
Definition xtb_types.F:206
subroutine, public allocate_xtb_atom_param(xtb_parameter)
...
Definition xtb_types.F:101
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)
...
Definition xtb_types.F:313
subroutine, public write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
...
Definition xtb_types.F:383
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
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.
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.
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...