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