87#include "./base/base_uses.f90"
95 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_force'
112 LOGICAL :: calc_force, consistent_energies, linres
114 qs_env%linres_run = linres
116 CALL qs_forces(qs_env)
119 consistent_energies=consistent_energies)
131 SUBROUTINE qs_forces(qs_env)
135 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_forces'
137 INTEGER :: after, handle, i, iatom, ic, ikind, &
138 ispin, iw, natom, nkind, nspin, &
140 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind, kind_of, natom_of_kind
141 LOGICAL :: do_admm, do_exx, do_gw, do_im_time, &
142 has_unit_metric, omit_headers, &
143 perform_ec, reuse_hfx
144 REAL(
dp) :: dummy_real, dummy_real2(2)
148 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, matrix_w, rho_ao
149 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_w_kp
163 CALL timeset(routinen, handle)
171 CALL get_qs_env(qs_env, particle_set=particle_set)
172 natom =
SIZE(particle_set)
174 particle_set(iatom)%f = 0.0_dp
178 NULLIFY (atomic_kind_set)
179 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
181 atom_of_kind=atom_of_kind, &
184 NULLIFY (force, subsys, dft_control)
188 dft_control=dft_control)
189 IF (.NOT.
ASSOCIATED(force))
THEN
191 nkind =
SIZE(atomic_kind_set)
194 DEALLOCATE (natom_of_kind)
200 IF (dft_control%qs_control%cdft)
THEN
201 dft_control%qs_control%cdft_control%save_pot = .true.
213 IF (qs_env%run_rtp)
THEN
214 NULLIFY (matrix_w, matrix_s, ks_env)
220 DO ispin = 1, dft_control%nspins
221 ALLOCATE (matrix_w(ispin)%matrix)
222 CALL dbcsr_copy(matrix_w(ispin)%matrix, matrix_s(1)%matrix, &
224 CALL dbcsr_set(matrix_w(ispin)%matrix, 0.0_dp)
230 IF (dft_control%rtp_control%velocity_gauge .AND. dft_control%rtp_control%nl_gauge_transform) &
234 IF (dft_control%qs_control%mulliken_restraint)
THEN
235 NULLIFY (matrix_w, matrix_s, rho)
243 para_env, matrix_s(1)%matrix, rho_ao, w_matrix=matrix_w)
247 IF (dft_control%dft_plus_u)
THEN
248 NULLIFY (matrix_w_kp)
249 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
250 CALL plus_u(qs_env=qs_env, matrix_w=matrix_w_kp)
254 CALL get_qs_env(qs_env, has_unit_metric=has_unit_metric)
255 IF (.NOT. has_unit_metric)
THEN
256 NULLIFY (matrix_w_kp)
257 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
258 nspin =
SIZE(matrix_w_kp, 1)
261 qs_env%input,
"DFT%PRINT%AO_MATRICES/W_MATRIX"),
cp_p_file))
THEN
265 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
266 after = min(max(after, 1), 16)
267 DO ic = 1,
SIZE(matrix_w_kp, 2)
269 para_env, output_unit=iw, omit_headers=omit_headers)
272 "DFT%PRINT%AO_MATRICES/W_MATRIX")
279 IF (qs_env%energy_correction)
THEN
281 IF (.NOT. ec_env%do_skip) perform_ec = .true.
285 IF (dft_control%qs_control%semi_empirical)
THEN
287 calculate_forces=.true.)
289 ELSEIF (dft_control%qs_control%dftb)
THEN
291 calculate_forces=.true.)
293 calculate_forces=.true.)
294 ELSEIF (dft_control%qs_control%xtb)
THEN
295 IF (dft_control%qs_control%xtb_control%do_tblite)
THEN
300 ELSEIF (perform_ec)
THEN
307 IF (qs_env%run_rtp)
THEN
308 IF (dft_control%apply_efield_field) &
310 IF (dft_control%rtp_control%velocity_gauge) &
320 IF (.NOT. dft_control%qs_control%gapw)
THEN
324 IF (dft_control%qs_control%rigpw)
THEN
325 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
331 IF (
ASSOCIATED(qs_env%mp2_env))
THEN
336 energy%total = energy%total + energy%mp2
340 .AND. .NOT. qs_env%mp2_env%do_im_time)
THEN
350 do_gw = qs_env%mp2_env%ri_rpa%do_ri_g0w0
351 do_admm = qs_env%mp2_env%ri_rpa%do_admm
352 reuse_hfx = qs_env%mp2_env%ri_rpa%reuse_hfx
353 do_im_time = qs_env%mp2_env%do_im_time
358 unit_nr=output_unit, &
359 hfx_sections=hfx_sections, &
360 x_data=qs_env%mp2_env%ri_rpa%x_data, &
363 calc_forces=.true., &
364 reuse_hfx=reuse_hfx, &
365 do_im_time=do_im_time, &
366 e_ex_from_gw=dummy_real, &
367 e_admm_from_gw=dummy_real2, &
371 ELSEIF (perform_ec)
THEN
373 ELSEIF (qs_env%harris_method)
THEN
391 ikind = kind_of(iatom)
392 i = atom_of_kind(iatom)
398 force(ikind)%other(1:3, i) = -particle_set(iatom)%f(1:3) + force(ikind)%ch_pulay(1:3, i)
399 force(ikind)%total(1:3, i) = force(ikind)%total(1:3, i) + force(ikind)%other(1:3, i)
400 particle_set(iatom)%f = -force(ikind)%total(1:3, i)
403 NULLIFY (cell, virial, energy)
404 CALL get_qs_env(qs_env=qs_env, cell=cell, virial=virial, energy=energy)
405 IF (virial%pv_availability)
THEN
406 CALL para_env%sum(virial%pv_overlap)
407 CALL para_env%sum(virial%pv_ekinetic)
408 CALL para_env%sum(virial%pv_ppl)
409 CALL para_env%sum(virial%pv_ppnl)
410 CALL para_env%sum(virial%pv_ecore_overlap)
411 CALL para_env%sum(virial%pv_ehartree)
412 CALL para_env%sum(virial%pv_exc)
413 CALL para_env%sum(virial%pv_exx)
414 CALL para_env%sum(virial%pv_vdw)
415 CALL para_env%sum(virial%pv_mp2)
416 CALL para_env%sum(virial%pv_nlcc)
417 CALL para_env%sum(virial%pv_gapw)
418 CALL para_env%sum(virial%pv_lrigpw)
419 CALL para_env%sum(virial%pv_virial)
422 IF ((.NOT. virial%pv_numer) .AND. &
423 (.NOT. (dft_control%qs_control%dftb .OR. &
424 dft_control%qs_control%xtb .OR. &
425 dft_control%qs_control%semi_empirical)))
THEN
432 energy%hartree = ec_env%ehartree
433 energy%exc = ec_env%exc
434 IF (dft_control%do_admm)
THEN
435 energy%exc_aux_fit = ec_env%exc_aux_fit
439 virial%pv_ehartree(i, i) = virial%pv_ehartree(i, i) &
440 - 2.0_dp*(energy%hartree + energy%sccs_pol)
441 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc &
442 - 2.0_dp*(energy%hartree + energy%sccs_pol)
443 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc
444 IF (dft_control%do_admm)
THEN
445 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc_aux_fit
446 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc_aux_fit
453 IF ((.NOT. virial%pv_numer) .AND. count(cell%perd /= 0) == 2)
THEN
454 SELECT CASE (dft_control%qs_control%method_id)
462 IF (dft_control%qs_control%xtb .AND. dft_control%qs_control%xtb_control%do_tblite)
THEN
469 IF (dft_control%qs_control%semi_empirical)
THEN
470 CALL write_forces(force, atomic_kind_set, 2, output_unit=output_unit, &
471 print_section=print_section)
472 ELSE IF (dft_control%qs_control%dftb)
THEN
473 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
474 print_section=print_section)
475 ELSE IF (dft_control%qs_control%xtb)
THEN
476 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
477 print_section=print_section)
478 ELSE IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
479 CALL write_forces(force, atomic_kind_set, 1, output_unit=output_unit, &
480 print_section=print_section)
482 CALL write_forces(force, atomic_kind_set, 0, output_unit=output_unit, &
483 print_section=print_section)
486 "DFT%PRINT%DERIVATIVES")
489 NULLIFY (ks_env, matrix_w_kp)
491 matrix_w_kp=matrix_w_kp, &
494 NULLIFY (matrix_w_kp)
495 CALL set_ks_env(ks_env, matrix_w_kp=matrix_w_kp)
497 DEALLOCATE (atom_of_kind, kind_of)
499 CALL timestop(handle)
501 END SUBROUTINE qs_forces
514 SUBROUTINE write_forces(qs_force, atomic_kind_set, ftype, output_unit, &
519 INTEGER,
INTENT(IN) :: ftype, output_unit
522 CHARACTER(LEN=13) :: fmtstr5
523 CHARACTER(LEN=15) :: fmtstr4
524 CHARACTER(LEN=20) :: fmtstr3
525 CHARACTER(LEN=35) :: fmtstr2
526 CHARACTER(LEN=48) :: fmtstr1
527 INTEGER :: i, iatom, ikind, my_ftype, natom, ndigits
528 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: atom_of_kind, kind_of
529 REAL(kind=
dp),
DIMENSION(3) :: grand_total
531 IF (output_unit > 0)
THEN
533 IF (.NOT.
ASSOCIATED(
qs_force))
THEN
534 CALL cp_abort(__location__, &
535 "The qs_force pointer is not associated "// &
536 "and cannot be printed")
540 kind_of=kind_of, natom=natom)
546 fmtstr1 =
"(/,/,T2,A,/,/,T3,A,T11,A,T23,A,T40,A1,2( X,A1))"
547 WRITE (unit=fmtstr1(41:42), fmt=
"(I2)") ndigits + 5
549 fmtstr2 =
"(/,(T2,I5,4X,I4,T18,A,T34,3F . ))"
550 WRITE (unit=fmtstr2(32:33), fmt=
"(I2)") ndigits
551 WRITE (unit=fmtstr2(29:30), fmt=
"(I2)") ndigits + 6
553 fmtstr3 =
"(/,T3,A,T34,3F . )"
554 WRITE (unit=fmtstr3(18:19), fmt=
"(I2)") ndigits
555 WRITE (unit=fmtstr3(15:16), fmt=
"(I2)") ndigits + 6
557 fmtstr4 =
"((T34,3F . ))"
558 WRITE (unit=fmtstr4(12:13), fmt=
"(I2)") ndigits
559 WRITE (unit=fmtstr4(9:10), fmt=
"(I2)") ndigits + 6
561 fmtstr5 =
"(/T2,A//T3,A)"
563 WRITE (unit=output_unit, fmt=fmtstr1) &
564 "FORCES [a.u.]",
"Atom",
"Kind",
"Component",
"X",
"Y",
"Z"
566 grand_total(:) = 0.0_dp
570 SELECT CASE (my_ftype)
573 ikind = kind_of(iatom)
574 i = atom_of_kind(iatom)
575 WRITE (unit=output_unit, fmt=fmtstr2) &
576 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
577 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
581 ikind = kind_of(iatom)
582 i = atom_of_kind(iatom)
583 WRITE (unit=output_unit, fmt=fmtstr2) &
584 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
585 iatom, ikind,
" overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
586 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
587 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
588 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
589 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
590 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
591 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
592 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
593 iatom, ikind,
" rho_lri_elec",
qs_force(ikind)%rho_lri_elec(1:3, i), &
594 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
595 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
596 iatom, ikind,
" gCP",
qs_force(ikind)%gcp(1:3, i), &
597 iatom, ikind,
" other",
qs_force(ikind)%other(1:3, i), &
598 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
599 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
600 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
601 iatom, ikind,
" eev",
qs_force(ikind)%eev(1:3, i), &
602 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
603 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
604 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
608 ikind = kind_of(iatom)
609 i = atom_of_kind(iatom)
610 WRITE (unit=output_unit, fmt=fmtstr2) &
611 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
612 iatom, ikind,
" overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
613 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
614 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
615 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
616 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
617 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
618 iatom, ikind,
"cneo_potential",
qs_force(ikind)%cneo_potential(1:3, i), &
619 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
620 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
621 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
622 iatom, ikind,
" rho_lri_elec",
qs_force(ikind)%rho_lri_elec(1:3, i), &
623 iatom, ikind,
" rho_cneo_nuc",
qs_force(ikind)%rho_cneo_nuc(1:3, i), &
624 iatom, ikind,
" vhxc_atom",
qs_force(ikind)%vhxc_atom(1:3, i), &
625 iatom, ikind,
" g0s_Vh_elec",
qs_force(ikind)%g0s_Vh_elec(1:3, i), &
626 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
627 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
628 iatom, ikind,
" gCP",
qs_force(ikind)%gcp(1:3, i), &
629 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
630 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
631 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
632 iatom, ikind,
" eev",
qs_force(ikind)%eev(1:3, i), &
633 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
634 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
635 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
639 ikind = kind_of(iatom)
640 i = atom_of_kind(iatom)
641 WRITE (unit=output_unit, fmt=fmtstr2) &
642 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
643 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
644 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
645 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
649 ikind = kind_of(iatom)
650 i = atom_of_kind(iatom)
651 WRITE (unit=output_unit, fmt=fmtstr2) &
652 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
653 iatom, ikind,
"overlap_admm",
qs_force(ikind)%overlap_admm(1:3, i), &
654 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
655 iatom, ikind,
" gth_ppl",
qs_force(ikind)%gth_ppl(1:3, i), &
656 iatom, ikind,
" gth_nlcc",
qs_force(ikind)%gth_nlcc(1:3, i), &
657 iatom, ikind,
" gth_ppnl",
qs_force(ikind)%gth_ppnl(1:3, i), &
658 iatom, ikind,
" core_overlap",
qs_force(ikind)%core_overlap(1:3, i), &
659 iatom, ikind,
" rho_core",
qs_force(ikind)%rho_core(1:3, i), &
660 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
661 iatom, ikind,
" ch_pulay",
qs_force(ikind)%ch_pulay(1:3, i), &
662 iatom, ikind,
" fock_4c",
qs_force(ikind)%fock_4c(1:3, i), &
663 iatom, ikind,
" mp2_non_sep",
qs_force(ikind)%mp2_non_sep(1:3, i), &
664 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
665 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
669 ikind = kind_of(iatom)
670 i = atom_of_kind(iatom)
671 WRITE (unit=output_unit, fmt=fmtstr2) &
672 iatom, ikind,
" all_potential",
qs_force(ikind)%all_potential(1:3, i), &
673 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
674 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
675 iatom, ikind,
" repulsive",
qs_force(ikind)%repulsive(1:3, i), &
676 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
677 iatom, ikind,
" efield",
qs_force(ikind)%efield(1:3, i), &
678 iatom, ikind,
" ehrenfest",
qs_force(ikind)%ehrenfest(1:3, i), &
679 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
680 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
684 ikind = kind_of(iatom)
685 i = atom_of_kind(iatom)
686 WRITE (unit=output_unit, fmt=fmtstr2) &
687 iatom, ikind,
" overlap",
qs_force(ikind)%overlap(1:3, i), &
688 iatom, ikind,
" kinetic",
qs_force(ikind)%kinetic(1:3, i), &
689 iatom, ikind,
" rho_elec",
qs_force(ikind)%rho_elec(1:3, i), &
690 iatom, ikind,
" dispersion",
qs_force(ikind)%dispersion(1:3, i), &
691 iatom, ikind,
" all potential",
qs_force(ikind)%all_potential(1:3, i), &
692 iatom, ikind,
" other",
qs_force(ikind)%other(1:3, i), &
693 iatom, ikind,
" total",
qs_force(ikind)%total(1:3, i)
694 grand_total(1:3) = grand_total(1:3) +
qs_force(ikind)%total(1:3, i)
698 WRITE (unit=output_unit, fmt=fmtstr3)
"Sum of total", grand_total(1:3)
700 DEALLOCATE (atom_of_kind)
705 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, 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_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.