131#include "./base/base_uses.f90"
137 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_forces'
165 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_forces_main'
167 INTEGER :: handle, ispin, nspins
170 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_pe_asymm, matrix_pe_symm, &
171 matrix_s, matrix_s_aux_fit
175 CALL timeset(routinen, handle)
177 CALL get_qs_env(qs_env, dft_control=dft_control)
179 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
CALL cite_reference(
sertcan2024)
181 nspins = dft_control%nspins
182 tddfpt_control => dft_control%tddfpt2_control
184 IF (
ASSOCIATED(ex_env%cpmos))
THEN
185 DO ispin = 1,
SIZE(ex_env%cpmos)
188 DEALLOCATE (ex_env%cpmos)
190 ALLOCATE (ex_env%cpmos(nspins))
192 CALL cp_fm_get_info(matrix=ex_env%evect(ispin), matrix_struct=matrix_struct)
196 CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s)
197 NULLIFY (matrix_pe_asymm, matrix_pe_symm)
202 ALLOCATE (ex_env%matrix_pe(ispin)%matrix)
203 CALL dbcsr_create(ex_env%matrix_pe(ispin)%matrix, template=matrix_s(1)%matrix)
204 CALL dbcsr_copy(ex_env%matrix_pe(ispin)%matrix, matrix_s(1)%matrix)
205 CALL dbcsr_set(ex_env%matrix_pe(ispin)%matrix, 0.0_dp)
207 ALLOCATE (matrix_pe_symm(ispin)%matrix)
208 CALL dbcsr_create(matrix_pe_symm(ispin)%matrix, template=matrix_s(1)%matrix)
209 CALL dbcsr_copy(matrix_pe_symm(ispin)%matrix, ex_env%matrix_pe(ispin)%matrix)
211 ALLOCATE (matrix_pe_asymm(ispin)%matrix)
212 CALL dbcsr_create(matrix_pe_asymm(ispin)%matrix, template=matrix_s(1)%matrix, &
213 matrix_type=dbcsr_type_antisymmetric)
216 CALL tddfpt_resvec1(ex_env%evect(ispin), gs_mos(ispin)%mos_occ, &
217 matrix_s(1)%matrix, ex_env%matrix_pe(ispin)%matrix)
221 IF (dft_control%do_admm)
THEN
223 CALL get_admm_env(admm_env, matrix_s_aux_fit=matrix_s_aux_fit)
226 ALLOCATE (ex_env%matrix_pe_admm(ispin)%matrix)
227 CALL dbcsr_create(ex_env%matrix_pe_admm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix)
228 CALL dbcsr_copy(ex_env%matrix_pe_admm(ispin)%matrix, matrix_s_aux_fit(1)%matrix)
229 CALL dbcsr_set(ex_env%matrix_pe_admm(ispin)%matrix, 0.0_dp)
230 CALL tddfpt_resvec1_admm(ex_env%matrix_pe(ispin)%matrix, &
231 admm_env, ex_env%matrix_pe_admm(ispin)%matrix)
237 ALLOCATE (ex_env%matrix_hz(ispin)%matrix)
238 CALL dbcsr_create(ex_env%matrix_hz(ispin)%matrix, template=matrix_s(1)%matrix)
239 CALL dbcsr_copy(ex_env%matrix_hz(ispin)%matrix, matrix_s(1)%matrix)
240 CALL dbcsr_set(ex_env%matrix_hz(ispin)%matrix, 0.0_dp)
242 IF (dft_control%qs_control%xtb)
THEN
243 CALL tddfpt_resvec2_xtb(qs_env, ex_env%matrix_pe, gs_mos, ex_env%matrix_hz, ex_env%cpmos)
245 CALL tddfpt_resvec2(qs_env, ex_env%matrix_pe, ex_env%matrix_pe_admm, &
246 gs_mos, ex_env%matrix_hz, ex_env%cpmos)
252 ALLOCATE (ex_env%matrix_px1(ispin)%matrix)
253 CALL dbcsr_create(ex_env%matrix_px1(ispin)%matrix, template=matrix_s(1)%matrix)
254 CALL dbcsr_copy(ex_env%matrix_px1(ispin)%matrix, matrix_s(1)%matrix)
255 CALL dbcsr_set(ex_env%matrix_px1(ispin)%matrix, 0.0_dp)
257 ALLOCATE (ex_env%matrix_px1_asymm(ispin)%matrix)
258 CALL dbcsr_create(ex_env%matrix_px1_asymm(ispin)%matrix, template=matrix_s(1)%matrix, &
259 matrix_type=dbcsr_type_antisymmetric)
263 IF (tddfpt_control%do_admm)
THEN
265 CALL get_admm_env(admm_env, matrix_s_aux_fit=matrix_s_aux_fit)
269 ALLOCATE (ex_env%matrix_px1_admm(ispin)%matrix)
270 CALL dbcsr_create(ex_env%matrix_px1_admm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix)
271 CALL dbcsr_copy(ex_env%matrix_px1_admm(ispin)%matrix, matrix_s_aux_fit(1)%matrix)
272 CALL dbcsr_set(ex_env%matrix_px1_admm(ispin)%matrix, 0.0_dp)
274 ALLOCATE (ex_env%matrix_px1_admm_asymm(ispin)%matrix)
275 CALL dbcsr_create(ex_env%matrix_px1_admm_asymm(ispin)%matrix, template=matrix_s_aux_fit(1)%matrix, &
276 matrix_type=dbcsr_type_antisymmetric)
278 ex_env%matrix_px1_admm_asymm(ispin)%matrix)
282 CALL tddfpt_forces(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices)
284 CALL tddfpt_resvec3(qs_env, ex_env%cpmos, work_matrices)
289 CALL timestop(handle)
304 SUBROUTINE tddfpt_forces(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices)
314 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_forces'
317 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: natom_of_kind
318 LOGICAL :: debug_forces
319 REAL(kind=
dp) :: ehartree, exc
322 TYPE(
qs_force_type),
DIMENSION(:),
POINTER :: ks_force, td_force
324 CALL timeset(routinen, handle)
327 debug_forces = ex_env%debug_forces
329 CALL get_qs_env(qs_env, dft_control=dft_control, force=ks_force, &
330 atomic_kind_set=atomic_kind_set)
334 DEALLOCATE (natom_of_kind)
338 IF (dft_control%qs_control%xtb)
THEN
339 CALL tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, &
340 work_matrices, debug_forces)
345 ex_env%vtau_rspace, ex_env%vadmm_rspace, ehartree, exc)
348 CALL tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, &
349 work_matrices, debug_forces)
358 CALL timestop(handle)
360 END SUBROUTINE tddfpt_forces
374 SUBROUTINE tddfpt_force_direct(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, &
384 LOGICAL :: debug_forces
386 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_force_direct'
388 INTEGER :: handle, iounit, ispin, natom, norb, &
390 REAL(kind=
dp) :: evalue
391 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: ftot1, ftot2
392 REAL(kind=
dp),
DIMENSION(3) :: fodeb
394 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: evect
396 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s, matrix_wx1, &
406 CALL timeset(routinen, handle)
409 IF (logger%para_env%is_source())
THEN
415 evect => ex_env%evect
417 CALL get_qs_env(qs_env=qs_env, ks_env=ks_env, para_env=para_env, &
418 sab_orb=sab_orb, dft_control=dft_control, force=force)
419 NULLIFY (tddfpt_control)
420 tddfpt_control => dft_control%tddfpt2_control
421 nspins = dft_control%nspins
423 IF (debug_forces)
THEN
424 CALL get_qs_env(qs_env, natom=natom, atomic_kind_set=atomic_kind_set)
425 ALLOCATE (ftot1(3, natom))
429 CALL tddfpt_kernel_force(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, debug_forces)
432 matrix_wx1 => ex_env%matrix_wx1
433 CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s, matrix_ks=matrix_ks)
437 ALLOCATE (matrix_wz(ispin)%matrix)
438 CALL dbcsr_create(matrix=matrix_wz(ispin)%matrix, template=matrix_s(1)%matrix)
440 CALL dbcsr_set(matrix_wz(ispin)%matrix, 0.0_dp)
443 evalue = ex_env%evalue
444 IF (tddfpt_control%oe_corr ==
oe_shift)
THEN
445 evalue = ex_env%evalue - tddfpt_control%ev_shift
449 matrix_wz(ispin)%matrix)
451 IF (nspins == 2)
THEN
452 CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, &
453 alpha_scalar=1.0_dp, beta_scalar=1.0_dp)
456 IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1)
458 matrix_name=
"OVERLAP MATRIX", &
459 basis_type_a=
"ORB", basis_type_b=
"ORB", &
460 sab_nl=sab_orb, calculate_forces=.true., &
461 matrix_p=matrix_wz(1)%matrix)
464 IF (debug_forces)
THEN
465 fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3)
466 CALL para_env%sum(fodeb)
467 IF (iounit > 0)
WRITE (iounit,
"(T3,A,T33,3F16.8)")
"DEBUG:: Wx*dS ", fodeb
471 CALL get_qs_env(qs_env=qs_env, matrix_s=matrix_s, matrix_ks=matrix_ks)
475 ALLOCATE (matrix_wz(ispin)%matrix)
476 CALL dbcsr_create(matrix=matrix_wz(ispin)%matrix, template=matrix_s(1)%matrix)
478 CALL dbcsr_set(matrix_wz(ispin)%matrix, 0.0_dp)
480 evalue = ex_env%evalue
481 IF (tddfpt_control%oe_corr ==
oe_shift)
THEN
482 evalue = ex_env%evalue - tddfpt_control%ev_shift
485 matrix_ks(ispin)%matrix, matrix_wz(ispin)%matrix, evalue)
487 IF (nspins == 2)
THEN
488 CALL dbcsr_add(matrix_wz(1)%matrix, matrix_wz(2)%matrix, &
489 alpha_scalar=1.0_dp, beta_scalar=1.0_dp)
492 IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1)
494 matrix_name=
"OVERLAP MATRIX", &
495 basis_type_a=
"ORB", basis_type_b=
"ORB", &
496 sab_nl=sab_orb, calculate_forces=.true., &
497 matrix_p=matrix_wz(1)%matrix)
500 IF (debug_forces)
THEN
501 fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3)
502 CALL para_env%sum(fodeb)
503 IF (iounit > 0)
WRITE (iounit,
"(T3,A,T33,3F16.8)")
"DEBUG:: xWx*dS ", fodeb
507 IF (
ASSOCIATED(matrix_wx1))
THEN
508 IF (nspins == 2)
THEN
509 CALL dbcsr_add(matrix_wx1(1)%matrix, matrix_wx1(2)%matrix, &
510 alpha_scalar=0.5_dp, beta_scalar=0.5_dp)
513 IF (debug_forces) fodeb(1:3) = force(1)%overlap(1:3, 1)
515 matrix_name=
"OVERLAP MATRIX", &
516 basis_type_a=
"ORB", basis_type_b=
"ORB", &
517 sab_nl=sab_orb, calculate_forces=.true., &
518 matrix_p=matrix_wx1(1)%matrix)
520 IF (debug_forces)
THEN
521 fodeb(1:3) = force(1)%overlap(1:3, 1) - fodeb(1:3)
522 CALL para_env%sum(fodeb)
523 IF (iounit > 0)
WRITE (iounit,
"(T3,A,T33,3F16.8)")
"DEBUG:: WK*dS ", fodeb
527 IF (debug_forces)
THEN
528 ALLOCATE (ftot2(3, natom))
530 fodeb(1:3) = ftot2(1:3, 1) - ftot1(1:3, 1)
531 CALL para_env%sum(fodeb)
532 IF (iounit > 0)
WRITE (iounit,
"(T3,A,T30,3F16.8)")
"DEBUG:: Excitation Force", fodeb
533 DEALLOCATE (ftot1, ftot2)
536 CALL timestop(handle)
538 END SUBROUTINE tddfpt_force_direct
547 SUBROUTINE tddfpt_resvec1(evect, mos_occ, matrix_s, matrix_pe)
549 TYPE(
cp_fm_type),
INTENT(IN) :: evect, mos_occ
550 TYPE(
dbcsr_type),
POINTER :: matrix_s, matrix_pe
552 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec1'
554 INTEGER :: handle, iounit, nao, norb
560 CALL timeset(routinen, handle)
568 nrow_global=norb, ncol_global=norb)
573 CALL parallel_gemm(
'T',
'N', norb, norb, nao, 1.0_dp, cxmat, evect, 0.0_dp, xxmat)
574 CALL parallel_gemm(
'N',
'N', nao, norb, norb, 1.0_dp, mos_occ, xxmat, 0.0_dp, cxmat)
578 ncol=norb, alpha=-1.0_dp, symmetry_mode=1)
583 IF (abs(tmp) > 1.e-08_dp)
THEN
585 IF (logger%para_env%is_source())
THEN
590 cpwarn(
"Electron count of excitation density matrix is non-zero.")
592 WRITE (iounit,
"(T2,A,T61,G20.10)")
"Measured electron count is ", tmp
593 WRITE (iounit,
"(T2,A,/)") repeat(
"*", 79)
598 CALL timestop(handle)
600 END SUBROUTINE tddfpt_resvec1
608 SUBROUTINE tddfpt_resvec1_admm(matrix_pe, admm_env, matrix_pe_admm)
614 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec1_admm'
616 INTEGER :: handle, nao, nao_aux
618 CALL timeset(routinen, handle)
620 nao_aux = admm_env%nao_aux_fit
621 nao = admm_env%nao_orb
625 1.0_dp, admm_env%A, admm_env%work_orb_orb, 0.0_dp, &
626 admm_env%work_aux_orb)
628 1.0_dp, admm_env%work_aux_orb, admm_env%A, 0.0_dp, &
629 admm_env%work_aux_aux)
630 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, matrix_pe_admm, keep_sparsity=.true.)
632 CALL timestop(handle)
634 END SUBROUTINE tddfpt_resvec1_admm
645 SUBROUTINE tddfpt_resvec2(qs_env, matrix_pe, matrix_pe_admm, gs_mos, matrix_hz, cpmos)
648 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_pe, matrix_pe_admm
652 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: cpmos
654 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec2'
656 CHARACTER(LEN=default_string_length) :: basis_type
657 INTEGER :: handle, iounit, ispin, mspin, n_rep_hf, &
658 nao, nao_aux, natom, norb, nspins
659 LOGICAL :: deriv2_analytic, distribute_fock_matrix, &
660 do_hfx, gapw, gapw_xc, &
661 hfx_treat_lsd_in_core, &
663 REAL(kind=
dp) :: eh1, focc, rhotot, thartree
664 REAL(kind=
dp),
DIMENSION(2) :: total_rho
665 REAL(kind=
dp),
DIMENSION(:),
POINTER :: qlm_tot
671 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: mhz, mpe
675 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
676 TYPE(
local_rho_type),
POINTER :: local_rho_set, local_rho_set_admm
679 POINTER :: sab, sab_aux_fit
682 TYPE(
pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g, rho_g_aux, rhoz_g_aux, trho_g, &
688 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, rho_r_aux, rhoz_r_aux, tau_r, &
689 trho_r, trho_xc_r, v_xc, v_xc_tau
690 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
692 TYPE(
qs_rho_type),
POINTER :: rho, rho_aux_fit, rho_xc, rhoz_aux, trho
693 TYPE(
rho_atom_type),
DIMENSION(:),
POINTER :: rho1_atom_set, rho_atom_set
697 CALL timeset(routinen, handle)
700 CALL get_qs_env(qs_env=qs_env, pw_env=pw_env, ks_env=ks_env, &
701 dft_control=dft_control, para_env=para_env)
702 cpassert(
ASSOCIATED(pw_env))
703 nspins = dft_control%nspins
704 gapw = dft_control%qs_control%gapw
705 gapw_xc = dft_control%qs_control%gapw_xc
707 cpassert(.NOT. dft_control%tddfpt2_control%do_exck)
708 cpassert(.NOT. dft_control%tddfpt2_control%do_hfxsr)
709 cpassert(.NOT. dft_control%tddfpt2_control%do_hfxlr)
711 NULLIFY (auxbas_pw_pool, poisson_env)
713 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, &
714 poisson_env=poisson_env)
716 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
717 CALL auxbas_pw_pool%create_pw(rho_tot_gspace)
718 CALL auxbas_pw_pool%create_pw(v_hartree_rspace)
720 ALLOCATE (trho_r(nspins), trho_g(nspins))
722 CALL auxbas_pw_pool%create_pw(trho_r(ispin))
723 CALL auxbas_pw_pool%create_pw(trho_g(ispin))
726 ALLOCATE (trho_xc_r(nspins), trho_xc_g(nspins))
728 CALL auxbas_pw_pool%create_pw(trho_xc_r(ispin))
729 CALL auxbas_pw_pool%create_pw(trho_xc_g(ispin))
734 NULLIFY (hartree_local, local_rho_set)
737 atomic_kind_set=atomic_kind_set, &
739 qs_kind_set=qs_kind_set)
742 qs_kind_set, dft_control, para_env)
743 CALL init_rho0(local_rho_set, qs_env, dft_control%qs_control%gapw_control, &
748 ELSEIF (gapw_xc)
THEN
750 atomic_kind_set=atomic_kind_set, &
751 qs_kind_set=qs_kind_set)
754 qs_kind_set, dft_control, para_env)
762 rho_gspace=trho_g(ispin), &
764 total_rho=total_rho(ispin))
765 CALL pw_axpy(trho_g(ispin), rho_tot_gspace)
768 rho=trho_xc_r(ispin), &
769 rho_gspace=trho_xc_g(ispin), &
770 soft_valid=gapw_xc, &
776 IF (gapw .OR. gapw_xc)
THEN
777 CALL get_qs_env(qs_env=qs_env, oce=oce, sab_orb=sab)
779 qs_kind_set, oce, sab, para_env)
782 rhotot = sum(total_rho)
785 rhotot = rhotot + local_rho_set%rho0_mpole%total_rho0_h
786 CALL pw_axpy(local_rho_set%rho0_mpole%rho0_s_gs, rho_tot_gspace)
787 IF (
ASSOCIATED(local_rho_set%rho0_mpole%rhoz_cneo_s_gs))
THEN
788 CALL pw_axpy(local_rho_set%rho0_mpole%rhoz_cneo_s_gs, rho_tot_gspace)
792 IF (abs(rhotot) > 1.e-05_dp)
THEN
794 IF (logger%para_env%is_source())
THEN
799 cpwarn(
"Real space electron count of excitation density is non-zero.")
801 WRITE (iounit,
"(T2,A,T61,G20.10)")
"Measured electron count is ", rhotot
802 WRITE (iounit,
"(T2,A,/)") repeat(
"*", 79)
809 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
810 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
813 local_rho_set, para_env, tddft=.true.)
815 calculate_forces=.false., &
816 local_rho_set=local_rho_set)
821 CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g)
824 IF (dft_control%do_admm)
THEN
826 xc_section => admm_env%xc_section_primary
832 IF (deriv2_analytic)
THEN
833 NULLIFY (v_xc, v_xc_tau, tau_r)
836 CALL qs_fxc_analytic(rho_xc, trho_xc_r, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
838 CALL qs_fxc_analytic(rho, trho_r, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
840 IF (gapw .OR. gapw_xc)
THEN
841 CALL get_qs_env(qs_env, rho_atom_set=rho_atom_set)
842 rho1_atom_set => local_rho_set%rho_atom_set
851 CALL qs_rho_set(trho, rho_r=trho_r, rho_g=trho_g)
852 CALL qs_fxc_fdiff(ks_env, rho, trho, xc_section, 6, .false., v_xc, v_xc_tau)
857 CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp)
858 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
862 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_hartree_rspace, &
863 hmat=matrix_hz(ispin), &
864 calculate_forces=.false.)
865 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
866 hmat=matrix_hz(ispin), &
867 gapw=gapw_xc, calculate_forces=.false.)
872 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
873 hmat=matrix_hz(ispin), &
874 gapw=gapw, calculate_forces=.false.)
875 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_hartree_rspace, &
876 hmat=matrix_hz(ispin), &
877 gapw=gapw, calculate_forces=.false.)
880 IF (gapw .OR. gapw_xc)
THEN
881 mhz(1:nspins, 1:1) => matrix_hz(1:nspins)
882 mpe(1:nspins, 1:1) => matrix_pe(1:nspins)
884 rho_atom_external=local_rho_set%rho_atom_set)
887 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
888 CALL auxbas_pw_pool%give_back_pw(v_hartree_rspace)
889 CALL auxbas_pw_pool%give_back_pw(rho_tot_gspace)
891 CALL auxbas_pw_pool%give_back_pw(trho_r(ispin))
892 CALL auxbas_pw_pool%give_back_pw(trho_g(ispin))
893 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
895 DEALLOCATE (trho_r, trho_g, v_xc)
898 CALL auxbas_pw_pool%give_back_pw(trho_xc_r(ispin))
899 CALL auxbas_pw_pool%give_back_pw(trho_xc_g(ispin))
901 DEALLOCATE (trho_xc_r, trho_xc_g)
903 IF (
ASSOCIATED(v_xc_tau))
THEN
905 CALL auxbas_pw_pool%give_back_pw(v_xc_tau(ispin))
907 DEALLOCATE (v_xc_tau)
909 IF (dft_control%do_admm)
THEN
915 CALL get_admm_env(admm_env, rho_aux_fit=rho_aux_fit, matrix_s_aux_fit=msaux, &
916 task_list_aux_fit=task_list)
917 basis_type =
"AUX_FIT"
920 ALLOCATE (mpe(nspins, 1))
923 ALLOCATE (mhz(ispin, 1)%matrix)
924 CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix)
925 CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix)
926 CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp)
927 mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix
931 NULLIFY (local_rho_set_admm)
932 IF (admm_env%do_gapw)
THEN
933 basis_type =
"AUX_FIT_SOFT"
934 task_list => admm_env%admm_gapw_env%task_list
935 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
939 admm_env%admm_gapw_env%admm_kind_set, dft_control, para_env)
941 rho_atom_set=local_rho_set_admm%rho_atom_set, &
942 qs_kind_set=admm_env%admm_gapw_env%admm_kind_set, &
943 oce=admm_env%admm_gapw_env%oce, sab=sab_aux_fit, para_env=para_env)
945 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
948 xc_section => admm_env%xc_section_aux
950 NULLIFY (rho_g_aux, rho_r_aux, rhoz_g_aux, rhoz_r_aux)
951 CALL qs_rho_get(rho_aux_fit, rho_r=rho_r_aux, rho_g=rho_g_aux)
953 ALLOCATE (rhoz_r_aux(nspins), rhoz_g_aux(nspins))
955 CALL auxbas_pw_pool%create_pw(rhoz_r_aux(ispin))
956 CALL auxbas_pw_pool%create_pw(rhoz_g_aux(ispin))
960 rho=rhoz_r_aux(ispin), rho_gspace=rhoz_g_aux(ispin), &
961 basis_type=basis_type, &
962 task_list_external=task_list)
967 IF (deriv2_analytic)
THEN
969 CALL qs_fxc_analytic(rho_aux_fit, rhoz_r_aux, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
975 CALL qs_rho_set(rhoz_aux, rho_r=rhoz_r_aux, rho_g=rhoz_g_aux)
976 CALL qs_fxc_fdiff(ks_env, rho_aux_fit, rhoz_aux, xc_section, 6, .false., v_xc, v_xc_tau)
977 DEALLOCATE (rhoz_aux)
981 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
982 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
983 hmat=mhz(ispin, 1), basis_type=basis_type, &
984 calculate_forces=.false., &
985 task_list_external=task_list)
988 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
989 CALL auxbas_pw_pool%give_back_pw(rhoz_r_aux(ispin))
990 CALL auxbas_pw_pool%give_back_pw(rhoz_g_aux(ispin))
992 DEALLOCATE (v_xc, rhoz_r_aux, rhoz_g_aux)
994 IF (admm_env%do_gapw)
THEN
995 rho_atom_set => admm_env%admm_gapw_env%local_rho_set%rho_atom_set
996 rho1_atom_set => local_rho_set_admm%rho_atom_set
998 para_env, kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
999 CALL update_ks_atom(qs_env, mhz(:, 1), matrix_pe_admm, forces=.false., tddft=.false., &
1000 rho_atom_external=rho1_atom_set, &
1001 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
1002 oce_external=admm_env%admm_gapw_env%oce, &
1003 sab_external=sab_aux_fit)
1006 nao = admm_env%nao_orb
1007 nao_aux = admm_env%nao_aux_fit
1009 CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix)
1010 DO ispin = 1, nspins
1012 admm_env%work_aux_orb, nao)
1014 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, &
1015 admm_env%work_orb_orb)
1019 CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp)
1025 IF (admm_env%do_gapw)
THEN
1030 IF (gapw .OR. gapw_xc)
THEN
1040 cpassert(n_rep_hf == 1)
1044 IF (hfx_treat_lsd_in_core) mspin = nspins
1046 CALL get_qs_env(qs_env=qs_env, rho=rho, x_data=x_data, para_env=para_env, &
1047 s_mstruct_changed=s_mstruct_changed)
1048 distribute_fock_matrix = .true.
1049 IF (dft_control%do_admm)
THEN
1053 ALLOCATE (mpe(nspins, 1))
1055 DO ispin = 1, nspins
1056 ALLOCATE (mhz(ispin, 1)%matrix)
1057 CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix)
1058 CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix)
1059 CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp)
1060 mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix
1062 IF (x_data(1, 1)%do_hfx_ri)
THEN
1064 CALL hfx_ri_update_ks(qs_env, x_data(1, 1)%ri_data, mhz, eh1, rho_ao=mpe, &
1065 geometry_did_change=s_mstruct_changed, nspins=nspins, &
1066 hf_fraction=x_data(1, 1)%general_parameter%fraction)
1071 para_env, s_mstruct_changed, 1, distribute_fock_matrix, &
1076 cpassert(
ASSOCIATED(admm_env%work_aux_orb))
1077 cpassert(
ASSOCIATED(admm_env%work_orb_orb))
1078 nao = admm_env%nao_orb
1079 nao_aux = admm_env%nao_aux_fit
1081 CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix)
1082 DO ispin = 1, nspins
1084 admm_env%work_aux_orb, nao)
1086 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, &
1087 admm_env%work_orb_orb)
1088 CALL dbcsr_copy(dbwork, matrix_hz(ispin)%matrix)
1091 CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp)
1099 ALLOCATE (mpe(nspins, 1), mhz(nspins, 1))
1100 DO ispin = 1, nspins
1101 mhz(ispin, 1)%matrix => matrix_hz(ispin)%matrix
1102 mpe(ispin, 1)%matrix => matrix_pe(ispin)%matrix
1104 IF (x_data(1, 1)%do_hfx_ri)
THEN
1106 CALL hfx_ri_update_ks(qs_env, x_data(1, 1)%ri_data, mhz, eh1, rho_ao=mpe, &
1107 geometry_did_change=s_mstruct_changed, nspins=nspins, &
1108 hf_fraction=x_data(1, 1)%general_parameter%fraction)
1113 para_env, s_mstruct_changed, 1, distribute_fock_matrix, &
1117 DEALLOCATE (mpe, mhz)
1122 IF (nspins == 2) focc = 2.0_dp
1123 DO ispin = 1, nspins
1124 mos => gs_mos(ispin)%mos_occ
1127 norb, alpha=focc, beta=0.0_dp)
1130 CALL timestop(handle)
1132 END SUBROUTINE tddfpt_resvec2
1142 SUBROUTINE tddfpt_resvec2_xtb(qs_env, matrix_pe, gs_mos, matrix_hz, cpmos)
1149 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: cpmos
1151 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec2_xtb'
1153 INTEGER :: atom_a, handle, iatom, ikind, is, ispin, &
1154 na, natom, natorb, nkind, norb, ns, &
1156 INTEGER,
DIMENSION(25) :: lao
1157 INTEGER,
DIMENSION(5) :: occ
1158 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: mcharge, mcharge1
1159 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: aocg, aocg1, charges, charges1
1160 REAL(kind=
dp) :: focc
1164 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p, matrix_s
1169 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1173 CALL timeset(routinen, handle)
1175 cpassert(
ASSOCIATED(matrix_pe))
1177 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
1178 nspins = dft_control%nspins
1180 DO ispin = 1, nspins
1181 CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp)
1184 IF (dft_control%qs_control%xtb_control%coulomb_interaction)
THEN
1186 CALL get_qs_env(qs_env, rho=rho, particle_set=particle_set, &
1187 matrix_s_kp=matrix_s, para_env=para_env)
1188 natom =
SIZE(particle_set)
1190 ALLOCATE (mcharge(natom), charges(natom, 5))
1191 ALLOCATE (mcharge1(natom), charges1(natom, 5))
1194 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
1195 nkind =
SIZE(atomic_kind_set)
1197 ALLOCATE (aocg(nsgf, natom))
1199 ALLOCATE (aocg1(nsgf, natom))
1201 p_matrix => matrix_p(:, 1)
1202 s_matrix => matrix_s(1, 1)%matrix
1203 CALL ao_charges(p_matrix, s_matrix, aocg, para_env)
1204 CALL ao_charges(matrix_pe, s_matrix, aocg1, para_env)
1207 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
1210 atom_a = atomic_kind_set(ikind)%atom_list(iatom)
1211 charges(atom_a, :) = real(occ(:), kind=
dp)
1214 charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a)
1215 charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a)
1219 DEALLOCATE (aocg, aocg1)
1221 mcharge(iatom) = sum(charges(iatom, :))
1222 mcharge1(iatom) = sum(charges1(iatom, :))
1227 DEALLOCATE (charges, mcharge, charges1, mcharge1)
1231 IF (nspins == 2) focc = 1.0_dp
1232 DO ispin = 1, nspins
1233 mos => gs_mos(ispin)%mos_occ
1236 norb, alpha=focc, beta=0.0_dp)
1239 CALL timestop(handle)
1241 END SUBROUTINE tddfpt_resvec2_xtb
1249 SUBROUTINE tddfpt_resvec3(qs_env, cpmos, work)
1252 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: cpmos
1255 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec3'
1257 INTEGER :: handle, ispin, nao, norb, nspins
1264 CALL timeset(routinen, handle)
1266 CALL get_qs_env(qs_env, mos=mos, dft_control=dft_control)
1267 nspins = dft_control%nspins
1269 DO ispin = 1, nspins
1271 associate(rvecs => cpmos(ispin))
1274 CALL cp_fm_struct_create(fmstruct, context=rvecs%matrix_struct%context, nrow_global=norb, &
1275 ncol_global=norb, para_env=rvecs%matrix_struct%para_env)
1279 CALL parallel_gemm(
"T",
"N", norb, norb, nao, 1.0_dp, omos, work%S_C0(ispin), 0.0_dp, umat)
1281 CALL parallel_gemm(
"N",
"T", nao, norb, norb, 1.0_dp, cvec, umat, 0.0_dp, rvecs)
1287 CALL timestop(handle)
1289 END SUBROUTINE tddfpt_resvec3
1303 SUBROUTINE tddfpt_kernel_force(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, debug_forces)
1305 TYPE(qs_environment_type),
POINTER :: qs_env
1306 TYPE(excited_energy_type),
POINTER :: ex_env
1307 TYPE(tddfpt_ground_state_mos),
DIMENSION(:), &
1309 TYPE(kernel_env_type),
INTENT(IN) :: kernel_env
1310 TYPE(tddfpt_subgroup_env_type) :: sub_env
1311 TYPE(tddfpt_work_matrices) :: work_matrices
1312 LOGICAL,
INTENT(IN) :: debug_forces
1314 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_kernel_force'
1317 TYPE(dft_control_type),
POINTER :: dft_control
1318 TYPE(tddfpt2_control_type),
POINTER :: tddfpt_control
1320 mark_used(work_matrices)
1322 CALL timeset(routinen, handle)
1324 CALL get_qs_env(qs_env, dft_control=dft_control)
1325 tddfpt_control => dft_control%tddfpt2_control
1327 IF (tddfpt_control%kernel == tddfpt_kernel_full)
THEN
1329 CALL fhxc_force(qs_env, ex_env, gs_mos, kernel_env%full_kernel, debug_forces)
1330 ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda)
THEN
1332 CALL stda_force(qs_env, ex_env, gs_mos, kernel_env%stda_kernel, sub_env, work_matrices, debug_forces)
1333 ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none)
THEN
1335 ex_env%matrix_wx1 => null()
1337 cpabort(
'Unknown kernel type')
1340 CALL timestop(handle)
1342 END SUBROUTINE tddfpt_kernel_force
Types and set/get functions for auxiliary density matrix methods.
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
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.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public sertcan2024
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_complete_redistribute(matrix, redist)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
subroutine, public dbcsr_dot(matrix_a, matrix_b, trace)
Computes the dot product of two matrices, also known as the trace of their matrix product.
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_alloc_block_from_nbl(matrix, sab_orb, desymmetrize)
allocate the blocks of a dbcsr based on the neighbor list
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public cp_dbcsr_plus_fm_fm_t(sparse_matrix, matrix_v, matrix_g, ncol, alpha, keep_sparsity, symmetry_mode)
performs the multiplication sparse_matrix+dense_mat*dens_mat^T if matrix_g is not explicitly given,...
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_copy_general(source, destination, para_env)
General copy of a fm matrix to another fm matrix. Uses non-blocking MPI rather than ScaLAPACK.
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
Types for excited states potential energies.
subroutine, public exstate_potential_release(ex_env)
...
subroutine, public init_coulomb_local(hartree_local, natom)
...
subroutine, public vh_1c_gg_integrals(qs_env, energy_hartree_1c, ecoul_1c, local_rho_set, para_env, tddft, local_rho_set_2nd, core_2nd)
Calculates one center GAPW Hartree energies and matrix elements Hartree potentials are input Takes po...
subroutine, public hartree_local_release(hartree_local)
...
subroutine, public hartree_local_create(hartree_local)
...
Routines to calculate HFX energy and potential.
subroutine, public integrate_four_center(qs_env, x_data, ks_matrix, ehfx, rho_ao, hfx_section, para_env, geometry_did_change, irep, distribute_fock_matrix, ispin)
computes four center integrals for a full basis set and updates the Kohn-Sham-Matrix and energy....
subroutine, public hfx_ri_update_ks(qs_env, ri_data, ks_matrix, ehfx, mos, rho_ao, geometry_did_change, nspins, hf_fraction)
...
Types and set/get functions for HFX.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii} ]
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
functions related to the poisson solver on regular grids
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
collects routines that calculate density matrices
subroutine, public calculate_wx_matrix(mos_occ, xvec, ks_matrix, w_matrix)
Calculate the excited state W matrix from the MO eigenvectors, KS matrix.
subroutine, public calculate_xwx_matrix(mos_occ, xvec, s_matrix, ks_matrix, w_matrix, eval)
Calculate the excited state W matrix from the MO eigenvectors, KS matrix.
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, 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, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, rhoz_cneo_set, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Set the QUICKSTEP environment.
subroutine, public sum_qs_force(qs_force_out, qs_force_in)
Sum up two qs_force entities qs_force_out = qs_force_out + qs_force_in.
subroutine, public deallocate_qs_force(qs_force)
Deallocate a Quickstep force data structure.
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.
subroutine, public total_qs_force(force, qs_force, atomic_kind_set)
Get current total force.
https://en.wikipedia.org/wiki/Finite_difference_coefficient
subroutine, public qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, auxbas_pw_pool, is_triplet, v_xc, v_xc_tau)
...
subroutine, public qs_fxc_fdiff(ks_env, rho0_struct, rho1_struct, xc_section, accuracy, is_triplet, fxc_rho, fxc_tau)
...
subroutine, public prepare_gapw_den(qs_env, local_rho_set, do_rho0, kind_set_external, pw_env_sub)
...
Integrate single or product functions over a potential on a RS grid.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, 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 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, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
routines that build the Kohn-Sham matrix contributions coming from local atomic densities
subroutine, public update_ks_atom(qs_env, ksmat, pmat, forces, tddft, rho_atom_external, kind_set_external, oce_external, sab_external, kscale, kintegral, kforce, fscale)
The correction to the KS matrix due to the GAPW local terms to the hartree and XC contributions is he...
Calculate the KS reference potentials.
subroutine, public ks_ref_potential(qs_env, vh_rspace, vxc_rspace, vtau_rspace, vadmm_rspace, ehartree, exc, h_stress)
calculate the Kohn-Sham reference potential
subroutine, public ks_ref_potential_atom(qs_env, local_rho_set, local_rho_set_admm, v_hartree_rspace)
calculate the Kohn-Sham GAPW reference potentials
subroutine, public local_rho_set_create(local_rho_set)
...
subroutine, public local_rho_set_release(local_rho_set)
...
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
Calculation of overlap matrix, its derivatives and forces.
subroutine, public build_overlap_matrix(ks_env, matrix_s, matrixkp_s, matrix_name, nderivative, basis_type_a, basis_type_b, sab_nl, calculate_forces, matrix_p, matrixkp_p)
Calculation of the overlap matrix over Cartesian Gaussian functions.
subroutine, public rho0_s_grid_create(pw_env, rho0_mpole)
...
subroutine, public integrate_vhg0_rspace(qs_env, v_rspace, para_env, calculate_forces, local_rho_set, local_rho_set_2nd, atener, kforce, my_pools, my_rs_descs)
...
subroutine, public init_rho0(local_rho_set, qs_env, gapw_control, zcore)
...
subroutine, public get_rho0_mpole(rho0_mpole, g0_h, vg0_h, iat, ikind, lmax_0, l0_ikind, mp_gau_ikind, mp_rho, norm_g0l_h, qlm_gg, qlm_car, qlm_tot, zet0_h, igrid_zet0_s, rpgf0_h, rpgf0_s, max_rpgf0_s, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs)
...
subroutine, public allocate_rho_atom_internals(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
...
subroutine, public calculate_rho_atom_coeff(qs_env, rho_ao, rho_atom_set, qs_kind_set, oce, sab, para_env)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_set(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)
...
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...
subroutine, public qs_rho_create(rho)
Allocates a new instance of rho.
subroutine, public stda_force(qs_env, ex_env, gs_mos, stda_env, sub_env, work, debug_forces)
Simplified Tamm Dancoff approach (sTDA). Kernel contribution to forces.
subroutine, public fhxc_force(qs_env, ex_env, gs_mos, full_kernel, debug_forces)
Calculate direct tddft forces.
subroutine, public tddfpt_forces_main(qs_env, gs_mos, ex_env, kernel_env, sub_env, work_matrices)
Perform TDDFPT gradient calculation.
routines that build the integrals of the Vxc potential calculated for the atomic density in the basis...
subroutine, public calculate_xc_2nd_deriv_atom(rho_atom_set, rho1_atom_set, qs_env, xc_section, para_env, do_tddfpt2, do_triplet, kind_set_external)
...
Calculation of Coulomb Hessian contributions in xTB.
subroutine, public xtb_coulomb_hessian(qs_env, ks_matrix, charges1, mcharge1, mcharge)
...
Definition of the xTB parameter types.
subroutine, public get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, en, kqat2, kcn, kq)
...
stores some data used in wavefunction fitting
Provides all information about an atomic kind.
keeps the information about the structure of a full matrix
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 excited states energy.
stores some data used in construction of Kohn-Sham matrix
stores all the informations relevant to an mpi environment
contained for different pw related things
environment for the poisson solver
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Type to hold environments for the different kernels.
Provides all information about a quickstep kind.
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.
Parallel (sub)group environment.
Ground state molecular orbitals.
Set of temporary ("work") matrices.