(git:97501a3)
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-2025 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: &
52 USE cp_output_handling, ONLY: cp_p_file,&
62 USE ec_environment, ONLY: ec_env_create,&
81 USE gamma, ONLY: init_md_ftable
84 USE header, ONLY: dftb_header,&
85 qs_header,&
86 se_header,&
91 USE input_constants, ONLY: &
106 USE kinds, ONLY: default_string_length,&
107 dp
111 USE kpoint_types, ONLY: get_kpoint_info,&
119 USE machine, ONLY: m_flush
120 USE mathconstants, ONLY: pi
125 USE mp2_setup, ONLY: read_mp2_section
126 USE mp2_types, ONLY: mp2_env_create,&
135 USE pw_env_types, ONLY: pw_env_type
152 USE qs_gcp_types, ONLY: qs_gcp_type
153 USE qs_gcp_utils, ONLY: qs_gcp_env_set,&
166 USE qs_kind_types, ONLY: &
169 USE qs_ks_types, ONLY: qs_ks_env_create,&
173 USE qs_mo_types, ONLY: allocate_mo_set,&
176 USE qs_rho0_methods, ONLY: init_rho0
181 USE qs_subsys_types, ONLY: qs_subsys_get,&
204 USE tblite_interface, ONLY: tb_get_basis,&
206 tb_init_wf,&
209 USE xtb_parameters, ONLY: init_xtb_basis,&
215#include "./base/base_uses.f90"
216
217 IMPLICIT NONE
218
219 PRIVATE
220
221 ! *** Global parameters ***
222 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_environment'
223
224 ! *** Public subroutines ***
225 PUBLIC :: qs_init
226
227CONTAINS
228
229! **************************************************************************************************
230!> \brief Read the input and the database files for the setup of the
231!> QUICKSTEP environment.
232!> \param qs_env ...
233!> \param para_env ...
234!> \param root_section ...
235!> \param globenv ...
236!> \param cp_subsys ...
237!> \param kpoint_env ...
238!> \param cell ...
239!> \param cell_ref ...
240!> \param qmmm ...
241!> \param qmmm_env_qm ...
242!> \param force_env_section ...
243!> \param subsys_section ...
244!> \param use_motion_section ...
245!> \param silent ...
246!> \author Creation (22.05.2000,MK)
247! **************************************************************************************************
248 SUBROUTINE qs_init(qs_env, para_env, root_section, globenv, cp_subsys, kpoint_env, cell, cell_ref, &
249 qmmm, qmmm_env_qm, force_env_section, subsys_section, &
250 use_motion_section, silent)
251
252 TYPE(qs_environment_type), POINTER :: qs_env
253 TYPE(mp_para_env_type), POINTER :: para_env
254 TYPE(section_vals_type), OPTIONAL, POINTER :: root_section
255 TYPE(global_environment_type), OPTIONAL, POINTER :: globenv
256 TYPE(cp_subsys_type), OPTIONAL, POINTER :: cp_subsys
257 TYPE(kpoint_type), OPTIONAL, POINTER :: kpoint_env
258 TYPE(cell_type), OPTIONAL, POINTER :: cell, cell_ref
259 LOGICAL, INTENT(IN), OPTIONAL :: qmmm
260 TYPE(qmmm_env_qm_type), OPTIONAL, POINTER :: qmmm_env_qm
261 TYPE(section_vals_type), POINTER :: force_env_section, subsys_section
262 LOGICAL, INTENT(IN) :: use_motion_section
263 LOGICAL, INTENT(IN), OPTIONAL :: silent
264
265 CHARACTER(LEN=default_string_length) :: basis_type
266 INTEGER :: ikind, method_id, nelectron_total, &
267 nkind, nkp_grid(3)
268 LOGICAL :: do_admm_rpa, do_ec_hfx, do_et, do_exx, do_hfx, do_kpoints, is_identical, is_semi, &
269 mp2_present, my_qmmm, qmmm_decoupl, same_except_frac, use_ref_cell
270 REAL(kind=dp), DIMENSION(:, :), POINTER :: rtmat
271 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
272 TYPE(cell_type), POINTER :: my_cell, my_cell_ref
273 TYPE(cp_blacs_env_type), POINTER :: blacs_env
274 TYPE(dft_control_type), POINTER :: dft_control
275 TYPE(distribution_1d_type), POINTER :: local_particles
276 TYPE(energy_correction_type), POINTER :: ec_env
277 TYPE(excited_energy_type), POINTER :: exstate_env
278 TYPE(harris_type), POINTER :: harris_env
279 TYPE(kpoint_type), POINTER :: kpoints
280 TYPE(lri_environment_type), POINTER :: lri_env
281 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
282 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
283 TYPE(qs_ks_env_type), POINTER :: ks_env
284 TYPE(qs_subsys_type), POINTER :: subsys
285 TYPE(qs_wf_history_type), POINTER :: wf_history
286 TYPE(rel_control_type), POINTER :: rel_control
287 TYPE(scf_control_type), POINTER :: scf_control
288 TYPE(section_vals_type), POINTER :: dft_section, ec_hfx_section, ec_section, &
289 et_coupling_section, hfx_section, kpoint_section, mp2_section, rpa_hfx_section, &
290 transport_section
291
292 NULLIFY (my_cell, my_cell_ref, atomic_kind_set, particle_set, &
293 qs_kind_set, kpoint_section, dft_section, ec_section, &
294 subsys, ks_env, dft_control, blacs_env)
295
296 CALL set_qs_env(qs_env, input=force_env_section)
297 IF (.NOT. ASSOCIATED(subsys_section)) THEN
298 subsys_section => section_vals_get_subs_vals(force_env_section, "SUBSYS")
299 END IF
300
301 ! QMMM
302 my_qmmm = .false.
303 IF (PRESENT(qmmm)) my_qmmm = qmmm
304 qmmm_decoupl = .false.
305 IF (PRESENT(qmmm_env_qm)) THEN
306 IF (qmmm_env_qm%qmmm_coupl_type == do_qmmm_gauss .OR. &
307 qmmm_env_qm%qmmm_coupl_type == do_qmmm_swave) THEN
308 ! For GAUSS/SWAVE methods there could be a DDAPC decoupling requested
309 qmmm_decoupl = my_qmmm .AND. qmmm_env_qm%periodic .AND. qmmm_env_qm%multipole
310 END IF
311 qs_env%qmmm_env_qm => qmmm_env_qm
312 END IF
313 CALL set_qs_env(qs_env=qs_env, qmmm=my_qmmm)
314
315 ! Possibly initialize arrays for SE
316 CALL section_vals_val_get(force_env_section, "DFT%QS%METHOD", i_val=method_id)
317 SELECT CASE (method_id)
320 CALL init_se_intd_array()
321 is_semi = .true.
323 is_semi = .true.
324 CASE DEFAULT
325 is_semi = .false.
326 END SELECT
327
328 ALLOCATE (subsys)
329 CALL qs_subsys_create(subsys, para_env, &
330 force_env_section=force_env_section, &
331 subsys_section=subsys_section, &
332 use_motion_section=use_motion_section, &
333 root_section=root_section, &
334 cp_subsys=cp_subsys, cell=cell, cell_ref=cell_ref, &
335 elkind=is_semi, silent=silent)
336
337 ALLOCATE (ks_env)
338 CALL qs_ks_env_create(ks_env)
339 CALL set_ks_env(ks_env, subsys=subsys)
340 CALL set_qs_env(qs_env, ks_env=ks_env)
341
342 CALL qs_subsys_get(subsys, &
343 cell=my_cell, &
344 cell_ref=my_cell_ref, &
345 use_ref_cell=use_ref_cell, &
346 atomic_kind_set=atomic_kind_set, &
347 qs_kind_set=qs_kind_set, &
348 particle_set=particle_set)
349
350 CALL set_ks_env(ks_env, para_env=para_env)
351 IF (PRESENT(globenv)) THEN
352 CALL cp_blacs_env_create(blacs_env, para_env, globenv%blacs_grid_layout, &
353 globenv%blacs_repeatable)
354 ELSE
355 CALL cp_blacs_env_create(blacs_env, para_env)
356 END IF
357 CALL set_ks_env(ks_env, blacs_env=blacs_env)
358 CALL cp_blacs_env_release(blacs_env)
359
360 ! *** Setup the grids for the G-space Interpolation if any
361 CALL cp_ddapc_ewald_create(qs_env%cp_ddapc_ewald, qmmm_decoupl, my_cell, &
362 force_env_section, subsys_section, para_env)
363
364 ! kpoints
365 IF (PRESENT(kpoint_env)) THEN
366 kpoints => kpoint_env
367 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
368 CALL kpoint_initialize(kpoints, particle_set, my_cell)
369 ELSE
370 NULLIFY (kpoints)
371 CALL kpoint_create(kpoints)
372 CALL set_qs_env(qs_env=qs_env, kpoints=kpoints)
373 kpoint_section => section_vals_get_subs_vals(qs_env%input, "DFT%KPOINTS")
374 CALL read_kpoint_section(kpoints, kpoint_section, my_cell%hmat)
375 CALL kpoint_initialize(kpoints, particle_set, my_cell)
376 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
377 CALL write_kpoint_info(kpoints, dft_section)
378 END IF
379
380 CALL qs_init_subsys(qs_env, para_env, subsys, my_cell, my_cell_ref, use_ref_cell, &
381 subsys_section, silent=silent)
382
383 CALL get_qs_env(qs_env, dft_control=dft_control)
384 IF (method_id == do_method_lrigpw .OR. dft_control%qs_control%lri_optbas) THEN
385 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
386 CALL lri_env_basis("LRI", qs_env, lri_env, qs_kind_set)
387 ELSE IF (method_id == do_method_rigpw) THEN
388 CALL cp_warn(__location__, "Experimental code: "// &
389 "RIGPW should only be used for testing.")
390 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
391 CALL lri_env_basis("RI", qs_env, lri_env, qs_kind_set)
392 END IF
393
394 IF (my_qmmm .AND. PRESENT(qmmm_env_qm) .AND. .NOT. dft_control%qs_control%commensurate_mgrids) THEN
395 IF (qmmm_env_qm%qmmm_coupl_type == do_qmmm_gauss .OR. qmmm_env_qm%qmmm_coupl_type == do_qmmm_swave) THEN
396 CALL cp_abort(__location__, "QM/MM with coupling GAUSS or S-WAVE requires "// &
397 "keyword FORCE_EVAL/DFT/MGRID/COMMENSURATE to be enabled.")
398 END IF
399 END IF
400
401 ! more kpoint stuff
402 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints, blacs_env=blacs_env)
403 IF (do_kpoints) THEN
404 CALL kpoint_env_initialize(kpoints, para_env, blacs_env, with_aux_fit=dft_control%do_admm)
405 CALL kpoint_initialize_mos(kpoints, qs_env%mos)
406 CALL get_qs_env(qs_env=qs_env, wf_history=wf_history)
407 CALL wfi_create_for_kp(wf_history)
408 END IF
409 ! basis set symmetry rotations
410 IF (do_kpoints) THEN
411 CALL qs_basis_rotation(qs_env, kpoints)
412 END IF
413
414 do_hfx = .false.
415 hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%HF")
416 CALL section_vals_get(hfx_section, explicit=do_hfx)
417 CALL get_qs_env(qs_env, dft_control=dft_control, scf_control=scf_control, nelectron_total=nelectron_total)
418 IF (do_hfx) THEN
419 ! Retrieve particle_set and atomic_kind_set (needed for both kinds of initialization)
420 nkp_grid = 1
421 IF (do_kpoints) CALL get_kpoint_info(kpoints, nkp_grid=nkp_grid)
422 IF (dft_control%do_admm) THEN
423 basis_type = 'AUX_FIT'
424 ELSE
425 basis_type = 'ORB'
426 END IF
427 CALL hfx_create(qs_env%x_data, para_env, hfx_section, atomic_kind_set, &
428 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
429 nelectron_total=nelectron_total, nkp_grid=nkp_grid)
430 END IF
431
432 mp2_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION")
433 CALL section_vals_get(mp2_section, explicit=mp2_present)
434 IF (mp2_present) THEN
435 cpassert(ASSOCIATED(qs_env%mp2_env))
436 CALL read_mp2_section(qs_env%input, qs_env%mp2_env)
437 ! create the EXX section if necessary
438 do_exx = .false.
439 rpa_hfx_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%HF")
440 CALL section_vals_get(rpa_hfx_section, explicit=do_exx)
441 IF (do_exx) THEN
442
443 ! do_exx in call of hfx_create decides whether to go without ADMM (do_exx=.TRUE.) or with
444 ! ADMM (do_exx=.FALSE.)
445 CALL section_vals_val_get(mp2_section, "RI_RPA%ADMM", l_val=do_admm_rpa)
446
447 ! Reuse the HFX integrals from the qs_env if applicable
448 qs_env%mp2_env%ri_rpa%reuse_hfx = .true.
449 IF (.NOT. do_hfx) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
450 CALL compare_hfx_sections(hfx_section, rpa_hfx_section, is_identical, same_except_frac)
451 IF (.NOT. (is_identical .OR. same_except_frac)) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
452 IF (dft_control%do_admm .AND. .NOT. do_admm_rpa) qs_env%mp2_env%ri_rpa%reuse_hfx = .false.
453
454 IF (.NOT. qs_env%mp2_env%ri_rpa%reuse_hfx) THEN
455 IF (do_admm_rpa) THEN
456 basis_type = 'AUX_FIT'
457 ELSE
458 basis_type = 'ORB'
459 END IF
460 CALL hfx_create(qs_env%mp2_env%ri_rpa%x_data, para_env, rpa_hfx_section, atomic_kind_set, &
461 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
462 nelectron_total=nelectron_total)
463 ELSE
464 qs_env%mp2_env%ri_rpa%x_data => qs_env%x_data
465 END IF
466 END IF
467 END IF
468
469 IF (dft_control%qs_control%do_kg) THEN
470 CALL cite_reference(iannuzzi2006)
471 CALL kg_env_create(qs_env, qs_env%kg_env, qs_kind_set, qs_env%input)
472 END IF
473
474 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
475 CALL section_vals_val_get(dft_section, "EXCITED_STATES%_SECTION_PARAMETERS_", &
476 l_val=qs_env%excited_state)
477 NULLIFY (exstate_env)
478 CALL exstate_create(exstate_env, qs_env%excited_state, dft_section)
479 CALL set_qs_env(qs_env, exstate_env=exstate_env)
480
481 et_coupling_section => section_vals_get_subs_vals(qs_env%input, &
482 "PROPERTIES%ET_COUPLING")
483 CALL section_vals_get(et_coupling_section, explicit=do_et)
484 IF (do_et) CALL et_coupling_create(qs_env%et_coupling)
485
486 transport_section => section_vals_get_subs_vals(qs_env%input, "DFT%TRANSPORT")
487 CALL section_vals_get(transport_section, explicit=qs_env%do_transport)
488 IF (qs_env%do_transport) THEN
489 CALL transport_env_create(qs_env)
490 END IF
491
492 CALL get_qs_env(qs_env, harris_env=harris_env)
493 IF (qs_env%harris_method) THEN
494 ! initialize the Harris input density and potential integrals
495 CALL get_qs_env(qs_env, local_particles=local_particles)
496 CALL harris_rhoin_init(harris_env%rhoin, "RHOIN", qs_kind_set, atomic_kind_set, &
497 local_particles, dft_control%nspins)
498 ! Print information of the HARRIS section
499 CALL harris_write_input(harris_env)
500 END IF
501
502 NULLIFY (ec_env)
503 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
504 CALL section_vals_val_get(dft_section, "ENERGY_CORRECTION%_SECTION_PARAMETERS_", &
505 l_val=qs_env%energy_correction)
506 ec_section => section_vals_get_subs_vals(qs_env%input, "DFT%ENERGY_CORRECTION")
507 CALL ec_env_create(qs_env, ec_env, dft_section, ec_section)
508 CALL set_qs_env(qs_env, ec_env=ec_env)
509
510 IF (qs_env%energy_correction) THEN
511 ! Energy correction with Hartree-Fock exchange
512 ec_hfx_section => section_vals_get_subs_vals(ec_section, "XC%HF")
513 CALL section_vals_get(ec_hfx_section, explicit=do_ec_hfx)
514
515 IF (ec_env%do_ec_hfx) THEN
516
517 ! Hybrid functionals require same basis
518 IF (ec_env%basis_inconsistent) THEN
519 CALL cp_abort(__location__, &
520 "Energy correction methods with hybrid functionals: "// &
521 "correction and ground state need to use the same basis. "// &
522 "Checked by comparing basis set names only.")
523 END IF
524
525 ! Similar to RPA_HFX we can check if HFX integrals from the qs_env can be reused
526 IF (ec_env%do_ec_admm .AND. .NOT. dft_control%do_admm) THEN
527 CALL cp_abort(__location__, "Need an ADMM input section for ADMM EC to work")
528 END IF
529
530 ec_env%reuse_hfx = .true.
531 IF (.NOT. do_hfx) ec_env%reuse_hfx = .false.
532 CALL compare_hfx_sections(hfx_section, ec_hfx_section, is_identical, same_except_frac)
533 IF (.NOT. (is_identical .OR. same_except_frac)) ec_env%reuse_hfx = .false.
534 IF (dft_control%do_admm .AND. .NOT. ec_env%do_ec_admm) ec_env%reuse_hfx = .false.
535
536 IF (.NOT. ec_env%reuse_hfx) THEN
537 IF (ec_env%do_ec_admm) THEN
538 basis_type = 'AUX_FIT'
539 ELSE
540 basis_type = 'ORB'
541 END IF
542 CALL hfx_create(ec_env%x_data, para_env, ec_hfx_section, atomic_kind_set, &
543 qs_kind_set, particle_set, dft_control, my_cell, orb_basis=basis_type, &
544 nelectron_total=nelectron_total)
545 ELSE
546 ec_env%x_data => qs_env%x_data
547 END IF
548 END IF
549
550 ! Print information of the EC section
551 CALL ec_write_input(ec_env)
552
553 END IF
554
555 IF (dft_control%qs_control%do_almo_scf) THEN
556 CALL almo_scf_env_create(qs_env)
557 END IF
558
559 ! see if we have atomic relativistic corrections
560 CALL get_qs_env(qs_env, rel_control=rel_control)
561 IF (rel_control%rel_method /= rel_none) THEN
562 IF (rel_control%rel_transformation == rel_trans_atom) THEN
563 nkind = SIZE(atomic_kind_set)
564 DO ikind = 1, nkind
565 NULLIFY (rtmat)
566 CALL calculate_atomic_relkin(atomic_kind_set(ikind), qs_kind_set(ikind), rel_control, rtmat)
567 IF (ASSOCIATED(rtmat)) CALL set_qs_kind(qs_kind_set(ikind), reltmat=rtmat)
568 END DO
569 END IF
570 END IF
571
572 END SUBROUTINE qs_init
573
574! **************************************************************************************************
575!> \brief Initialize the qs environment (subsys)
576!> \param qs_env ...
577!> \param para_env ...
578!> \param subsys ...
579!> \param cell ...
580!> \param cell_ref ...
581!> \param use_ref_cell ...
582!> \param subsys_section ...
583!> \param silent ...
584!> \author Creation (22.05.2000,MK)
585! **************************************************************************************************
586 SUBROUTINE qs_init_subsys(qs_env, para_env, subsys, cell, cell_ref, use_ref_cell, subsys_section, &
587 silent)
588
589 TYPE(qs_environment_type), POINTER :: qs_env
590 TYPE(mp_para_env_type), POINTER :: para_env
591 TYPE(qs_subsys_type), POINTER :: subsys
592 TYPE(cell_type), POINTER :: cell, cell_ref
593 LOGICAL, INTENT(in) :: use_ref_cell
594 TYPE(section_vals_type), POINTER :: subsys_section
595 LOGICAL, INTENT(in), OPTIONAL :: silent
596
597 CHARACTER(len=*), PARAMETER :: routinen = 'qs_init_subsys'
598
599 CHARACTER(len=2) :: element_symbol
600 INTEGER :: gfn_type, handle, ikind, ispin, iw, lmax_sphere, maxl, maxlgto, maxlgto_lri, &
601 maxlppl, maxlppnl, method_id, multiplicity, my_ival, n_ao, n_mo_add, natom, nelectron, &
602 ngauss, nkind, output_unit, sort_basis, tnadd_method
603 INTEGER, DIMENSION(2) :: n_mo, nelectron_spin
604 INTEGER, DIMENSION(5) :: occ
605 LOGICAL :: all_potential_present, be_silent, do_kpoints, do_ri_hfx, do_ri_mp2, do_ri_rpa, &
606 do_ri_sos_mp2, do_rpa_ri_exx, do_wfc_im_time, e1terms, has_unit_metric, lribas, &
607 mp2_present, orb_gradient
608 REAL(kind=dp) :: alpha, ccore, ewald_rcut, fxx, maxocc, &
609 rcut, total_zeff_corr, verlet_skin, &
610 zeff_correction
611 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
612 TYPE(cp_logger_type), POINTER :: logger
613 TYPE(dft_control_type), POINTER :: dft_control
614 TYPE(dftb_control_type), POINTER :: dftb_control
615 TYPE(distribution_1d_type), POINTER :: local_molecules, local_particles
616 TYPE(ewald_environment_type), POINTER :: ewald_env
617 TYPE(ewald_pw_type), POINTER :: ewald_pw
618 TYPE(fist_nonbond_env_type), POINTER :: se_nonbond_env
619 TYPE(gapw_control_type), POINTER :: gapw_control
620 TYPE(gto_basis_set_type), POINTER :: aux_fit_basis, lri_aux_basis, &
621 rhoin_basis, ri_aux_basis_set, &
622 ri_hfx_basis, ri_xas_basis, &
623 tmp_basis_set
624 TYPE(harris_type), POINTER :: harris_env
625 TYPE(local_rho_type), POINTER :: local_rho_set
626 TYPE(lri_environment_type), POINTER :: lri_env
627 TYPE(mo_set_type), DIMENSION(:), POINTER :: mos, mos_last_converged
628 TYPE(molecule_kind_type), DIMENSION(:), POINTER :: molecule_kind_set
629 TYPE(molecule_type), DIMENSION(:), POINTER :: molecule_set
630 TYPE(mp2_type), POINTER :: mp2_env
631 TYPE(nddo_mpole_type), POINTER :: se_nddo_mpole
632 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
633 TYPE(pw_env_type), POINTER :: pw_env
634 TYPE(qs_control_type), POINTER :: qs_control
635 TYPE(qs_dftb_pairpot_type), DIMENSION(:, :), &
636 POINTER :: dftb_potential
637 TYPE(qs_dispersion_type), POINTER :: dispersion_env
638 TYPE(qs_energy_type), POINTER :: energy
639 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
640 TYPE(qs_gcp_type), POINTER :: gcp_env
641 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
642 TYPE(qs_kind_type), POINTER :: qs_kind
643 TYPE(qs_ks_env_type), POINTER :: ks_env
644 TYPE(qs_wf_history_type), POINTER :: wf_history
645 TYPE(rho0_mpole_type), POINTER :: rho0_mpole
646 TYPE(rho_atom_type), DIMENSION(:), POINTER :: rho_atom_set
647 TYPE(scf_control_type), POINTER :: scf_control
648 TYPE(se_taper_type), POINTER :: se_taper
649 TYPE(section_vals_type), POINTER :: dft_section, et_coupling_section, et_ddapc_section, &
650 ewald_section, harris_section, lri_section, mp2_section, nl_section, poisson_section, &
651 pp_section, print_section, qs_section, rixs_section, se_section, tddfpt_section, &
652 xc_section
653 TYPE(semi_empirical_control_type), POINTER :: se_control
654 TYPE(semi_empirical_si_type), POINTER :: se_store_int_env
655 TYPE(xtb_control_type), POINTER :: xtb_control
656
657 CALL timeset(routinen, handle)
658 NULLIFY (logger)
659 logger => cp_get_default_logger()
660 output_unit = cp_logger_get_default_io_unit(logger)
661
662 be_silent = .false.
663 IF (PRESENT(silent)) be_silent = silent
664
665 CALL cite_reference(cp2kqs2020)
666
667 ! Initialise the Quickstep environment
668 NULLIFY (mos, se_taper)
669 NULLIFY (dft_control)
670 NULLIFY (energy)
671 NULLIFY (force)
672 NULLIFY (local_molecules)
673 NULLIFY (local_particles)
674 NULLIFY (scf_control)
675 NULLIFY (dft_section)
676 NULLIFY (et_coupling_section)
677 NULLIFY (ks_env)
678 NULLIFY (mos_last_converged)
679 dft_section => section_vals_get_subs_vals(qs_env%input, "DFT")
680 qs_section => section_vals_get_subs_vals(dft_section, "QS")
681 et_coupling_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%ET_COUPLING")
682 ! reimplemented TDDFPT
683 tddfpt_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%TDDFPT")
684 rixs_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%RIXS")
685
686 CALL qs_subsys_get(subsys, particle_set=particle_set, &
687 qs_kind_set=qs_kind_set, &
688 atomic_kind_set=atomic_kind_set, &
689 molecule_set=molecule_set, &
690 molecule_kind_set=molecule_kind_set)
691
692 ! *** Read the input section with the DFT control parameters ***
693 CALL read_dft_control(dft_control, dft_section)
694
695 ! set periodicity flag
696 dft_control%qs_control%periodicity = sum(cell%perd)
697
698 ! Read the input section with the Quickstep control parameters
699 CALL read_qs_section(dft_control%qs_control, qs_section)
700
701 ! *** Print the Quickstep program banner (copyright and version number) ***
702 IF (.NOT. be_silent) THEN
703 iw = cp_print_key_unit_nr(logger, dft_section, "PRINT%PROGRAM_BANNER", extension=".Log")
704 CALL section_vals_val_get(qs_section, "METHOD", i_val=method_id)
705 SELECT CASE (method_id)
706 CASE DEFAULT
707 CALL qs_header(iw)
710 CALL se_header(iw)
711 CASE (do_method_dftb)
712 CALL dftb_header(iw)
713 CASE (do_method_xtb)
714 IF (dft_control%qs_control%xtb_control%do_tblite) THEN
715 CALL tblite_header(iw, dft_control%qs_control%xtb_control%tblite_method)
716 ELSE
717 gfn_type = dft_control%qs_control%xtb_control%gfn_type
718 CALL xtb_header(iw, gfn_type)
719 END IF
720 END SELECT
721 CALL cp_print_key_finished_output(iw, logger, dft_section, &
722 "PRINT%PROGRAM_BANNER")
723 END IF
724
725 IF (dft_control%do_sccs .AND. dft_control%qs_control%gapw) THEN
726 cpabort("SCCS is not yet implemented with GAPW")
727 END IF
728 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
729 IF (do_kpoints) THEN
730 ! reset some of the settings for wfn extrapolation for kpoints
731 SELECT CASE (dft_control%qs_control%wf_interpolation_method_nr)
733 dft_control%qs_control%wf_interpolation_method_nr = wfi_use_guess_method_nr
734 END SELECT
735 END IF
736
737 ! ******* check if any kind of electron transfer calculation has to be performed
738 CALL section_vals_val_get(et_coupling_section, "TYPE_OF_CONSTRAINT", i_val=my_ival)
739 dft_control%qs_control%et_coupling_calc = .false.
740 IF (my_ival == do_et_ddapc) THEN
741 et_ddapc_section => section_vals_get_subs_vals(et_coupling_section, "DDAPC_RESTRAINT_A")
742 dft_control%qs_control%et_coupling_calc = .true.
743 dft_control%qs_control%ddapc_restraint = .true.
744 CALL read_ddapc_section(dft_control%qs_control, ddapc_restraint_section=et_ddapc_section)
745 END IF
746
747 CALL read_mgrid_section(dft_control%qs_control, dft_section)
748
749 ! reimplemented TDDFPT
750 CALL read_tddfpt2_control(dft_control%tddfpt2_control, tddfpt_section, dft_control%qs_control)
751
752 ! rixs
753 CALL section_vals_get(rixs_section, explicit=qs_env%do_rixs)
754 IF (qs_env%do_rixs) THEN
755 CALL read_rixs_control(dft_control%rixs_control, rixs_section, dft_control%qs_control)
756 END IF
757
758 ! Create relativistic control section
759 block
760 TYPE(rel_control_type), POINTER :: rel_control
761 ALLOCATE (rel_control)
762 CALL rel_c_create(rel_control)
763 CALL rel_c_read_parameters(rel_control, dft_section)
764 CALL set_qs_env(qs_env, rel_control=rel_control)
765 END block
766
767 ! *** Read DFTB parameter files ***
768 IF (dft_control%qs_control%method_id == do_method_dftb) THEN
769 NULLIFY (ewald_env, ewald_pw, dftb_potential)
770 dftb_control => dft_control%qs_control%dftb_control
771 CALL qs_dftb_param_init(atomic_kind_set, qs_kind_set, dftb_control, dftb_potential, &
772 subsys_section=subsys_section, para_env=para_env)
773 CALL set_qs_env(qs_env, dftb_potential=dftb_potential)
774 ! check for Ewald
775 IF (dftb_control%do_ewald) THEN
776 ALLOCATE (ewald_env)
777 CALL ewald_env_create(ewald_env, para_env)
778 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
779 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
780 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
781 print_section => section_vals_get_subs_vals(qs_env%input, "PRINT%GRID_INFORMATION")
782 CALL get_qs_kind_set(qs_kind_set, basis_rcut=ewald_rcut)
783 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat)
784 ALLOCATE (ewald_pw)
785 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
786 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
787 END IF
788 ELSEIF (dft_control%qs_control%method_id == do_method_xtb) THEN
789 ! *** Read xTB parameter file ***
790 xtb_control => dft_control%qs_control%xtb_control
791 CALL get_qs_env(qs_env, nkind=nkind)
792 IF (xtb_control%do_tblite) THEN
793 ! put geometry to tblite
794 CALL tb_init_geometry(qs_env, qs_env%tb_tblite)
795 ! select tblite method
796 CALL tb_set_calculator(qs_env%tb_tblite, xtb_control%tblite_method)
797 !set up wave function
798 CALL tb_init_wf(qs_env%tb_tblite)
799 !get basis set
800 DO ikind = 1, nkind
801 qs_kind => qs_kind_set(ikind)
802 ! Setup proper xTB parameters
803 cpassert(.NOT. ASSOCIATED(qs_kind%xtb_parameter))
804 CALL allocate_xtb_atom_param(qs_kind%xtb_parameter)
805 ! Set default parameters
806 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
807
808 NULLIFY (tmp_basis_set)
809 CALL tb_get_basis(qs_env%tb_tblite, tmp_basis_set, element_symbol, qs_kind%xtb_parameter, occ)
810 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, "ORB")
811 CALL set_xtb_atom_param(qs_kind%xtb_parameter, occupation=occ)
812
813 !setting the potential for the computation
814 zeff_correction = 0.0_dp
815 CALL init_potential(qs_kind%all_potential, itype="BARE", &
816 zeff=real(sum(occ), dp), zeff_correction=zeff_correction)
817 END DO
818 ELSE
819 NULLIFY (ewald_env, ewald_pw)
820 DO ikind = 1, nkind
821 qs_kind => qs_kind_set(ikind)
822 ! Setup proper xTB parameters
823 cpassert(.NOT. ASSOCIATED(qs_kind%xtb_parameter))
824 CALL allocate_xtb_atom_param(qs_kind%xtb_parameter)
825 ! Set default parameters
826 gfn_type = dft_control%qs_control%xtb_control%gfn_type
827 CALL get_qs_kind(qs_kind, element_symbol=element_symbol)
828 CALL xtb_parameters_init(qs_kind%xtb_parameter, gfn_type, element_symbol, &
829 xtb_control%parameter_file_path, xtb_control%parameter_file_name, &
830 para_env)
831 ! set dependent parameters
832 CALL xtb_parameters_set(qs_kind%xtb_parameter)
833 ! Generate basis set
834 NULLIFY (tmp_basis_set)
835 IF (qs_kind%xtb_parameter%z == 1) THEN
836 ! special case hydrogen
837 ngauss = xtb_control%h_sto_ng
838 ELSE
839 ngauss = xtb_control%sto_ng
840 END IF
841 IF (qs_kind%xtb_parameter%defined) THEN
842 CALL init_xtb_basis(qs_kind%xtb_parameter, tmp_basis_set, ngauss)
843 CALL add_basis_set_to_container(qs_kind%basis_sets, tmp_basis_set, "ORB")
844 ELSE
845 CALL set_qs_kind(qs_kind, ghost=.true.)
846 IF (ASSOCIATED(qs_kind%all_potential)) THEN
847 DEALLOCATE (qs_kind%all_potential%elec_conf)
848 DEALLOCATE (qs_kind%all_potential)
849 END IF
850 END IF
851 ! potential
852 IF (qs_kind%xtb_parameter%defined) THEN
853 zeff_correction = 0.0_dp
854 CALL init_potential(qs_kind%all_potential, itype="BARE", &
855 zeff=qs_kind%xtb_parameter%zeff, zeff_correction=zeff_correction)
856 CALL get_potential(qs_kind%all_potential, alpha_core_charge=alpha)
857 ccore = qs_kind%xtb_parameter%zeff*sqrt((alpha/pi)**3)
858 CALL set_potential(qs_kind%all_potential, ccore_charge=ccore)
859 qs_kind%xtb_parameter%zeff = qs_kind%xtb_parameter%zeff - zeff_correction
860 END IF
861 END DO
862 !
863 ! set repulsive potential range
864 !
865 ALLOCATE (xtb_control%rcpair(nkind, nkind))
866 CALL xtb_pp_radius(qs_kind_set, xtb_control%rcpair, xtb_control%eps_pair, xtb_control%kf)
867 ! check for Ewald
868 IF (xtb_control%do_ewald) THEN
869 ALLOCATE (ewald_env)
870 CALL ewald_env_create(ewald_env, para_env)
871 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
872 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
873 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
874 print_section => section_vals_get_subs_vals(qs_env%input, "PRINT%GRID_INFORMATION")
875 IF (gfn_type == 0) THEN
876 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat, &
877 silent=silent, pset="EEQ")
878 ELSE
879 CALL read_ewald_section_tb(ewald_env, ewald_section, cell_ref%hmat, &
880 silent=silent)
881 END IF
882 ALLOCATE (ewald_pw)
883 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, print_section=print_section)
884 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw)
885 END IF
886 END IF
887 END IF
888 ! lri or ri env initialization
889 lri_section => section_vals_get_subs_vals(qs_section, "LRIGPW")
890 IF (dft_control%qs_control%method_id == do_method_lrigpw .OR. &
891 dft_control%qs_control%lri_optbas .OR. &
892 dft_control%qs_control%method_id == do_method_rigpw) THEN
893 CALL lri_env_init(lri_env, lri_section)
894 CALL set_qs_env(qs_env, lri_env=lri_env)
895 END IF
896
897 ! *** Check basis and fill in missing parts ***
898 CALL check_qs_kind_set(qs_kind_set, dft_control, subsys_section=subsys_section)
899
900 ! *** Check that no all-electron potential is present if GPW or GAPW_XC
901 CALL get_qs_kind_set(qs_kind_set, all_potential_present=all_potential_present)
902 IF ((dft_control%qs_control%method_id == do_method_gpw) .OR. &
903 (dft_control%qs_control%method_id == do_method_gapw_xc) .OR. &
904 (dft_control%qs_control%method_id == do_method_ofgpw)) THEN
905 IF (all_potential_present) THEN
906 cpabort("All-electron calculations with GPW, GAPW_XC, and OFGPW are not implemented")
907 END IF
908 END IF
909
910 ! DFT+U
911 CALL get_qs_kind_set(qs_kind_set, dft_plus_u_atom_present=dft_control%dft_plus_u)
912
913 IF (dft_control%do_admm) THEN
914 ! Check if ADMM basis is available
915 CALL get_qs_env(qs_env, nkind=nkind)
916 DO ikind = 1, nkind
917 NULLIFY (aux_fit_basis)
918 qs_kind => qs_kind_set(ikind)
919 CALL get_qs_kind(qs_kind, basis_set=aux_fit_basis, basis_type="AUX_FIT")
920 IF (.NOT. (ASSOCIATED(aux_fit_basis))) THEN
921 ! AUX_FIT basis set is not available
922 cpabort("AUX_FIT basis set is not defined. ")
923 END IF
924 END DO
925 END IF
926
927 lribas = .false.
928 e1terms = .false.
929 IF (dft_control%qs_control%method_id == do_method_lrigpw) THEN
930 lribas = .true.
931 CALL get_qs_env(qs_env, lri_env=lri_env)
932 e1terms = lri_env%exact_1c_terms
933 END IF
934 IF (dft_control%qs_control%do_kg) THEN
935 CALL section_vals_val_get(dft_section, "KG_METHOD%TNADD_METHOD", i_val=tnadd_method)
936 IF (tnadd_method == kg_tnadd_embed_ri) lribas = .true.
937 END IF
938 IF (lribas) THEN
939 ! Check if LRI_AUX basis is available, auto-generate if needed
940 CALL get_qs_env(qs_env, nkind=nkind)
941 DO ikind = 1, nkind
942 NULLIFY (lri_aux_basis)
943 qs_kind => qs_kind_set(ikind)
944 CALL get_qs_kind(qs_kind, basis_set=lri_aux_basis, basis_type="LRI_AUX")
945 IF (.NOT. (ASSOCIATED(lri_aux_basis))) THEN
946 ! LRI_AUX basis set is not yet loaded
947 CALL cp_warn(__location__, "Automatic Generation of LRI_AUX basis. "// &
948 "This is experimental code.")
949 ! Generate a default basis
950 CALL create_lri_aux_basis_set(lri_aux_basis, qs_kind, dft_control%auto_basis_lri_aux, e1terms)
951 CALL add_basis_set_to_container(qs_kind%basis_sets, lri_aux_basis, "LRI_AUX")
952 END IF
953 END DO
954 END IF
955
956 CALL section_vals_val_get(qs_env%input, "DFT%XC%HF%RI%_SECTION_PARAMETERS_", l_val=do_ri_hfx)
957 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%HF%RI%_SECTION_PARAMETERS_", &
958 l_val=do_rpa_ri_exx)
959 IF (do_ri_hfx .OR. do_rpa_ri_exx) THEN
960 CALL get_qs_env(qs_env, nkind=nkind)
961 CALL section_vals_val_get(qs_env%input, "DFT%SORT_BASIS", i_val=sort_basis)
962 DO ikind = 1, nkind
963 NULLIFY (ri_hfx_basis)
964 qs_kind => qs_kind_set(ikind)
965 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_hfx_basis, &
966 basis_type="RI_HFX")
967 IF (.NOT. (ASSOCIATED(ri_hfx_basis))) THEN
968 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto)
969 IF (dft_control%do_admm) THEN
970 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hfx, &
971 basis_type="AUX_FIT", basis_sort=sort_basis)
972 ELSE
973 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hfx, &
974 basis_sort=sort_basis)
975 END IF
976 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_hfx_basis, "RI_HFX")
977 END IF
978 END DO
979 END IF
980
981 IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
982 ! Check if RI_HXC basis is available, auto-generate if needed
983 CALL get_qs_env(qs_env, nkind=nkind)
984 DO ikind = 1, nkind
985 NULLIFY (ri_hfx_basis)
986 qs_kind => qs_kind_set(ikind)
987 CALL get_qs_kind(qs_kind, basis_set=ri_hfx_basis, basis_type="RI_HXC")
988 IF (.NOT. (ASSOCIATED(ri_hfx_basis))) THEN
989 ! Generate a default basis
990 CALL create_ri_aux_basis_set(ri_hfx_basis, qs_kind, dft_control%auto_basis_ri_hxc)
991 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_hfx_basis, "RI_HXC")
992 END IF
993 END DO
994 END IF
995
996 ! Harris method
997 NULLIFY (harris_env)
998 CALL section_vals_val_get(dft_section, "HARRIS_METHOD%_SECTION_PARAMETERS_", &
999 l_val=qs_env%harris_method)
1000 harris_section => section_vals_get_subs_vals(dft_section, "HARRIS_METHOD")
1001 CALL harris_env_create(qs_env, harris_env, harris_section)
1002 CALL set_qs_env(qs_env, harris_env=harris_env)
1003 !
1004 IF (qs_env%harris_method) THEN
1005 CALL get_qs_env(qs_env, nkind=nkind)
1006 ! Check if RI_HXC basis is available, auto-generate if needed
1007 DO ikind = 1, nkind
1008 NULLIFY (tmp_basis_set)
1009 qs_kind => qs_kind_set(ikind)
1010 CALL get_qs_kind(qs_kind, basis_set=rhoin_basis, basis_type="RHOIN")
1011 IF (.NOT. (ASSOCIATED(rhoin_basis))) THEN
1012 ! Generate a default basis
1013 CALL create_ri_aux_basis_set(tmp_basis_set, qs_kind, dft_control%auto_basis_ri_hxc)
1014 IF (qs_env%harris_env%density_source == hden_atomic) THEN
1015 CALL create_primitive_basis_set(tmp_basis_set, rhoin_basis, lmax=0)
1016 CALL deallocate_gto_basis_set(tmp_basis_set)
1017 ELSE
1018 rhoin_basis => tmp_basis_set
1019 END IF
1020 CALL add_basis_set_to_container(qs_kind%basis_sets, rhoin_basis, "RHOIN")
1021 END IF
1022 END DO
1023 END IF
1024
1025 mp2_section => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION")
1026 CALL section_vals_get(mp2_section, explicit=mp2_present)
1027 IF (mp2_present) THEN
1028
1029 ! basis should be sorted for imaginary time RPA/GW
1030 CALL section_vals_val_get(qs_env%input, "DFT%SORT_BASIS", i_val=sort_basis)
1031 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%LOW_SCALING%_SECTION_PARAMETERS_", &
1032 l_val=do_wfc_im_time)
1033
1034 IF (do_wfc_im_time .AND. sort_basis /= basis_sort_zet) THEN
1035 CALL cp_warn(__location__, &
1036 "Low-scaling RPA requires SORT_BASIS EXP keyword (in DFT input section) for good performance")
1037 END IF
1038
1039 ! Check if RI_AUX basis (for MP2/RPA) is given, auto-generate if not
1040 CALL mp2_env_create(qs_env%mp2_env)
1041 CALL get_qs_env(qs_env, mp2_env=mp2_env, nkind=nkind)
1042 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_MP2%_SECTION_PARAMETERS_", l_val=do_ri_mp2)
1043 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_SOS_MP2%_SECTION_PARAMETERS_", l_val=do_ri_sos_mp2)
1044 CALL section_vals_val_get(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%_SECTION_PARAMETERS_", l_val=do_ri_rpa)
1045 IF (do_ri_mp2 .OR. do_ri_sos_mp2 .OR. do_ri_rpa) THEN
1046 DO ikind = 1, nkind
1047 NULLIFY (ri_aux_basis_set)
1048 qs_kind => qs_kind_set(ikind)
1049 CALL get_qs_kind(qs_kind=qs_kind, basis_set=ri_aux_basis_set, &
1050 basis_type="RI_AUX")
1051 IF (.NOT. (ASSOCIATED(ri_aux_basis_set))) THEN
1052 ! RI_AUX basis set is not yet loaded
1053 ! Generate a default basis
1054 CALL create_ri_aux_basis_set(ri_aux_basis_set, qs_kind, dft_control%auto_basis_ri_aux, basis_sort=sort_basis)
1055 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_aux_basis_set, "RI_AUX")
1056 ! Add a flag, which allows to check if the basis was generated
1057 ! when applying ERI_METHOD OS to mp2, ri-rpa, gw etc
1058 qs_env%mp2_env%ri_aux_auto_generated = .true.
1059 END IF
1060 END DO
1061 END IF
1062
1063 END IF
1064
1065 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs) THEN
1066 ! Check if RI_XAS basis is given, auto-generate if not
1067 CALL get_qs_env(qs_env, nkind=nkind)
1068 DO ikind = 1, nkind
1069 NULLIFY (ri_xas_basis)
1070 qs_kind => qs_kind_set(ikind)
1071 CALL get_qs_kind(qs_kind, basis_set=ri_xas_basis, basis_type="RI_XAS")
1072 IF (.NOT. ASSOCIATED(ri_xas_basis)) THEN
1073 ! Generate a default basis
1074 CALL create_ri_aux_basis_set(ri_xas_basis, qs_kind, dft_control%auto_basis_ri_xas)
1075 CALL add_basis_set_to_container(qs_kind%basis_sets, ri_xas_basis, "RI_XAS")
1076 END IF
1077 END DO
1078 END IF
1079
1080 ! *** Initialize the spherical harmonics and ***
1081 ! *** the orbital transformation matrices ***
1082 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, maxlppl=maxlppl, maxlppnl=maxlppnl)
1083
1084 lmax_sphere = dft_control%qs_control%gapw_control%lmax_sphere
1085 IF (lmax_sphere .LT. 0) THEN
1086 lmax_sphere = 2*maxlgto
1087 dft_control%qs_control%gapw_control%lmax_sphere = lmax_sphere
1088 END IF
1089 IF (dft_control%qs_control%method_id == do_method_lrigpw .OR. dft_control%qs_control%lri_optbas) THEN
1090 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type="LRI_AUX")
1091 !take maxlgto from lri basis if larger (usually)
1092 maxlgto = max(maxlgto, maxlgto_lri)
1093 ELSE IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
1094 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type="RI_HXC")
1095 maxlgto = max(maxlgto, maxlgto_lri)
1096 END IF
1097 IF (dft_control%do_xas_tdp_calculation .OR. qs_env%do_rixs) THEN
1098 !done as a precaution
1099 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto_lri, basis_type="RI_XAS")
1100 maxlgto = max(maxlgto, maxlgto_lri)
1101 END IF
1102 maxl = max(2*maxlgto, maxlppl, maxlppnl, lmax_sphere) + 1
1103
1104 CALL init_orbital_pointers(maxl)
1105
1106 CALL init_spherical_harmonics(maxl, 0)
1107
1108 ! *** Initialise the qs_kind_set ***
1109 CALL init_qs_kind_set(qs_kind_set)
1110
1111 ! *** Initialise GAPW soft basis and projectors
1112 IF (dft_control%qs_control%method_id == do_method_gapw .OR. &
1113 dft_control%qs_control%method_id == do_method_gapw_xc) THEN
1114 qs_control => dft_control%qs_control
1115 CALL init_gapw_basis_set(qs_kind_set, qs_control, qs_env%input)
1116 END IF
1117
1118 ! *** Initialize the pretabulation for the calculation of the ***
1119 ! *** incomplete Gamma function F_n(t) after McMurchie-Davidson ***
1120 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto)
1121 maxl = max(3*maxlgto + 1, 0)
1122 CALL init_md_ftable(maxl)
1123
1124 ! *** Initialize the atomic interaction radii ***
1125 CALL init_interaction_radii(dft_control%qs_control, qs_kind_set)
1126 !
1127 IF (dft_control%qs_control%method_id == do_method_xtb) THEN
1128 IF (.NOT. dft_control%qs_control%xtb_control%do_tblite) THEN
1129 ! cutoff radius
1130 DO ikind = 1, nkind
1131 qs_kind => qs_kind_set(ikind)
1132 IF (qs_kind%xtb_parameter%defined) THEN
1133 CALL get_qs_kind(qs_kind, basis_set=tmp_basis_set)
1134 rcut = xtb_control%coulomb_sr_cut
1135 fxx = 2.0_dp*xtb_control%coulomb_sr_eps*qs_kind%xtb_parameter%eta**2
1136 fxx = 0.80_dp*(1.0_dp/fxx)**0.3333_dp
1137 rcut = min(rcut, xtb_control%coulomb_sr_cut)
1138 qs_kind%xtb_parameter%rcut = min(rcut, fxx)
1139 ELSE
1140 qs_kind%xtb_parameter%rcut = 0.0_dp
1141 END IF
1142 END DO
1143 END IF
1144 END IF
1145
1146 IF (.NOT. be_silent) THEN
1147 CALL write_pgf_orb_radii("orb", atomic_kind_set, qs_kind_set, subsys_section)
1148 CALL write_pgf_orb_radii("aux", atomic_kind_set, qs_kind_set, subsys_section)
1149 CALL write_pgf_orb_radii("lri", atomic_kind_set, qs_kind_set, subsys_section)
1150 CALL write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
1151 CALL write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
1152 CALL write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
1153 CALL write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
1154 END IF
1155
1156 ! *** Distribute molecules and atoms using the new data structures ***
1157 CALL distribute_molecules_1d(atomic_kind_set=atomic_kind_set, &
1158 particle_set=particle_set, &
1159 local_particles=local_particles, &
1160 molecule_kind_set=molecule_kind_set, &
1161 molecule_set=molecule_set, &
1162 local_molecules=local_molecules, &
1163 force_env_section=qs_env%input)
1164
1165 ! *** SCF parameters ***
1166 ALLOCATE (scf_control)
1167 ! set (non)-self consistency
1168 IF (dft_control%qs_control%dftb) THEN
1169 scf_control%non_selfconsistent = .NOT. dft_control%qs_control%dftb_control%self_consistent
1170 END IF
1171 IF (dft_control%qs_control%xtb) THEN
1172 IF (dft_control%qs_control%xtb_control%do_tblite) THEN
1173 scf_control%non_selfconsistent = .false.
1174 ELSE
1175 scf_control%non_selfconsistent = (dft_control%qs_control%xtb_control%gfn_type == 0)
1176 END IF
1177 END IF
1178 IF (qs_env%harris_method) THEN
1179 scf_control%non_selfconsistent = .true.
1180 END IF
1181 CALL scf_c_create(scf_control)
1182 CALL scf_c_read_parameters(scf_control, dft_section)
1183 ! *** Allocate the data structure for Quickstep energies ***
1184 CALL allocate_qs_energy(energy)
1185
1186 ! check for orthogonal basis
1187 has_unit_metric = .false.
1188 IF (dft_control%qs_control%semi_empirical) THEN
1189 IF (dft_control%qs_control%se_control%orthogonal_basis) has_unit_metric = .true.
1190 END IF
1191 IF (dft_control%qs_control%dftb) THEN
1192 IF (dft_control%qs_control%dftb_control%orthogonal_basis) has_unit_metric = .true.
1193 END IF
1194 CALL set_qs_env(qs_env, has_unit_metric=has_unit_metric)
1195
1196 ! *** Activate the interpolation ***
1197 CALL wfi_create(wf_history, &
1198 interpolation_method_nr= &
1199 dft_control%qs_control%wf_interpolation_method_nr, &
1200 extrapolation_order=dft_control%qs_control%wf_extrapolation_order, &
1201 has_unit_metric=has_unit_metric)
1202
1203 ! *** Set the current Quickstep environment ***
1204 CALL set_qs_env(qs_env=qs_env, &
1205 scf_control=scf_control, &
1206 wf_history=wf_history)
1207
1208 CALL qs_subsys_set(subsys, &
1209 cell_ref=cell_ref, &
1210 use_ref_cell=use_ref_cell, &
1211 energy=energy, &
1212 force=force)
1213
1214 CALL get_qs_env(qs_env, ks_env=ks_env)
1215 CALL set_ks_env(ks_env, dft_control=dft_control)
1216
1217 CALL qs_subsys_set(subsys, local_molecules=local_molecules, &
1218 local_particles=local_particles, cell=cell)
1219
1220 CALL distribution_1d_release(local_particles)
1221 CALL distribution_1d_release(local_molecules)
1222 CALL wfi_release(wf_history)
1223
1224 CALL get_qs_env(qs_env=qs_env, &
1225 atomic_kind_set=atomic_kind_set, &
1226 dft_control=dft_control, &
1227 scf_control=scf_control)
1228
1229 ! decide what conditions need mo_derivs
1230 ! right now, this only appears to be OT
1231 IF (dft_control%qs_control%do_ls_scf .OR. &
1232 dft_control%qs_control%do_almo_scf) THEN
1233 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1234 ELSE
1235 IF (scf_control%use_ot) THEN
1236 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.true.)
1237 ELSE
1238 CALL set_qs_env(qs_env=qs_env, requires_mo_derivs=.false.)
1239 END IF
1240 END IF
1241
1242 ! XXXXXXX this is backwards XXXXXXXX
1243 dft_control%smear = scf_control%smear%do_smear
1244
1245 ! Periodic efield needs equal occupation and orbital gradients
1246 IF (.NOT. (dft_control%qs_control%dftb .OR. dft_control%qs_control%xtb)) THEN
1247 IF (dft_control%apply_period_efield) THEN
1248 CALL get_qs_env(qs_env=qs_env, requires_mo_derivs=orb_gradient)
1249 IF (.NOT. orb_gradient) THEN
1250 CALL cp_abort(__location__, "Periodic Efield needs orbital gradient and direct optimization."// &
1251 " Use the OT optimization method.")
1252 END IF
1253 IF (dft_control%smear) THEN
1254 CALL cp_abort(__location__, "Periodic Efield needs equal occupation numbers."// &
1255 " Smearing option is not possible.")
1256 END IF
1257 END IF
1258 END IF
1259
1260 ! Initialize the GAPW local densities and potentials
1261 IF (dft_control%qs_control%method_id == do_method_gapw .OR. &
1262 dft_control%qs_control%method_id == do_method_gapw_xc) THEN
1263 ! *** Allocate and initialize the set of atomic densities ***
1264 NULLIFY (rho_atom_set)
1265 gapw_control => dft_control%qs_control%gapw_control
1266 CALL init_rho_atom(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
1267 CALL set_qs_env(qs_env=qs_env, rho_atom_set=rho_atom_set)
1268 IF (dft_control%qs_control%method_id /= do_method_gapw_xc) THEN
1269 CALL get_qs_env(qs_env=qs_env, local_rho_set=local_rho_set, natom=natom)
1270 ! *** Allocate and initialize the compensation density rho0 ***
1271 CALL init_rho0(local_rho_set, qs_env, gapw_control)
1272 ! *** Allocate and Initialize the local coulomb term ***
1273 CALL init_coulomb_local(qs_env%hartree_local, natom)
1274 END IF
1275 ! NLCC
1276 CALL init_gapw_nlcc(qs_kind_set)
1277 ELSE IF (dft_control%qs_control%method_id == do_method_lrigpw) THEN
1278 ! allocate local ri environment
1279 ! nothing to do here?
1280 ELSE IF (dft_control%qs_control%method_id == do_method_rigpw) THEN
1281 ! allocate ri environment
1282 ! nothing to do here?
1283 ELSE IF (dft_control%qs_control%semi_empirical) THEN
1284 NULLIFY (se_store_int_env, se_nddo_mpole, se_nonbond_env)
1285 natom = SIZE(particle_set)
1286 se_section => section_vals_get_subs_vals(qs_section, "SE")
1287 se_control => dft_control%qs_control%se_control
1288
1289 ! Make the cutoff radii choice a bit smarter
1290 CALL se_cutoff_compatible(se_control, se_section, cell, output_unit)
1291
1292 SELECT CASE (dft_control%qs_control%method_id)
1293 CASE DEFAULT
1296 ! Neighbor lists have to be MAX(interaction range, orbital range)
1297 ! set new kind radius
1298 CALL init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, subsys_section)
1299 END SELECT
1300 ! Initialize to zero the max multipole to treat in the EWALD scheme..
1301 se_control%max_multipole = do_multipole_none
1302 ! check for Ewald
1303 IF (se_control%do_ewald .OR. se_control%do_ewald_gks) THEN
1304 ALLOCATE (ewald_env)
1305 CALL ewald_env_create(ewald_env, para_env)
1306 poisson_section => section_vals_get_subs_vals(dft_section, "POISSON")
1307 CALL ewald_env_set(ewald_env, poisson_section=poisson_section)
1308 ewald_section => section_vals_get_subs_vals(poisson_section, "EWALD")
1309 print_section => section_vals_get_subs_vals(qs_env%input, &
1310 "PRINT%GRID_INFORMATION")
1311 CALL read_ewald_section(ewald_env, ewald_section)
1312 ! Create ewald grids
1313 ALLOCATE (ewald_pw)
1314 CALL ewald_pw_create(ewald_pw, ewald_env, cell, cell_ref, &
1315 print_section=print_section)
1316 ! Initialize ewald grids
1317 CALL ewald_pw_grid_update(ewald_pw, ewald_env, cell%hmat)
1318 ! Setup the nonbond environment (real space part of Ewald)
1319 CALL ewald_env_get(ewald_env, rcut=ewald_rcut)
1320 ! Setup the maximum level of multipoles to be treated in the periodic SE scheme
1321 IF (se_control%do_ewald) THEN
1322 CALL ewald_env_get(ewald_env, max_multipole=se_control%max_multipole)
1323 END IF
1324 CALL section_vals_val_get(se_section, "NEIGHBOR_LISTS%VERLET_SKIN", &
1325 r_val=verlet_skin)
1326 ALLOCATE (se_nonbond_env)
1327 CALL fist_nonbond_env_create(se_nonbond_env, atomic_kind_set, do_nonbonded=.true., &
1328 do_electrostatics=.true., verlet_skin=verlet_skin, ewald_rcut=ewald_rcut, &
1329 ei_scale14=0.0_dp, vdw_scale14=0.0_dp, shift_cutoff=.false.)
1330 ! Create and Setup NDDO multipole environment
1331 CALL nddo_mpole_setup(se_nddo_mpole, natom)
1332 CALL set_qs_env(qs_env, ewald_env=ewald_env, ewald_pw=ewald_pw, &
1333 se_nonbond_env=se_nonbond_env, se_nddo_mpole=se_nddo_mpole)
1334 ! Handle the residual integral part 1/R^3
1335 CALL semi_empirical_expns3_setup(qs_kind_set, se_control, &
1336 dft_control%qs_control%method_id)
1337 END IF
1338 ! Taper function
1339 CALL se_taper_create(se_taper, se_control%integral_screening, se_control%do_ewald, &
1340 se_control%taper_cou, se_control%range_cou, &
1341 se_control%taper_exc, se_control%range_exc, &
1342 se_control%taper_scr, se_control%range_scr, &
1343 se_control%taper_lrc, se_control%range_lrc)
1344 CALL set_qs_env(qs_env, se_taper=se_taper)
1345 ! Store integral environment
1346 CALL semi_empirical_si_create(se_store_int_env, se_section)
1347 CALL set_qs_env(qs_env, se_store_int_env=se_store_int_env)
1348 END IF
1349
1350 ! Initialize possible dispersion parameters
1351 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
1352 dft_control%qs_control%method_id == do_method_gapw .OR. &
1353 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
1354 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
1355 dft_control%qs_control%method_id == do_method_rigpw .OR. &
1356 dft_control%qs_control%method_id == do_method_ofgpw) THEN
1357 ALLOCATE (dispersion_env)
1358 NULLIFY (xc_section)
1359 xc_section => section_vals_get_subs_vals(dft_section, "XC")
1360 CALL qs_dispersion_env_set(dispersion_env, xc_section)
1361 IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN
1362 NULLIFY (pp_section)
1363 pp_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%PAIR_POTENTIAL")
1364 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
1365 ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN
1366 NULLIFY (nl_section)
1367 nl_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%NON_LOCAL")
1368 CALL qs_dispersion_nonloc_init(dispersion_env, para_env)
1369 END IF
1370 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1371 ELSE IF (dft_control%qs_control%method_id == do_method_dftb) THEN
1372 ALLOCATE (dispersion_env)
1373 ! set general defaults
1374 dispersion_env%doabc = .false.
1375 dispersion_env%c9cnst = .false.
1376 dispersion_env%lrc = .false.
1377 dispersion_env%srb = .false.
1378 dispersion_env%verbose = .false.
1379 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
1380 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
1381 dispersion_env%d3_exclude_pair)
1382 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1383 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1384 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1385 IF (dftb_control%dispersion .AND. dftb_control%dispersion_type == dispersion_d3) THEN
1386 dispersion_env%type = xc_vdw_fun_pairpot
1387 dispersion_env%pp_type = vdw_pairpot_dftd3
1388 dispersion_env%eps_cn = dftb_control%epscn
1389 dispersion_env%s6 = dftb_control%sd3(1)
1390 dispersion_env%sr6 = dftb_control%sd3(2)
1391 dispersion_env%s8 = dftb_control%sd3(3)
1392 dispersion_env%domol = .false.
1393 dispersion_env%kgc8 = 0._dp
1394 dispersion_env%rc_disp = dftb_control%rcdisp
1395 dispersion_env%exp_pre = 0._dp
1396 dispersion_env%scaling = 0._dp
1397 dispersion_env%nd3_exclude_pair = 0
1398 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1399 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
1400 ELSEIF (dftb_control%dispersion .AND. dftb_control%dispersion_type == dispersion_d3bj) THEN
1401 dispersion_env%type = xc_vdw_fun_pairpot
1402 dispersion_env%pp_type = vdw_pairpot_dftd3bj
1403 dispersion_env%eps_cn = dftb_control%epscn
1404 dispersion_env%s6 = dftb_control%sd3bj(1)
1405 dispersion_env%a1 = dftb_control%sd3bj(2)
1406 dispersion_env%s8 = dftb_control%sd3bj(3)
1407 dispersion_env%a2 = dftb_control%sd3bj(4)
1408 dispersion_env%domol = .false.
1409 dispersion_env%kgc8 = 0._dp
1410 dispersion_env%rc_disp = dftb_control%rcdisp
1411 dispersion_env%exp_pre = 0._dp
1412 dispersion_env%scaling = 0._dp
1413 dispersion_env%nd3_exclude_pair = 0
1414 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1415 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
1416 ELSEIF (dftb_control%dispersion .AND. dftb_control%dispersion_type == dispersion_d2) THEN
1417 dispersion_env%type = xc_vdw_fun_pairpot
1418 dispersion_env%pp_type = vdw_pairpot_dftd2
1419 dispersion_env%exp_pre = dftb_control%exp_pre
1420 dispersion_env%scaling = dftb_control%scaling
1421 dispersion_env%parameter_file_name = dftb_control%dispersion_parameter_file
1422 dispersion_env%rc_disp = dftb_control%rcdisp
1423 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
1424 ELSE
1425 dispersion_env%type = xc_vdw_fun_none
1426 END IF
1427 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1428 ELSE IF (dft_control%qs_control%method_id == do_method_xtb) THEN
1429 IF (.NOT. (dft_control%qs_control%xtb_control%do_tblite)) THEN
1430 ALLOCATE (dispersion_env)
1431 ! set general defaults
1432 dispersion_env%doabc = .false.
1433 dispersion_env%c9cnst = .false.
1434 dispersion_env%lrc = .false.
1435 dispersion_env%srb = .false.
1436 dispersion_env%verbose = .false.
1437 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, &
1438 dispersion_env%r0ab, dispersion_env%rcov, &
1439 dispersion_env%r2r4, dispersion_env%cn, &
1440 dispersion_env%cnkind, dispersion_env%cnlist, &
1441 dispersion_env%d3_exclude_pair)
1442 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1443 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1444 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1445 dispersion_env%type = xc_vdw_fun_pairpot
1446 dispersion_env%eps_cn = xtb_control%epscn
1447 dispersion_env%s6 = xtb_control%s6
1448 dispersion_env%s8 = xtb_control%s8
1449 dispersion_env%a1 = xtb_control%a1
1450 dispersion_env%a2 = xtb_control%a2
1451 dispersion_env%domol = .false.
1452 dispersion_env%kgc8 = 0._dp
1453 dispersion_env%rc_disp = xtb_control%rcdisp
1454 dispersion_env%rc_d4 = xtb_control%rcdisp
1455 dispersion_env%exp_pre = 0._dp
1456 dispersion_env%scaling = 0._dp
1457 dispersion_env%nd3_exclude_pair = 0
1458 dispersion_env%parameter_file_name = xtb_control%dispersion_parameter_file
1459 !
1460 SELECT CASE (xtb_control%vdw_type)
1462 dispersion_env%pp_type = vdw_pairpot_dftd3bj
1463 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
1464 IF (xtb_control%vdw_type == xtb_vdw_type_none) dispersion_env%type = xc_vdw_fun_none
1465 CASE (xtb_vdw_type_d4)
1466 dispersion_env%pp_type = vdw_pairpot_dftd4
1467 dispersion_env%ref_functional = "none"
1468 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, &
1469 dispersion_env, para_env=para_env)
1470 dispersion_env%cnfun = 2
1471 CASE DEFAULT
1472 cpabort("vdw type")
1473 END SELECT
1474 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1475 END IF
1476 ELSE IF (dft_control%qs_control%semi_empirical) THEN
1477 ALLOCATE (dispersion_env)
1478 ! set general defaults
1479 dispersion_env%doabc = .false.
1480 dispersion_env%c9cnst = .false.
1481 dispersion_env%lrc = .false.
1482 dispersion_env%srb = .false.
1483 dispersion_env%verbose = .false.
1484 NULLIFY (dispersion_env%c6ab, dispersion_env%maxci, dispersion_env%r0ab, dispersion_env%rcov, &
1485 dispersion_env%r2r4, dispersion_env%cn, dispersion_env%cnkind, dispersion_env%cnlist, &
1486 dispersion_env%d3_exclude_pair)
1487 NULLIFY (dispersion_env%q_mesh, dispersion_env%kernel, dispersion_env%d2phi_dk2, &
1488 dispersion_env%d2y_dx2, dispersion_env%dftd_section)
1489 NULLIFY (dispersion_env%sab_vdw, dispersion_env%sab_cn)
1490 IF (se_control%dispersion) THEN
1491 dispersion_env%type = xc_vdw_fun_pairpot
1492 dispersion_env%pp_type = vdw_pairpot_dftd3
1493 dispersion_env%eps_cn = se_control%epscn
1494 dispersion_env%s6 = se_control%sd3(1)
1495 dispersion_env%sr6 = se_control%sd3(2)
1496 dispersion_env%s8 = se_control%sd3(3)
1497 dispersion_env%domol = .false.
1498 dispersion_env%kgc8 = 0._dp
1499 dispersion_env%rc_disp = se_control%rcdisp
1500 dispersion_env%exp_pre = 0._dp
1501 dispersion_env%scaling = 0._dp
1502 dispersion_env%nd3_exclude_pair = 0
1503 dispersion_env%parameter_file_name = se_control%dispersion_parameter_file
1504 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, para_env=para_env)
1505 ELSE
1506 dispersion_env%type = xc_vdw_fun_none
1507 END IF
1508 CALL set_qs_env(qs_env, dispersion_env=dispersion_env)
1509 END IF
1510
1511 ! Initialize possible geomertical counterpoise correction potential
1512 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
1513 dft_control%qs_control%method_id == do_method_gapw .OR. &
1514 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
1515 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
1516 dft_control%qs_control%method_id == do_method_rigpw .OR. &
1517 dft_control%qs_control%method_id == do_method_ofgpw) THEN
1518 ALLOCATE (gcp_env)
1519 NULLIFY (xc_section)
1520 xc_section => section_vals_get_subs_vals(dft_section, "XC")
1521 CALL qs_gcp_env_set(gcp_env, xc_section)
1522 CALL qs_gcp_init(qs_env, gcp_env)
1523 CALL set_qs_env(qs_env, gcp_env=gcp_env)
1524 END IF
1525
1526 ! *** Allocate the MO data types ***
1527 CALL get_qs_kind_set(qs_kind_set, nsgf=n_ao, nelectron=nelectron)
1528
1529 ! the total number of electrons
1530 nelectron = nelectron - dft_control%charge
1531
1532 IF (dft_control%multiplicity == 0) THEN
1533 IF (modulo(nelectron, 2) == 0) THEN
1534 dft_control%multiplicity = 1
1535 ELSE
1536 dft_control%multiplicity = 2
1537 END IF
1538 END IF
1539
1540 multiplicity = dft_control%multiplicity
1541
1542 IF ((dft_control%nspins < 1) .OR. (dft_control%nspins > 2)) THEN
1543 cpabort("nspins should be 1 or 2 for the time being ...")
1544 END IF
1545
1546 IF ((modulo(nelectron, 2) /= 0) .AND. (dft_control%nspins == 1)) THEN
1547 IF (.NOT. dft_control%qs_control%ofgpw .AND. .NOT. dft_control%smear) THEN
1548 cpabort("Use the LSD option for an odd number of electrons")
1549 END IF
1550 END IF
1551
1552 ! The transition potential method to calculate XAS needs LSD
1553 IF (dft_control%do_xas_calculation) THEN
1554 IF (dft_control%nspins == 1) THEN
1555 cpabort("Use the LSD option for XAS with transition potential")
1556 END IF
1557 END IF
1558
1559 ! assigning the number of states per spin initial version, not yet very
1560 ! general. Should work for an even number of electrons and a single
1561 ! additional electron this set of options that requires full matrices,
1562 ! however, makes things a bit ugly right now.... we try to make a
1563 ! distinction between the number of electrons per spin and the number of
1564 ! MOs per spin this should allow the use of fractional occupations later
1565 ! on
1566 IF (dft_control%qs_control%ofgpw) THEN
1567
1568 IF (dft_control%nspins == 1) THEN
1569 maxocc = nelectron
1570 nelectron_spin(1) = nelectron
1571 nelectron_spin(2) = 0
1572 n_mo(1) = 1
1573 n_mo(2) = 0
1574 ELSE
1575 IF (modulo(nelectron + multiplicity - 1, 2) /= 0) THEN
1576 cpabort("LSD: try to use a different multiplicity")
1577 END IF
1578 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
1579 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
1580 IF (nelectron_spin(1) < 0) THEN
1581 cpabort("LSD: too few electrons for this multiplicity")
1582 END IF
1583 maxocc = maxval(nelectron_spin)
1584 n_mo(1) = min(nelectron_spin(1), 1)
1585 n_mo(2) = min(nelectron_spin(2), 1)
1586 END IF
1587
1588 ELSE
1589
1590 IF (dft_control%nspins == 1) THEN
1591 maxocc = 2.0_dp
1592 nelectron_spin(1) = nelectron
1593 nelectron_spin(2) = 0
1594 IF (modulo(nelectron, 2) == 0) THEN
1595 n_mo(1) = nelectron/2
1596 ELSE
1597 n_mo(1) = int(nelectron/2._dp) + 1
1598 END IF
1599 n_mo(2) = 0
1600 ELSE
1601 maxocc = 1.0_dp
1602
1603 ! The simplist spin distribution is written here. Special cases will
1604 ! need additional user input
1605 IF (modulo(nelectron + multiplicity - 1, 2) /= 0) THEN
1606 cpabort("LSD: try to use a different multiplicity")
1607 END IF
1608
1609 nelectron_spin(1) = (nelectron + multiplicity - 1)/2
1610 nelectron_spin(2) = (nelectron - multiplicity + 1)/2
1611
1612 IF (nelectron_spin(2) < 0) THEN
1613 cpabort("LSD: too few electrons for this multiplicity")
1614 END IF
1615
1616 n_mo(1) = nelectron_spin(1)
1617 n_mo(2) = nelectron_spin(2)
1618
1619 END IF
1620
1621 END IF
1622
1623 ! Read the total_zeff_corr here [SGh]
1624 CALL get_qs_kind_set(qs_kind_set, total_zeff_corr=total_zeff_corr)
1625 ! store it in qs_env
1626 qs_env%total_zeff_corr = total_zeff_corr
1627
1628 ! store the number of electrons once an for all
1629 CALL qs_subsys_set(subsys, &
1630 nelectron_total=nelectron, &
1631 nelectron_spin=nelectron_spin)
1632
1633 ! Check and set number of added (unoccupied) MOs
1634 IF (dft_control%nspins == 2) THEN
1635 IF (scf_control%added_mos(2) < 0) THEN
1636 n_mo_add = n_ao - n_mo(2) ! use all available MOs
1637 ELSEIF (scf_control%added_mos(2) > 0) THEN
1638 n_mo_add = scf_control%added_mos(2)
1639 ELSE
1640 n_mo_add = scf_control%added_mos(1)
1641 END IF
1642 IF (n_mo_add > n_ao - n_mo(2)) THEN
1643 cpwarn("More ADDED_MOs requested for beta spin than available.")
1644 END IF
1645 scf_control%added_mos(2) = min(n_mo_add, n_ao - n_mo(2))
1646 n_mo(2) = n_mo(2) + scf_control%added_mos(2)
1647 END IF
1648
1649 ! proceed alpha orbitals after the beta orbitals; this is essential to avoid
1650 ! reduction in the number of available unoccupied molecular orbitals.
1651 ! E.g. n_ao = 10, nelectrons = 10, multiplicity = 3 implies n_mo(1) = 6, n_mo(2) = 4;
1652 ! added_mos(1:2) = (6,undef) should increase the number of molecular orbitals as
1653 ! n_mo(1) = min(n_ao, n_mo(1) + added_mos(1)) = 10, n_mo(2) = 10.
1654 ! However, if we try to proceed alpha orbitals first, this leads us n_mo(1:2) = (10,8)
1655 ! due to the following assignment instruction above:
1656 ! IF (scf_control%added_mos(2) > 0) THEN ... ELSE; n_mo_add = scf_control%added_mos(1); END IF
1657 IF (scf_control%added_mos(1) < 0) THEN
1658 scf_control%added_mos(1) = n_ao - n_mo(1) ! use all available MOs
1659 ELSEIF (scf_control%added_mos(1) > n_ao - n_mo(1)) THEN
1660 CALL cp_warn(__location__, &
1661 "More added MOs requested than available. "// &
1662 "The full set of unoccupied MOs will be used. "// &
1663 "Use 'ADDED_MOS -1' to always use all available MOs "// &
1664 "and to get rid of this warning.")
1665 END IF
1666 scf_control%added_mos(1) = min(scf_control%added_mos(1), n_ao - n_mo(1))
1667 n_mo(1) = n_mo(1) + scf_control%added_mos(1)
1668
1669 IF (dft_control%nspins == 2) THEN
1670 IF (n_mo(2) > n_mo(1)) &
1671 CALL cp_warn(__location__, &
1672 "More beta than alpha MOs requested. "// &
1673 "The number of beta MOs will be reduced to the number alpha MOs.")
1674 n_mo(2) = min(n_mo(1), n_mo(2))
1675 cpassert(n_mo(1) >= nelectron_spin(1))
1676 cpassert(n_mo(2) >= nelectron_spin(2))
1677 END IF
1678
1679 ! kpoints
1680 CALL get_qs_env(qs_env=qs_env, do_kpoints=do_kpoints)
1681 IF (do_kpoints .AND. dft_control%nspins == 2) THEN
1682 ! we need equal number of calculated states
1683 IF (n_mo(2) /= n_mo(1)) &
1684 CALL cp_warn(__location__, &
1685 "Kpoints: Different number of MOs requested. "// &
1686 "The number of beta MOs will be set to the number alpha MOs.")
1687 n_mo(2) = n_mo(1)
1688 cpassert(n_mo(1) >= nelectron_spin(1))
1689 cpassert(n_mo(2) >= nelectron_spin(2))
1690 END IF
1691
1692 ! Compatibility checks for smearing
1693 IF (scf_control%smear%do_smear) THEN
1694 IF (scf_control%added_mos(1) == 0) THEN
1695 cpabort("Extra MOs (ADDED_MOS) are required for smearing")
1696 END IF
1697 END IF
1698
1699 ! *** Some options require that all MOs are computed ... ***
1700 IF (btest(cp_print_key_should_output(logger%iter_info, dft_section, &
1701 "PRINT%MO/CARTESIAN"), &
1702 cp_p_file) .OR. &
1703 (scf_control%level_shift /= 0.0_dp) .OR. &
1704 (scf_control%diagonalization%eps_jacobi /= 0.0_dp) .OR. &
1705 (dft_control%roks .AND. (.NOT. scf_control%use_ot))) THEN
1706 n_mo(:) = n_ao
1707 END IF
1708
1709 ! Compatibility checks for ROKS
1710 IF (dft_control%roks .AND. (.NOT. scf_control%use_ot)) THEN
1711 IF (scf_control%roks_scheme == general_roks) THEN
1712 cpwarn("General ROKS scheme is not yet tested!")
1713 END IF
1714 IF (scf_control%smear%do_smear) THEN
1715 CALL cp_abort(__location__, &
1716 "The options ROKS and SMEAR are not compatible. "// &
1717 "Try UKS instead of ROKS")
1718 END IF
1719 END IF
1720 IF (dft_control%low_spin_roks) THEN
1721 SELECT CASE (dft_control%qs_control%method_id)
1722 CASE DEFAULT
1724 CALL cp_abort(__location__, &
1725 "xTB/DFTB methods are not compatible with low spin ROKS.")
1728 CALL cp_abort(__location__, &
1729 "SE methods are not compatible with low spin ROKS.")
1730 END SELECT
1731 END IF
1732
1733 ! in principle the restricted calculation could be performed
1734 ! using just one set of MOs and special casing most of the code
1735 ! right now we'll just take care of what is effectively an additional constraint
1736 ! at as few places as possible, just duplicating the beta orbitals
1737 IF (dft_control%restricted .AND. (output_unit > 0)) THEN
1738 ! it is really not yet tested till the end ! Joost
1739 WRITE (output_unit, *) ""
1740 WRITE (output_unit, *) " **************************************"
1741 WRITE (output_unit, *) " restricted calculation cutting corners"
1742 WRITE (output_unit, *) " experimental feature, check code "
1743 WRITE (output_unit, *) " **************************************"
1744 END IF
1745
1746 ! no point in allocating these things here ?
1747 IF (dft_control%qs_control%do_ls_scf) THEN
1748 NULLIFY (mos)
1749 ELSE
1750 ALLOCATE (mos(dft_control%nspins))
1751 DO ispin = 1, dft_control%nspins
1752 CALL allocate_mo_set(mo_set=mos(ispin), &
1753 nao=n_ao, &
1754 nmo=n_mo(ispin), &
1755 nelectron=nelectron_spin(ispin), &
1756 n_el_f=real(nelectron_spin(ispin), dp), &
1757 maxocc=maxocc, &
1758 flexible_electron_count=dft_control%relax_multiplicity)
1759 END DO
1760 END IF
1761
1762 CALL set_qs_env(qs_env, mos=mos)
1763
1764 ! allocate mos when switch_surf_dip is triggered [SGh]
1765 IF (dft_control%switch_surf_dip) THEN
1766 ALLOCATE (mos_last_converged(dft_control%nspins))
1767 DO ispin = 1, dft_control%nspins
1768 CALL allocate_mo_set(mo_set=mos_last_converged(ispin), &
1769 nao=n_ao, &
1770 nmo=n_mo(ispin), &
1771 nelectron=nelectron_spin(ispin), &
1772 n_el_f=real(nelectron_spin(ispin), dp), &
1773 maxocc=maxocc, &
1774 flexible_electron_count=dft_control%relax_multiplicity)
1775 END DO
1776 CALL set_qs_env(qs_env, mos_last_converged=mos_last_converged)
1777 END IF
1778
1779 IF (.NOT. be_silent) THEN
1780 ! Print the DFT control parameters
1781 CALL write_dft_control(dft_control, dft_section)
1782
1783 ! Print the vdW control parameters
1784 IF (dft_control%qs_control%method_id == do_method_gpw .OR. &
1785 dft_control%qs_control%method_id == do_method_gapw .OR. &
1786 dft_control%qs_control%method_id == do_method_gapw_xc .OR. &
1787 dft_control%qs_control%method_id == do_method_lrigpw .OR. &
1788 dft_control%qs_control%method_id == do_method_rigpw .OR. &
1789 dft_control%qs_control%method_id == do_method_dftb .OR. &
1790 (dft_control%qs_control%method_id == do_method_xtb .AND. &
1791 (.NOT. dft_control%qs_control%xtb_control%do_tblite)) .OR. &
1792 dft_control%qs_control%method_id == do_method_ofgpw) THEN
1793 CALL get_qs_env(qs_env, dispersion_env=dispersion_env)
1794 CALL qs_write_dispersion(qs_env, dispersion_env)
1795 END IF
1796
1797 ! Print the Quickstep control parameters
1798 CALL write_qs_control(dft_control%qs_control, dft_section)
1799
1800 ! Print the ADMM control parameters
1801 IF (dft_control%do_admm) THEN
1802 CALL write_admm_control(dft_control%admm_control, dft_section)
1803 END IF
1804
1805 ! Print XES/XAS control parameters
1806 IF (dft_control%do_xas_calculation) THEN
1807 CALL cite_reference(iannuzzi2007)
1808 !CALL write_xas_control(dft_control%xas_control,dft_section)
1809 END IF
1810
1811 ! Print the unnormalized basis set information (input data)
1812 CALL write_gto_basis_sets(qs_kind_set, subsys_section)
1813
1814 ! Print the atomic kind set
1815 CALL write_qs_kind_set(qs_kind_set, subsys_section)
1816
1817 ! Print the molecule kind set
1818 CALL write_molecule_kind_set(molecule_kind_set, subsys_section)
1819
1820 ! Print the total number of kinds, atoms, basis functions etc.
1821 CALL write_total_numbers(qs_kind_set, particle_set, qs_env%input)
1822
1823 ! Print the atomic coordinates
1824 CALL write_qs_particle_coordinates(particle_set, qs_kind_set, subsys_section, label="QUICKSTEP")
1825
1826 ! Print the interatomic distances
1827 CALL write_particle_distances(particle_set, cell, subsys_section)
1828
1829 ! Print the requested structure data
1830 CALL write_structure_data(particle_set, cell, subsys_section)
1831
1832 ! Print symmetry information
1833 CALL write_symmetry(particle_set, cell, subsys_section)
1834
1835 ! Print the SCF parameters
1836 IF ((.NOT. dft_control%qs_control%do_ls_scf) .AND. &
1837 (.NOT. dft_control%qs_control%do_almo_scf)) THEN
1838 CALL scf_c_write_parameters(scf_control, dft_section)
1839 END IF
1840 END IF
1841
1842 ! Sets up pw_env, qs_charges, mpools ...
1843 CALL qs_env_setup(qs_env)
1844
1845 ! Allocate and initialise rho0 soft on the global grid
1846 IF (dft_control%qs_control%method_id == do_method_gapw) THEN
1847 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, rho0_mpole=rho0_mpole)
1848 CALL rho0_s_grid_create(pw_env, rho0_mpole)
1849 END IF
1850
1851 IF (output_unit > 0) CALL m_flush(output_unit)
1852 CALL timestop(handle)
1853
1854 END SUBROUTINE qs_init_subsys
1855
1856! **************************************************************************************************
1857!> \brief Write the total number of kinds, atoms, etc. to the logical unit
1858!> number lunit.
1859!> \param qs_kind_set ...
1860!> \param particle_set ...
1861!> \param force_env_section ...
1862!> \author Creation (06.10.2000)
1863! **************************************************************************************************
1864 SUBROUTINE write_total_numbers(qs_kind_set, particle_set, force_env_section)
1865
1866 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
1867 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
1868 TYPE(section_vals_type), POINTER :: force_env_section
1869
1870 INTEGER :: maxlgto, maxlppl, maxlppnl, natom, ncgf, &
1871 nkind, npgf, nset, nsgf, nshell, &
1872 output_unit
1873 TYPE(cp_logger_type), POINTER :: logger
1874
1875 NULLIFY (logger)
1876 logger => cp_get_default_logger()
1877 output_unit = cp_print_key_unit_nr(logger, force_env_section, "PRINT%TOTAL_NUMBERS", &
1878 extension=".Log")
1879
1880 IF (output_unit > 0) THEN
1881 natom = SIZE(particle_set)
1882 nkind = SIZE(qs_kind_set)
1883
1884 CALL get_qs_kind_set(qs_kind_set, &
1885 maxlgto=maxlgto, &
1886 ncgf=ncgf, &
1887 npgf=npgf, &
1888 nset=nset, &
1889 nsgf=nsgf, &
1890 nshell=nshell, &
1891 maxlppl=maxlppl, &
1892 maxlppnl=maxlppnl)
1893
1894 WRITE (unit=output_unit, fmt="(/,/,T2,A)") &
1895 "TOTAL NUMBERS AND MAXIMUM NUMBERS"
1896
1897 IF (nset + npgf + ncgf > 0) THEN
1898 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T71,I10))") &
1899 "Total number of", &
1900 "- Atomic kinds: ", nkind, &
1901 "- Atoms: ", natom, &
1902 "- Shell sets: ", nset, &
1903 "- Shells: ", nshell, &
1904 "- Primitive Cartesian functions: ", npgf, &
1905 "- Cartesian basis functions: ", ncgf, &
1906 "- Spherical basis functions: ", nsgf
1907 ELSE IF (nshell + nsgf > 0) THEN
1908 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T71,I10))") &
1909 "Total number of", &
1910 "- Atomic kinds: ", nkind, &
1911 "- Atoms: ", natom, &
1912 "- Shells: ", nshell, &
1913 "- Spherical basis functions: ", nsgf
1914 ELSE
1915 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T71,I10))") &
1916 "Total number of", &
1917 "- Atomic kinds: ", nkind, &
1918 "- Atoms: ", natom
1919 END IF
1920
1921 IF ((maxlppl > -1) .AND. (maxlppnl > -1)) THEN
1922 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T75,I6))") &
1923 "Maximum angular momentum of the", &
1924 "- Orbital basis functions: ", maxlgto, &
1925 "- Local part of the GTH pseudopotential: ", maxlppl, &
1926 "- Non-local part of the GTH pseudopotential: ", maxlppnl
1927 ELSEIF (maxlppl > -1) THEN
1928 WRITE (unit=output_unit, fmt="(/,T3,A,(T30,A,T75,I6))") &
1929 "Maximum angular momentum of the", &
1930 "- Orbital basis functions: ", maxlgto, &
1931 "- Local part of the GTH pseudopotential: ", maxlppl
1932 ELSE
1933 WRITE (unit=output_unit, fmt="(/,T3,A,T75,I6)") &
1934 "Maximum angular momentum of the orbital basis functions: ", maxlgto
1935 END IF
1936
1937 ! LRI_AUX BASIS
1938 CALL get_qs_kind_set(qs_kind_set, &
1939 maxlgto=maxlgto, &
1940 ncgf=ncgf, &
1941 npgf=npgf, &
1942 nset=nset, &
1943 nsgf=nsgf, &
1944 nshell=nshell, &
1945 basis_type="LRI_AUX")
1946 IF (nset + npgf + ncgf > 0) THEN
1947 WRITE (unit=output_unit, fmt="(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1948 "LRI_AUX Basis: ", &
1949 "Total number of", &
1950 "- Shell sets: ", nset, &
1951 "- Shells: ", nshell, &
1952 "- Primitive Cartesian functions: ", npgf, &
1953 "- Cartesian basis functions: ", ncgf, &
1954 "- Spherical basis functions: ", nsgf
1955 WRITE (unit=output_unit, fmt="(T30,A,T75,I6)") &
1956 " Maximum angular momentum ", maxlgto
1957 END IF
1958
1959 ! RI_HXC BASIS
1960 CALL get_qs_kind_set(qs_kind_set, &
1961 maxlgto=maxlgto, &
1962 ncgf=ncgf, &
1963 npgf=npgf, &
1964 nset=nset, &
1965 nsgf=nsgf, &
1966 nshell=nshell, &
1967 basis_type="RI_HXC")
1968 IF (nset + npgf + ncgf > 0) THEN
1969 WRITE (unit=output_unit, fmt="(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1970 "RI_HXC Basis: ", &
1971 "Total number of", &
1972 "- Shell sets: ", nset, &
1973 "- Shells: ", nshell, &
1974 "- Primitive Cartesian functions: ", npgf, &
1975 "- Cartesian basis functions: ", ncgf, &
1976 "- Spherical basis functions: ", nsgf
1977 WRITE (unit=output_unit, fmt="(T30,A,T75,I6)") &
1978 " Maximum angular momentum ", maxlgto
1979 END IF
1980
1981 ! AUX_FIT BASIS
1982 CALL get_qs_kind_set(qs_kind_set, &
1983 maxlgto=maxlgto, &
1984 ncgf=ncgf, &
1985 npgf=npgf, &
1986 nset=nset, &
1987 nsgf=nsgf, &
1988 nshell=nshell, &
1989 basis_type="AUX_FIT")
1990 IF (nset + npgf + ncgf > 0) THEN
1991 WRITE (unit=output_unit, fmt="(/,T3,A,/,T3,A,(T30,A,T71,I10))") &
1992 "AUX_FIT ADMM-Basis: ", &
1993 "Total number of", &
1994 "- Shell sets: ", nset, &
1995 "- Shells: ", nshell, &
1996 "- Primitive Cartesian functions: ", npgf, &
1997 "- Cartesian basis functions: ", ncgf, &
1998 "- Spherical basis functions: ", nsgf
1999 WRITE (unit=output_unit, fmt="(T30,A,T75,I6)") &
2000 " Maximum angular momentum ", maxlgto
2001 END IF
2002
2003 END IF
2004 CALL cp_print_key_finished_output(output_unit, logger, force_env_section, &
2005 "PRINT%TOTAL_NUMBERS")
2006
2007 END SUBROUTINE write_total_numbers
2008
2009END 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:233
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_tddfpt2_control(t_control, t_section, qs_control)
Read TDDFPT-related input parameters.
subroutine, public read_dft_control(dft_control, dft_section)
...
subroutine, public read_qs_section(qs_control, qs_section)
...
subroutine, public write_admm_control(admm_control, dft_section)
Write the ADMM control parameters to the output unit.
subroutine, public write_dft_control(dft_control, dft_section)
Write the DFT control parameters to the output unit.
subroutine, public read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
reads the input parameters needed for ddapc.
subroutine, public read_mgrid_section(qs_control, dft_section)
...
contains information regarding the decoupling/recoupling method of Bloechl
subroutine, public cp_ddapc_ewald_create(cp_ddapc_ewald, qmmm_decoupl, qm_cell, force_env_section, subsys_section, para_env)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
types that represent a subsys, i.e. a part of the system
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)
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:15
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:595
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:2957
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_method_ofgpw
integer, parameter, public xc_vdw_fun_none
integer, parameter, public dispersion_d3
integer, parameter, public do_method_rigpw
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 wfi_linear_ps_method_nr
integer, parameter, public do_method_pnnl
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 kg_tnadd_embed_ri
integer, parameter, public dispersion_d3bj
integer, parameter, public do_method_rm1
integer, parameter, public do_qmmm_swave
integer, parameter, public do_method_pm3
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 do_qmmm_gauss
integer, parameter, public wfi_ps_method_nr
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 dispersion_d2
integer, parameter, public wfi_aspc_nr
integer, parameter, public do_method_xtb
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
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 read_kpoint_section(kpoint, kpoint_section, a_vec)
Read the kpoint input section.
subroutine, public write_kpoint_info(kpoint, dft_section)
Write information on the kpoints to output.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
subroutine, public get_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym)
Retrieve information from a kpoint environment.
initializes the environment for lri lri : local resolution of the identity
subroutine, public lri_env_init(lri_env, lri_section)
initializes the lri env
subroutine, public lri_env_basis(ri_type, qs_env, lri_env, qs_kind_set)
initializes the lri env
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Machine interface based on Fortran 2003 and POSIX.
Definition machine.F:17
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Definition machine.F:131
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:471
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.
container for various plainwaves related things
subroutine, public qs_basis_rotation(qs_env, kpoints)
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.
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, 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, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, 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, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, 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, cell, cell_ref, qmmm, qmmm_env_qm, force_env_section, subsys_section, use_motion_section, silent)
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, 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, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public init_gapw_nlcc(qs_kind_set)
...
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg)
Get attributes of an atomic kind set.
subroutine, public set_qs_kind(qs_kind, paw_atom, ghost, floating, hard_radius, hard0_radius, covalent_radius, vdw_radius, lmax_rho0, zeff, no_optimize, dispersion, u_minus_j, reltmat, dftb_parameter, xtb_parameter, elec_conf, pao_basis_size)
Set the components of an atomic kind data set.
subroutine, public write_qs_kind_set(qs_kind_set, subsys_section)
Write an atomic kind set data set to the output unit.
subroutine, public init_gapw_basis_set(qs_kind_set, qs_control, force_env_section, modify_qs_control)
...
subroutine, public init_qs_kind_set(qs_kind_set)
Initialise an atomic kind set data set.
subroutine, public check_qs_kind_set(qs_kind_set, dft_control, subsys_section)
...
subroutine, public write_gto_basis_sets(qs_kind_set, subsys_section)
Write all the GTO basis sets of an atomic kind set to the output unit (for the printing of the unnorm...
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
subroutine, public qs_ks_env_create(ks_env)
Allocates a new instance of ks_env.
Definition and initialisation of the mo data type.
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, cell, cell_ref, 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)
...
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.
interface to tblite
subroutine, public tb_set_calculator(tb, typ)
...
subroutine, public tb_init_wf(tb)
initialize wavefunction ...
subroutine, public tb_init_geometry(qs_env, tb)
intialize geometry objects ...
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:124
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 init_xtb_basis(param, gto_basis_set, ngauss)
...
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 allocate_xtb_atom_param(xtb_parameter)
...
Definition xtb_types.F:99
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, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, chmax, en, kqat2, kcn, kq)
...
Definition xtb_types.F:299
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
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.