88#include "./base/base_uses.f90"
96 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_force'
113 LOGICAL :: calc_force, consistent_energies, linres
115 qs_env%linres_run = linres
117 CALL qs_forces(qs_env)
120 consistent_energies=consistent_energies)
132 SUBROUTINE qs_forces(qs_env)
136 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_forces'
138 INTEGER :: after, handle, i, iatom, ic, ikind, &
139 ispin, iw, natom, nkind, nspin, &
141 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind, kind_of, natom_of_kind
142 LOGICAL :: do_admm, do_exx, do_gw, do_im_time, &
143 do_kpoints, has_unit_metric, &
144 omit_headers, perform_ec, reuse_hfx
145 REAL(
dp) :: dummy_real, dummy_real2(2)
149 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, matrix_w, rho_ao
150 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_w_kp
164 CALL timeset(routinen, handle)
172 CALL get_qs_env(qs_env, particle_set=particle_set)
173 natom =
SIZE(particle_set)
175 particle_set(iatom)%f = 0.0_dp
179 NULLIFY (atomic_kind_set)
180 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
182 atom_of_kind=atom_of_kind, &
185 NULLIFY (force, subsys, dft_control)
189 do_kpoints=do_kpoints, &
190 dft_control=dft_control)
191 IF (do_kpoints .AND. dft_control%dft_plus_u .AND. dft_control%plus_u_method_id ==
plus_u_lowdin)
THEN
192 IF (
ASSOCIATED(qs_env%mp2_env) .OR. qs_env%run_rtp .OR. &
193 (dft_control%smeagol_control%smeagol_enabled .AND. &
195 cpabort(
"Lowdin DFT+U forces with k-points require the ground-state DFT W matrix")
198 IF (.NOT.
ASSOCIATED(force))
THEN
200 nkind =
SIZE(atomic_kind_set)
203 DEALLOCATE (natom_of_kind)
209 IF (dft_control%qs_control%cdft)
THEN
210 dft_control%qs_control%cdft_control%save_pot = .true.
222 IF (qs_env%run_rtp)
THEN
223 NULLIFY (matrix_w, matrix_s, ks_env)
229 DO ispin = 1, dft_control%nspins
230 ALLOCATE (matrix_w(ispin)%matrix)
231 CALL dbcsr_copy(matrix_w(ispin)%matrix, matrix_s(1)%matrix, &
233 CALL dbcsr_set(matrix_w(ispin)%matrix, 0.0_dp)
239 IF (dft_control%rtp_control%velocity_gauge .AND. dft_control%rtp_control%nl_gauge_transform)
THEN
244 IF (dft_control%qs_control%mulliken_restraint)
THEN
245 NULLIFY (matrix_w, matrix_s, rho)
253 para_env, matrix_s(1)%matrix, rho_ao, w_matrix=matrix_w)
258 IF (dft_control%dft_plus_u .AND. .NOT. (do_kpoints .AND. dft_control%plus_u_method_id ==
plus_u_lowdin))
THEN
259 NULLIFY (matrix_w_kp)
260 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
261 CALL plus_u(qs_env=qs_env, matrix_w=matrix_w_kp)
265 CALL get_qs_env(qs_env, has_unit_metric=has_unit_metric)
266 IF (.NOT. has_unit_metric)
THEN
267 NULLIFY (matrix_w_kp)
268 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
269 nspin =
SIZE(matrix_w_kp, 1)
272 qs_env%input,
"DFT%PRINT%AO_MATRICES/W_MATRIX"),
cp_p_file))
THEN
276 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
277 after = min(max(after, 1), 16)
278 DO ic = 1,
SIZE(matrix_w_kp, 2)
280 para_env, output_unit=iw, omit_headers=omit_headers)
283 "DFT%PRINT%AO_MATRICES/W_MATRIX")
290 IF (qs_env%energy_correction)
THEN
292 IF (.NOT. ec_env%do_skip) perform_ec = .true.
296 IF (dft_control%qs_control%semi_empirical)
THEN
298 calculate_forces=.true.)
300 ELSE IF (dft_control%qs_control%dftb)
THEN
302 calculate_forces=.true.)
304 calculate_forces=.true.)
305 ELSE IF (dft_control%qs_control%xtb)
THEN
306 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
311 ELSE IF (perform_ec)
THEN
318 IF (qs_env%run_rtp)
THEN
319 IF (dft_control%apply_efield_field)
THEN
322 IF (dft_control%rtp_control%velocity_gauge)
THEN
333 IF (.NOT. dft_control%qs_control%gapw)
THEN
337 IF (dft_control%qs_control%rigpw)
THEN
338 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
344 IF (
ASSOCIATED(qs_env%mp2_env))
THEN
349 energy%total = energy%total + energy%mp2
353 .AND. .NOT. qs_env%mp2_env%do_im_time)
THEN
363 do_gw = qs_env%mp2_env%ri_rpa%do_ri_g0w0
364 do_admm = qs_env%mp2_env%ri_rpa%do_admm
365 reuse_hfx = qs_env%mp2_env%ri_rpa%reuse_hfx
366 do_im_time = qs_env%mp2_env%do_im_time
371 unit_nr=output_unit, &
372 hfx_sections=hfx_sections, &
373 x_data=qs_env%mp2_env%ri_rpa%x_data, &
376 calc_forces=.true., &
377 reuse_hfx=reuse_hfx, &
378 do_im_time=do_im_time, &
379 e_ex_from_gw=dummy_real, &
380 e_admm_from_gw=dummy_real2, &
384 ELSE IF (perform_ec)
THEN
386 ELSE IF (qs_env%harris_method)
THEN
404 ikind = kind_of(iatom)
405 i = atom_of_kind(iatom)
411 force(ikind)%other(1:3, i) = -particle_set(iatom)%f(1:3) + force(ikind)%ch_pulay(1:3, i)
412 force(ikind)%total(1:3, i) = force(ikind)%total(1:3, i) + force(ikind)%other(1:3, i)
413 particle_set(iatom)%f = -force(ikind)%total(1:3, i)
416 NULLIFY (cell, virial, energy)
417 CALL get_qs_env(qs_env=qs_env, cell=cell, virial=virial, energy=energy)
418 IF (virial%pv_availability)
THEN
419 CALL para_env%sum(virial%pv_overlap)
420 CALL para_env%sum(virial%pv_ekinetic)
421 CALL para_env%sum(virial%pv_ppl)
422 CALL para_env%sum(virial%pv_ppnl)
423 CALL para_env%sum(virial%pv_ecore_overlap)
424 CALL para_env%sum(virial%pv_ehartree)
425 CALL para_env%sum(virial%pv_exc)
426 CALL para_env%sum(virial%pv_exx)
427 CALL para_env%sum(virial%pv_vdw)
428 CALL para_env%sum(virial%pv_mp2)
429 CALL para_env%sum(virial%pv_nlcc)
430 CALL para_env%sum(virial%pv_gapw)
431 CALL para_env%sum(virial%pv_lrigpw)
432 CALL para_env%sum(virial%pv_virial)
435 IF ((.NOT. virial%pv_numer) .AND. &
436 (.NOT. (dft_control%qs_control%dftb .OR. &
437 dft_control%qs_control%xtb .OR. &
438 dft_control%qs_control%semi_empirical)))
THEN
445 energy%hartree = ec_env%ehartree
446 energy%exc = ec_env%exc
447 IF (dft_control%do_admm)
THEN
448 energy%exc_aux_fit = ec_env%exc_aux_fit
452 virial%pv_ehartree(i, i) = virial%pv_ehartree(i, i) &
453 - 2.0_dp*(energy%hartree + energy%sccs_pol)
454 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc &
455 - 2.0_dp*(energy%hartree + energy%sccs_pol)
456 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc
457 IF (dft_control%do_admm)
THEN
458 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc_aux_fit
459 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc_aux_fit
466 IF ((.NOT. virial%pv_numer) .AND. count(cell%perd /= 0) == 2)
THEN
467 SELECT CASE (dft_control%qs_control%method_id)
475 IF (dft_control%qs_control%xtb .AND. dft_control%qs_control%xtb_control%do_tblite)
THEN
482 IF (dft_control%qs_control%semi_empirical)
THEN
483 CALL write_forces(force, atomic_kind_set, 2, output_unit=output_unit, &
484 print_section=print_section)
485 ELSE IF (dft_control%qs_control%dftb)
THEN
486 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
487 print_section=print_section)
488 ELSE IF (dft_control%qs_control%xtb)
THEN
489 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
490 print_section=print_section)
491 ELSE IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
492 CALL write_forces(force, atomic_kind_set, 1, output_unit=output_unit, &
493 print_section=print_section)
495 CALL write_forces(force, atomic_kind_set, 0, output_unit=output_unit, &
496 print_section=print_section)
499 "DFT%PRINT%DERIVATIVES")
502 NULLIFY (ks_env, matrix_w_kp)
504 matrix_w_kp=matrix_w_kp, &
507 NULLIFY (matrix_w_kp)
508 CALL set_ks_env(ks_env, matrix_w_kp=matrix_w_kp)
510 DEALLOCATE (atom_of_kind, kind_of)
512 CALL timestop(handle)
514 END SUBROUTINE qs_forces
527 SUBROUTINE write_forces(qs_force, atomic_kind_set, ftype, output_unit, &
532 INTEGER,
INTENT(IN) :: ftype, output_unit
535 CHARACTER(LEN=13) :: fmtstr5
536 CHARACTER(LEN=15) :: fmtstr4
537 CHARACTER(LEN=20) :: fmtstr3
538 CHARACTER(LEN=35) :: fmtstr2
539 CHARACTER(LEN=48) :: fmtstr1
540 INTEGER :: i, iatom, ikind, my_ftype, natom, ndigits
541 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind, kind_of
542 REAL(kind=
dp),
DIMENSION(3) :: grand_total
544 IF (output_unit > 0)
THEN
546 IF (.NOT.
ASSOCIATED(
qs_force))
THEN
547 CALL cp_abort(__location__, &
548 "The qs_force pointer is not associated "// &
549 "and cannot be printed")
553 kind_of=kind_of, natom=natom)
559 fmtstr1 =
"(/,/,T2,A,/,/,T3,A,T11,A,T23,A,T40,A1,2( X,A1))"
560 WRITE (unit=fmtstr1(41:42), fmt=
"(I2)") ndigits + 5
562 fmtstr2 =
"(/,(T2,I5,4X,I4,T18,A,T34,3F . ))"
563 WRITE (unit=fmtstr2(32:33), fmt=
"(I2)") ndigits
564 WRITE (unit=fmtstr2(29:30), fmt=
"(I2)") ndigits + 6
566 fmtstr3 =
"(/,T3,A,T34,3F . )"
567 WRITE (unit=fmtstr3(18:19), fmt=
"(I2)") ndigits
568 WRITE (unit=fmtstr3(15:16), fmt=
"(I2)") ndigits + 6
570 fmtstr4 =
"((T34,3F . ))"
571 WRITE (unit=fmtstr4(12:13), fmt=
"(I2)") ndigits
572 WRITE (unit=fmtstr4(9:10), fmt=
"(I2)") ndigits + 6
574 fmtstr5 =
"(/T2,A//T3,A)"
576 WRITE (unit=output_unit, fmt=fmtstr1) &
577 "FORCES [a.u.]",
"Atom",
"Kind",
"Component",
"X",
"Y",
"Z"
579 grand_total(:) = 0.0_dp
583 SELECT CASE (my_ftype)
586 ikind = kind_of(iatom)
587 i = atom_of_kind(iatom)
588 WRITE (unit=output_unit, fmt=fmtstr2) &
589 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
590 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
594 ikind = kind_of(iatom)
595 i = atom_of_kind(iatom)
596 WRITE (unit=output_unit, fmt=fmtstr2) &
597 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
598 iatom, ikind,
" overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
599 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
600 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
601 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
602 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
603 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
604 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
605 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
606 iatom, ikind,
" rho_lri_elec",
qs_force(ikind)%rho_lri_elec(1:3, i), &
607 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
608 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
609 iatom, ikind,
" gCP",
qs_force(ikind)%gcp(1:3, i), &
610 iatom, ikind,
" other",
qs_force(ikind)%other(1:3, i), &
611 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
612 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
613 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
614 iatom, ikind,
" eev",
qs_force(ikind)%eev(1:3, i), &
615 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
616 iatom, ikind,
" tensorial_u",
qs_force(ikind)%tensorial_u(1:3, i), &
617 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
618 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
622 ikind = kind_of(iatom)
623 i = atom_of_kind(iatom)
624 WRITE (unit=output_unit, fmt=fmtstr2) &
625 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
626 iatom, ikind,
" overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
627 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
628 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
629 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
630 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
631 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
632 iatom, ikind,
"cneo_potential",
qs_force(ikind)%cneo_potential(1:3, i), &
633 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
634 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
635 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
636 iatom, ikind,
" rho_lri_elec",
qs_force(ikind)%rho_lri_elec(1:3, i), &
637 iatom, ikind,
" rho_cneo_nuc",
qs_force(ikind)%rho_cneo_nuc(1:3, i), &
638 iatom, ikind,
" vhxc_atom",
qs_force(ikind)%vhxc_atom(1:3, i), &
639 iatom, ikind,
" g0s_Vh_elec",
qs_force(ikind)%g0s_Vh_elec(1:3, i), &
640 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
641 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
642 iatom, ikind,
" gCP",
qs_force(ikind)%gcp(1:3, i), &
643 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
644 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
645 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
646 iatom, ikind,
" eev",
qs_force(ikind)%eev(1:3, i), &
647 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
648 iatom, ikind,
" tensorial_u",
qs_force(ikind)%tensorial_u(1:3, i), &
649 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
650 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
654 ikind = kind_of(iatom)
655 i = atom_of_kind(iatom)
656 WRITE (unit=output_unit, fmt=fmtstr2) &
657 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
658 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
659 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
660 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
664 ikind = kind_of(iatom)
665 i = atom_of_kind(iatom)
666 WRITE (unit=output_unit, fmt=fmtstr2) &
667 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
668 iatom, ikind,
"overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
669 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
670 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
671 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
672 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
673 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
674 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
675 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
676 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
677 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
678 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
679 iatom, ikind,
" tensorial_u",
qs_force(ikind)%tensorial_u(1:3, i), &
680 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
681 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
685 ikind = kind_of(iatom)
686 i = atom_of_kind(iatom)
687 WRITE (unit=output_unit, fmt=fmtstr2) &
688 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
689 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
690 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
691 iatom, ikind,
" repulsive",
qs_force(ikind)%repulsive(1:3, i), &
692 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
693 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
694 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
695 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
696 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
700 ikind = kind_of(iatom)
701 i = atom_of_kind(iatom)
702 WRITE (unit=output_unit, fmt=fmtstr2) &
703 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
704 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
705 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
706 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
707 iatom, ikind,
" all potential",
qs_force(ikind)%all_potential(1:3, i), &
708 iatom, ikind,
" other",
qs_force(ikind)%other(1:3, i), &
709 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
710 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
714 WRITE (unit=output_unit, fmt=fmtstr3)
"Sum of total", grand_total(1:3)
716 DEALLOCATE (atom_of_kind)
721 END SUBROUTINE write_forces
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_write_sparse_matrix(sparse_matrix, before, after, qs_env, para_env, first_row, last_row, first_col, last_col, scale, output_unit, omit_headers, cartesian_basis)
...
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...
Add the DFT+U contribution to the Hamiltonian matrix.
subroutine, public plus_u(qs_env, matrix_h, matrix_w)
Add the DFT+U contribution to the Hamiltonian matrix. Wrapper routine for all "+U" methods.
Types needed for a for a Energy Correction.
all routins needed for a nonperiodic electric field
subroutine, public calculate_ecore_efield(qs_env, calculate_forces)
Computes the force and the energy due to a efield on the cores Note: In the velocity gauge,...
subroutine, public efield_potential_lengh_gauge(qs_env)
Replace the original implementation of the electric-electronic interaction in the length gauge....
Routines for an energy correction on top of a Kohn-Sham calculation.
subroutine, public energy_correction(qs_env, ec_init, calculate_forces)
Energy Correction to a Kohn-Sham simulation Available energy corrections: (1) Harris energy functiona...
Routines for total energy and forces of excited states.
subroutine, public excited_state_energy(qs_env, calculate_forces)
Excited state energy and forces.
Routines to calculate EXX in RPA and energy correction methods.
subroutine, public calculate_exx(qs_env, unit_nr, hfx_sections, x_data, do_gw, do_admm, calc_forces, reuse_hfx, do_im_time, e_ex_from_gw, e_admm_from_gw, t3)
...
Defines the basic variable types.
integer, parameter, public dp
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Interface to the message passing library MPI.
Routines to calculate CPHF like update and solve Z-vector equation for MP2 gradients (only GPW).
subroutine, public update_mp2_forces(qs_env)
...
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii}...
subroutine, public mulliken_restraint(mulliken_restraint_control, para_env, s_matrix, p_matrix, energy, order_p, ks_matrix, w_matrix)
computes the energy and density matrix derivate of a constraint on the mulliken charges
Define the data structure for the particle information.
Calculation of the energies concerning the core charge distribution.
subroutine, public calculate_ecore_overlap(qs_env, para_env, calculate_forces, molecular, e_overlap_core, atecc)
Calculate the overlap energy of the core charge distribution.
subroutine, public calculate_ecore_self(qs_env, e_self_core, atecc)
Calculate the self energy of the core charge distribution.
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public build_core_hamiltonian_matrix(qs_env, calculate_forces)
Cosntruction of the QS Core Hamiltonian Matrix.
Calculation of dispersion in DFTB.
subroutine, public calculate_dftb_dispersion(qs_env, para_env, calculate_forces)
...
Calculation of Overlap and Hamiltonian matrices in DFTB.
subroutine, public build_dftb_matrices(qs_env, para_env, calculate_forces)
...
Perform a QUICKSTEP wavefunction optimization (single point).
subroutine, public qs_energies(qs_env, consistent_energies, calc_forces)
Driver routine for QUICKSTEP single point wavefunction optimization.
qs_environment methods that use many other modules
subroutine, public qs_env_rebuild_pw_env(qs_env)
rebuilds the pw_env in the given qs_env, allocating it if necessary
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Routines to handle an external electrostatic field The external field can be generic and is provided ...
subroutine, public external_c_potential(qs_env, calculate_forces)
Computes the force and the energy due to the external potential on the cores.
subroutine, public external_e_potential(qs_env)
Computes the external potential on the grid.
subroutine, public replicate_qs_force(qs_force, para_env)
Replicate and sum up the force.
subroutine, public zero_qs_force(qs_force)
Initialize a Quickstep force data structure.
subroutine, public allocate_qs_force(qs_force, natom_of_kind)
Allocate a Quickstep force data structure.
Quickstep force driver routine.
subroutine, public qs_calc_energy_force(qs_env, calc_force, consistent_energies, linres)
...
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, exc_accint, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Utility routines for qs_scf.
subroutine, public qs_scf_compute_properties(qs_env, wf_type, do_mp2)
computes properties for a given hamilonian using the current wfn
types that represent a quickstep subsys
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)
...
Calculates integral matrices for RIGPW method.
subroutine, public build_ri_matrices(lri_env, qs_env, calculate_forces)
creates and initializes an lri_env
subroutine, public rt_admm_force(qs_env)
...
subroutine, public calc_c_mat_force(qs_env)
calculates the three additional force contributions needed in EMD P_imag*C , P_imag*B*S^-1*S_der ,...
Routines to perform the RTP in the velocity gauge.
subroutine, public velocity_gauge_nl_force(qs_env, particle_set)
Calculate the force associated to non-local pseudo potential in the velocity gauge.
subroutine, public velocity_gauge_ks_matrix(qs_env, subtract_nl_term)
...
Split and build its own idependent core_core SE interaction module.
subroutine, public se_core_core_interaction(qs_env, para_env, calculate_forces)
Evaluates the core-core interactions for NDDO methods.
Calculation of the Hamiltonian integral matrix <a|H|b> for semi-empirical methods.
subroutine, public build_se_core_matrix(qs_env, para_env, calculate_forces)
...
subroutine, public build_tblite_matrices(qs_env, calculate_forces)
...
subroutine, public tb_reference_cli_compare(qs_env)
Run native tblite CLI and compare against CP2K/tblite.
subroutine, public project_virial_to_periodic_subspace(virial, periodic)
Project all virial components to the periodic subspace of a low-dimensional cell.
subroutine, public symmetrize_virial(virial)
Symmetrize the virial components.
Calculation of Overlap and Hamiltonian matrices in xTB Reference: Stefan Grimme, Christoph Bannwarth,...
subroutine, public build_xtb_matrices(qs_env, calculate_forces)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Contains information on the energy correction functional for KG.
stores all the informations relevant to an mpi environment
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.