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)
789 IF (abs(rhotot) > 1.e-05_dp)
THEN
791 IF (logger%para_env%is_source())
THEN
796 cpwarn(
"Real space electron count of excitation density is non-zero.")
798 WRITE (iounit,
"(T2,A,T61,G20.10)")
"Measured electron count is ", rhotot
799 WRITE (iounit,
"(T2,A,/)") repeat(
"*", 79)
806 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
807 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
810 local_rho_set, para_env, tddft=.true.)
812 calculate_forces=.false., &
813 local_rho_set=local_rho_set)
818 CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g)
821 IF (dft_control%do_admm)
THEN
823 xc_section => admm_env%xc_section_primary
829 IF (deriv2_analytic)
THEN
830 NULLIFY (v_xc, v_xc_tau, tau_r)
833 CALL qs_fxc_analytic(rho_xc, trho_xc_r, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
835 CALL qs_fxc_analytic(rho, trho_r, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
837 IF (gapw .OR. gapw_xc)
THEN
838 CALL get_qs_env(qs_env, rho_atom_set=rho_atom_set)
839 rho1_atom_set => local_rho_set%rho_atom_set
848 CALL qs_rho_set(trho, rho_r=trho_r, rho_g=trho_g)
849 CALL qs_fxc_fdiff(ks_env, rho, trho, xc_section, 6, .false., v_xc, v_xc_tau)
854 CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp)
855 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
859 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_hartree_rspace, &
860 hmat=matrix_hz(ispin), &
861 calculate_forces=.false.)
862 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
863 hmat=matrix_hz(ispin), &
864 gapw=gapw_xc, calculate_forces=.false.)
869 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
870 hmat=matrix_hz(ispin), &
871 gapw=gapw, calculate_forces=.false.)
872 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_hartree_rspace, &
873 hmat=matrix_hz(ispin), &
874 gapw=gapw, calculate_forces=.false.)
877 IF (gapw .OR. gapw_xc)
THEN
878 mhz(1:nspins, 1:1) => matrix_hz(1:nspins)
879 mpe(1:nspins, 1:1) => matrix_pe(1:nspins)
881 rho_atom_external=local_rho_set%rho_atom_set)
884 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
885 CALL auxbas_pw_pool%give_back_pw(v_hartree_rspace)
886 CALL auxbas_pw_pool%give_back_pw(rho_tot_gspace)
888 CALL auxbas_pw_pool%give_back_pw(trho_r(ispin))
889 CALL auxbas_pw_pool%give_back_pw(trho_g(ispin))
890 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
892 DEALLOCATE (trho_r, trho_g, v_xc)
895 CALL auxbas_pw_pool%give_back_pw(trho_xc_r(ispin))
896 CALL auxbas_pw_pool%give_back_pw(trho_xc_g(ispin))
898 DEALLOCATE (trho_xc_r, trho_xc_g)
900 IF (
ASSOCIATED(v_xc_tau))
THEN
902 CALL auxbas_pw_pool%give_back_pw(v_xc_tau(ispin))
904 DEALLOCATE (v_xc_tau)
906 IF (dft_control%do_admm)
THEN
912 CALL get_admm_env(admm_env, rho_aux_fit=rho_aux_fit, matrix_s_aux_fit=msaux, &
913 task_list_aux_fit=task_list)
914 basis_type =
"AUX_FIT"
917 ALLOCATE (mpe(nspins, 1))
920 ALLOCATE (mhz(ispin, 1)%matrix)
921 CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix)
922 CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix)
923 CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp)
924 mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix
928 NULLIFY (local_rho_set_admm)
929 IF (admm_env%do_gapw)
THEN
930 basis_type =
"AUX_FIT_SOFT"
931 task_list => admm_env%admm_gapw_env%task_list
932 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
936 admm_env%admm_gapw_env%admm_kind_set, dft_control, para_env)
938 rho_atom_set=local_rho_set_admm%rho_atom_set, &
939 qs_kind_set=admm_env%admm_gapw_env%admm_kind_set, &
940 oce=admm_env%admm_gapw_env%oce, sab=sab_aux_fit, para_env=para_env)
942 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
945 xc_section => admm_env%xc_section_aux
947 NULLIFY (rho_g_aux, rho_r_aux, rhoz_g_aux, rhoz_r_aux)
948 CALL qs_rho_get(rho_aux_fit, rho_r=rho_r_aux, rho_g=rho_g_aux)
950 ALLOCATE (rhoz_r_aux(nspins), rhoz_g_aux(nspins))
952 CALL auxbas_pw_pool%create_pw(rhoz_r_aux(ispin))
953 CALL auxbas_pw_pool%create_pw(rhoz_g_aux(ispin))
957 rho=rhoz_r_aux(ispin), rho_gspace=rhoz_g_aux(ispin), &
958 basis_type=basis_type, &
959 task_list_external=task_list)
964 IF (deriv2_analytic)
THEN
966 CALL qs_fxc_analytic(rho_aux_fit, rhoz_r_aux, tau_r, xc_section, auxbas_pw_pool, .false., v_xc, v_xc_tau)
972 CALL qs_rho_set(rhoz_aux, rho_r=rhoz_r_aux, rho_g=rhoz_g_aux)
973 CALL qs_fxc_fdiff(ks_env, rho_aux_fit, rhoz_aux, xc_section, 6, .false., v_xc, v_xc_tau)
974 DEALLOCATE (rhoz_aux)
978 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
979 CALL integrate_v_rspace(qs_env=qs_env, v_rspace=v_xc(ispin), &
980 hmat=mhz(ispin, 1), basis_type=basis_type, &
981 calculate_forces=.false., &
982 task_list_external=task_list)
985 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
986 CALL auxbas_pw_pool%give_back_pw(rhoz_r_aux(ispin))
987 CALL auxbas_pw_pool%give_back_pw(rhoz_g_aux(ispin))
989 DEALLOCATE (v_xc, rhoz_r_aux, rhoz_g_aux)
991 IF (admm_env%do_gapw)
THEN
992 rho_atom_set => admm_env%admm_gapw_env%local_rho_set%rho_atom_set
993 rho1_atom_set => local_rho_set_admm%rho_atom_set
995 para_env, kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
996 CALL update_ks_atom(qs_env, mhz(:, 1), matrix_pe_admm, forces=.false., tddft=.false., &
997 rho_atom_external=rho1_atom_set, &
998 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
999 oce_external=admm_env%admm_gapw_env%oce, &
1000 sab_external=sab_aux_fit)
1003 nao = admm_env%nao_orb
1004 nao_aux = admm_env%nao_aux_fit
1006 CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix)
1007 DO ispin = 1, nspins
1009 admm_env%work_aux_orb, nao)
1011 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, &
1012 admm_env%work_orb_orb)
1016 CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp)
1022 IF (admm_env%do_gapw)
THEN
1027 IF (gapw .OR. gapw_xc)
THEN
1037 cpassert(n_rep_hf == 1)
1041 IF (hfx_treat_lsd_in_core) mspin = nspins
1043 CALL get_qs_env(qs_env=qs_env, rho=rho, x_data=x_data, para_env=para_env, &
1044 s_mstruct_changed=s_mstruct_changed)
1045 distribute_fock_matrix = .true.
1046 IF (dft_control%do_admm)
THEN
1050 ALLOCATE (mpe(nspins, 1))
1052 DO ispin = 1, nspins
1053 ALLOCATE (mhz(ispin, 1)%matrix)
1054 CALL dbcsr_create(mhz(ispin, 1)%matrix, template=msaux(1)%matrix)
1055 CALL dbcsr_copy(mhz(ispin, 1)%matrix, msaux(1)%matrix)
1056 CALL dbcsr_set(mhz(ispin, 1)%matrix, 0.0_dp)
1057 mpe(ispin, 1)%matrix => matrix_pe_admm(ispin)%matrix
1059 IF (x_data(1, 1)%do_hfx_ri)
THEN
1061 CALL hfx_ri_update_ks(qs_env, x_data(1, 1)%ri_data, mhz, eh1, rho_ao=mpe, &
1062 geometry_did_change=s_mstruct_changed, nspins=nspins, &
1063 hf_fraction=x_data(1, 1)%general_parameter%fraction)
1068 para_env, s_mstruct_changed, 1, distribute_fock_matrix, &
1073 cpassert(
ASSOCIATED(admm_env%work_aux_orb))
1074 cpassert(
ASSOCIATED(admm_env%work_orb_orb))
1075 nao = admm_env%nao_orb
1076 nao_aux = admm_env%nao_aux_fit
1078 CALL dbcsr_create(dbwork, template=matrix_hz(1)%matrix)
1079 DO ispin = 1, nspins
1081 admm_env%work_aux_orb, nao)
1083 1.0_dp, admm_env%A, admm_env%work_aux_orb, 0.0_dp, &
1084 admm_env%work_orb_orb)
1085 CALL dbcsr_copy(dbwork, matrix_hz(ispin)%matrix)
1088 CALL dbcsr_add(matrix_hz(ispin)%matrix, dbwork, 1.0_dp, 1.0_dp)
1096 ALLOCATE (mpe(nspins, 1), mhz(nspins, 1))
1097 DO ispin = 1, nspins
1098 mhz(ispin, 1)%matrix => matrix_hz(ispin)%matrix
1099 mpe(ispin, 1)%matrix => matrix_pe(ispin)%matrix
1101 IF (x_data(1, 1)%do_hfx_ri)
THEN
1103 CALL hfx_ri_update_ks(qs_env, x_data(1, 1)%ri_data, mhz, eh1, rho_ao=mpe, &
1104 geometry_did_change=s_mstruct_changed, nspins=nspins, &
1105 hf_fraction=x_data(1, 1)%general_parameter%fraction)
1110 para_env, s_mstruct_changed, 1, distribute_fock_matrix, &
1114 DEALLOCATE (mpe, mhz)
1119 IF (nspins == 2) focc = 2.0_dp
1120 DO ispin = 1, nspins
1121 mos => gs_mos(ispin)%mos_occ
1124 norb, alpha=focc, beta=0.0_dp)
1127 CALL timestop(handle)
1129 END SUBROUTINE tddfpt_resvec2
1139 SUBROUTINE tddfpt_resvec2_xtb(qs_env, matrix_pe, gs_mos, matrix_hz, cpmos)
1146 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: cpmos
1148 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec2_xtb'
1150 INTEGER :: atom_a, handle, iatom, ikind, is, ispin, &
1151 na, natom, natorb, nkind, norb, ns, &
1153 INTEGER,
DIMENSION(25) :: lao
1154 INTEGER,
DIMENSION(5) :: occ
1155 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: mcharge, mcharge1
1156 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: aocg, aocg1, charges, charges1
1157 REAL(kind=
dp) :: focc
1161 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p, matrix_s
1166 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1170 CALL timeset(routinen, handle)
1172 cpassert(
ASSOCIATED(matrix_pe))
1174 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
1175 nspins = dft_control%nspins
1177 DO ispin = 1, nspins
1178 CALL dbcsr_set(matrix_hz(ispin)%matrix, 0.0_dp)
1181 IF (dft_control%qs_control%xtb_control%coulomb_interaction)
THEN
1183 CALL get_qs_env(qs_env, rho=rho, particle_set=particle_set, &
1184 matrix_s_kp=matrix_s, para_env=para_env)
1185 natom =
SIZE(particle_set)
1187 ALLOCATE (mcharge(natom), charges(natom, 5))
1188 ALLOCATE (mcharge1(natom), charges1(natom, 5))
1191 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
1192 nkind =
SIZE(atomic_kind_set)
1194 ALLOCATE (aocg(nsgf, natom))
1196 ALLOCATE (aocg1(nsgf, natom))
1198 p_matrix => matrix_p(:, 1)
1199 s_matrix => matrix_s(1, 1)%matrix
1200 CALL ao_charges(p_matrix, s_matrix, aocg, para_env)
1201 CALL ao_charges(matrix_pe, s_matrix, aocg1, para_env)
1204 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
1207 atom_a = atomic_kind_set(ikind)%atom_list(iatom)
1208 charges(atom_a, :) = real(occ(:), kind=
dp)
1211 charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a)
1212 charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a)
1216 DEALLOCATE (aocg, aocg1)
1218 mcharge(iatom) = sum(charges(iatom, :))
1219 mcharge1(iatom) = sum(charges1(iatom, :))
1224 DEALLOCATE (charges, mcharge, charges1, mcharge1)
1228 IF (nspins == 2) focc = 1.0_dp
1229 DO ispin = 1, nspins
1230 mos => gs_mos(ispin)%mos_occ
1233 norb, alpha=focc, beta=0.0_dp)
1236 CALL timestop(handle)
1238 END SUBROUTINE tddfpt_resvec2_xtb
1246 SUBROUTINE tddfpt_resvec3(qs_env, cpmos, work)
1249 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: cpmos
1252 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_resvec3'
1254 INTEGER :: handle, ispin, nao, norb, nspins
1261 CALL timeset(routinen, handle)
1263 CALL get_qs_env(qs_env, mos=mos, dft_control=dft_control)
1264 nspins = dft_control%nspins
1266 DO ispin = 1, nspins
1268 associate(rvecs => cpmos(ispin))
1271 CALL cp_fm_struct_create(fmstruct, context=rvecs%matrix_struct%context, nrow_global=norb, &
1272 ncol_global=norb, para_env=rvecs%matrix_struct%para_env)
1276 CALL parallel_gemm(
"T",
"N", norb, norb, nao, 1.0_dp, omos, work%S_C0(ispin), 0.0_dp, umat)
1278 CALL parallel_gemm(
"N",
"T", nao, norb, norb, 1.0_dp, cvec, umat, 0.0_dp, rvecs)
1284 CALL timestop(handle)
1286 END SUBROUTINE tddfpt_resvec3
1300 SUBROUTINE tddfpt_kernel_force(qs_env, ex_env, gs_mos, kernel_env, sub_env, work_matrices, debug_forces)
1302 TYPE(qs_environment_type),
POINTER :: qs_env
1303 TYPE(excited_energy_type),
POINTER :: ex_env
1304 TYPE(tddfpt_ground_state_mos),
DIMENSION(:), &
1306 TYPE(kernel_env_type),
INTENT(IN) :: kernel_env
1307 TYPE(tddfpt_subgroup_env_type) :: sub_env
1308 TYPE(tddfpt_work_matrices) :: work_matrices
1309 LOGICAL,
INTENT(IN) :: debug_forces
1311 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_kernel_force'
1314 TYPE(dft_control_type),
POINTER :: dft_control
1315 TYPE(tddfpt2_control_type),
POINTER :: tddfpt_control
1317 mark_used(work_matrices)
1319 CALL timeset(routinen, handle)
1321 CALL get_qs_env(qs_env, dft_control=dft_control)
1322 tddfpt_control => dft_control%tddfpt2_control
1324 IF (tddfpt_control%kernel == tddfpt_kernel_full)
THEN
1326 CALL fhxc_force(qs_env, ex_env, gs_mos, kernel_env%full_kernel, debug_forces)
1327 ELSE IF (tddfpt_control%kernel == tddfpt_kernel_stda)
THEN
1329 CALL stda_force(qs_env, ex_env, gs_mos, kernel_env%stda_kernel, sub_env, work_matrices, debug_forces)
1330 ELSE IF (tddfpt_control%kernel == tddfpt_kernel_none)
THEN
1332 ex_env%matrix_wx1 => null()
1334 cpabort(
'Unknown kernel type')
1337 CALL timestop(handle)
1339 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, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
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, 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)
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)
...
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.