78 integrate_v_rspace_diagonal,&
79 integrate_v_rspace_one_center
107#include "./base/base_uses.f90"
119 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_linres_kernel'
136 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: c0
137 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: av
139 INTEGER :: ispin, ncol
142 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
143 IF (dft_control%qs_control%semi_empirical)
THEN
144 cpabort(
"Linear response not available with SE methods")
145 ELSE IF (dft_control%qs_control%dftb)
THEN
146 cpabort(
"Linear response not available with DFTB")
147 ELSE IF (dft_control%qs_control%xtb)
THEN
148 CALL apply_op_2_xtb(qs_env, p_env)
150 CALL apply_op_2_dft(qs_env, p_env)
156 DO ispin = 1,
SIZE(c0)
161 ncol=ncol, alpha=1.0_dp, beta=1.0_dp)
171 SUBROUTINE apply_op_2_dft(qs_env, p_env)
175 CHARACTER(len=*),
PARAMETER :: routinen =
'apply_op_2_dft'
177 INTEGER :: handle, ikind, ispin, nkind, ns, nspins
178 LOGICAL :: deriv2_analytic, gapw, gapw_xc, &
180 REAL(kind=
dp) :: alpha, ekin_mol, energy_hartree, &
185 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: k1mat, matrix_s, rho1_ao, rho_ao
186 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ksmat, psmat
200 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r, rho_r, tau1_r, v_rspace_new, &
205 TYPE(
qs_rho_type),
POINTER :: rho, rho0, rho1, rho1_xc, rho1a, &
207 TYPE(
rho_atom_type),
DIMENSION(:),
POINTER :: rho1_atom_set, rho_atom_set
210 CALL timeset(routinen, handle)
212 NULLIFY (auxbas_pw_pool, pw_env, v_rspace_new, para_env, rho1_r, &
213 v_xc, rho1_ao, rho_ao, poisson_env, input, rho, dft_control, &
214 logger, rho1_g, v_xc_tau)
217 energy_hartree = 0.0_dp
218 energy_hartree_1c = 0.0_dp
220 cpassert(
ASSOCIATED(p_env%kpp1))
221 cpassert(
ASSOCIATED(p_env%kpp1_env))
222 kpp1_env => p_env%kpp1_env
232 linres_control=linres_control, &
233 dft_control=dft_control)
235 gapw = dft_control%qs_control%gapw
236 gapw_xc = dft_control%qs_control%gapw_xc
237 lr_triplet = linres_control%lr_triplet
240 rho1_xc => p_env%rho1_xc
241 cpassert(
ASSOCIATED(rho1))
243 cpassert(
ASSOCIATED(rho1_xc))
246 CALL qs_rho_get(rho, rho_ao=rho_ao, rho_r=rho_r)
247 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
249 nspins =
SIZE(p_env%kpp1)
250 lrigpw = dft_control%qs_control%lrigpw
254 lri_density=lri_density, &
255 atomic_kind_set=atomic_kind_set)
258 IF (.NOT.
ASSOCIATED(kpp1_env%v_ao))
THEN
262 ALLOCATE (kpp1_env%v_ao(ispin)%matrix)
263 CALL dbcsr_copy(kpp1_env%v_ao(ispin)%matrix, matrix_s(1)%matrix, &
268 IF (dft_control%do_admm)
THEN
269 xc_section => admm_env%xc_section_primary
275 cpassert(
ASSOCIATED(pw_env))
276 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool, &
277 poisson_env=poisson_env)
278 CALL auxbas_pw_pool%create_pw(v_hartree_gspace)
279 CALL auxbas_pw_pool%create_pw(v_hartree_rspace)
281 IF (gapw .OR. gapw_xc)
THEN
286 CALL auxbas_pw_pool%create_pw(rho1_tot_gspace)
289 CALL pw_copy(rho1_g(1), rho1_tot_gspace)
291 CALL pw_axpy(rho1_g(ispin), rho1_tot_gspace)
294 CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rho0_s_gs, rho1_tot_gspace)
295 IF (
ASSOCIATED(p_env%local_rho_set%rho0_mpole%rhoz_cneo_s_gs))
THEN
296 CALL pw_axpy(p_env%local_rho_set%rho0_mpole%rhoz_cneo_s_gs, rho1_tot_gspace)
300 IF (.NOT. (nspins == 1 .AND. lr_triplet))
THEN
304 CALL pw_transfer(v_hartree_gspace, v_hartree_rspace)
307 CALL auxbas_pw_pool%give_back_pw(rho1_tot_gspace)
321 IF (deriv2_analytic)
THEN
322 CALL qs_rho_get(rho1a, rho_r=rho1_r, tau_r=tau1_r)
323 CALL get_qs_env(qs_env, xcint_weights=weights)
324 CALL qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, weights, auxbas_pw_pool, &
325 lr_triplet, v_xc, v_xc_tau)
326 IF (gapw .OR. gapw_xc)
THEN
327 CALL get_qs_env(qs_env, rho_atom_set=rho_atom_set)
328 rho1_atom_set => p_env%local_rho_set%rho_atom_set
330 do_triplet=lr_triplet)
333 CALL qs_fxc_fdiff(ks_env, rho0, rho1a, xc_section, 6, lr_triplet, v_xc, v_xc_tau)
334 cpassert((.NOT. gapw) .AND. (.NOT. gapw_xc))
340 CALL pw_scale(v_hartree_rspace, v_hartree_rspace%pw_grid%dvol)
342 CALL pw_scale(v_rspace_new(ispin), v_rspace_new(ispin)%pw_grid%dvol)
343 IF (
ASSOCIATED(v_xc_tau))
CALL pw_scale(v_xc_tau(ispin), v_xc_tau(ispin)%pw_grid%dvol)
347 IF (dft_control%do_admm)
THEN
349 IF (.NOT.
ASSOCIATED(kpp1_env%deriv_set_admm))
THEN
350 cpassert(.NOT. lr_triplet)
351 CALL get_qs_env(qs_env, xcint_weights=weights)
352 xc_section_aux => admm_env%xc_section_aux
355 ALLOCATE (kpp1_env%deriv_set_admm, kpp1_env%rho_set_admm)
357 rho_r, auxbas_pw_pool, weights, &
358 xc_section=xc_section_aux)
367 CALL dbcsr_set(kpp1_env%v_ao(ispin)%matrix, 0.0_dp)
373 IF (nspins == 1)
THEN
375 IF (.NOT. (lr_triplet))
THEN
376 CALL pw_scale(v_rspace_new(1), 2.0_dp)
377 IF (
ASSOCIATED(v_xc_tau))
CALL pw_scale(v_xc_tau(1), 2.0_dp)
381 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
382 pmat=rho1_ao(ispin), &
383 hmat=kpp1_env%v_ao(ispin), &
385 calculate_forces=.false., gapw=gapw_xc)
387 IF (
ASSOCIATED(v_xc_tau))
THEN
388 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
389 pmat=rho1_ao(ispin), &
390 hmat=kpp1_env%v_ao(ispin), &
392 compute_tau=.true., &
393 calculate_forces=.false., gapw=gapw_xc)
397 IF (.NOT. lr_triplet)
THEN
398 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp, 0.0_dp)
400 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
401 pmat=rho_ao(ispin), &
402 hmat=kpp1_env%v_ao(ispin), &
404 calculate_forces=.false., gapw=gapw)
408 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
409 pmat=rho_ao(ispin), &
410 hmat=kpp1_env%v_ao(ispin), &
412 calculate_forces=.false., gapw=gapw_xc)
414 IF (
ASSOCIATED(v_xc_tau))
THEN
415 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
416 pmat=rho_ao(ispin), &
417 hmat=kpp1_env%v_ao(ispin), &
419 compute_tau=.true., &
420 calculate_forces=.false., gapw=gapw_xc)
423 CALL pw_copy(v_hartree_rspace, v_rspace_new(ispin))
424 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
425 pmat=rho_ao(ispin), &
426 hmat=kpp1_env%v_ao(ispin), &
428 calculate_forces=.false., gapw=gapw)
433 IF (nspins == 1)
THEN
434 IF (.NOT. (lr_triplet))
THEN
435 CALL pw_scale(v_rspace_new(1), 2.0_dp)
436 IF (
ASSOCIATED(v_xc_tau))
CALL pw_scale(v_xc_tau(1), 2.0_dp)
440 IF (.NOT. lr_triplet)
THEN
441 CALL pw_axpy(v_hartree_rspace, v_rspace_new(1), 2.0_dp)
444 CALL pw_axpy(v_hartree_rspace, v_rspace_new(ispin), 1.0_dp)
448 IF (
ASSOCIATED(v_xc_tau))
THEN
449 cpabort(
"metaGGA-functionals not supported with LRI!")
452 lri_v_int => lri_density%lri_coefs(ispin)%lri_kinds
455 lri_v_int(ikind)%v_int = 0.0_dp
457 CALL integrate_v_rspace_one_center(v_rspace_new(ispin), qs_env, &
458 lri_v_int, .false.,
"LRI_AUX")
460 CALL para_env%sum(lri_v_int(ikind)%v_int)
463 k1mat(1)%matrix => kpp1_env%v_ao(ispin)%matrix
464 IF (lri_env%exact_1c_terms)
THEN
465 CALL integrate_v_rspace_diagonal(v_rspace_new(ispin), k1mat(1)%matrix, &
466 rho_ao(ispin)%matrix, qs_env, .false.,
"ORB")
471 CALL integrate_v_rspace(v_rspace=v_rspace_new(ispin), &
472 pmat=rho_ao(ispin), &
473 hmat=kpp1_env%v_ao(ispin), &
475 calculate_forces=.false., gapw=gapw)
477 IF (
ASSOCIATED(v_xc_tau))
THEN
478 CALL integrate_v_rspace(v_rspace=v_xc_tau(ispin), &
479 pmat=rho_ao(ispin), &
480 hmat=kpp1_env%v_ao(ispin), &
482 compute_tau=.true., &
483 calculate_forces=.false., gapw=gapw)
489 CALL dbcsr_copy(p_env%kpp1(ispin)%matrix, kpp1_env%v_ao(ispin)%matrix)
493 IF (.NOT. ((nspins == 1 .AND. lr_triplet)))
THEN
495 p_env%hartree_local%ecoul_1c, &
496 p_env%local_rho_set, &
497 para_env, tddft=.true., core_2nd=.true.)
500 calculate_forces=.false., &
501 local_rho_set=p_env%local_rho_set)
505 ns =
SIZE(p_env%kpp1)
506 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
508 psmat(1:ns, 1:1) => rho_ao(1:ns)
509 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
510 rho_atom_external=p_env%local_rho_set%rho_atom_set)
511 ELSE IF (gapw_xc)
THEN
512 ns =
SIZE(p_env%kpp1)
513 ksmat(1:ns, 1:1) => p_env%kpp1(1:ns)
515 psmat(1:ns, 1:1) => rho_ao(1:ns)
516 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
517 rho_atom_external=p_env%local_rho_set%rho_atom_set)
521 IF (dft_control%qs_control%do_kg .AND. .NOT. (lr_triplet .OR. gapw .OR. gapw_xc))
THEN
530 ks_matrix=p_env%kpp1, &
532 calc_force=.false., &
538 CALL auxbas_pw_pool%give_back_pw(v_hartree_gspace)
539 CALL auxbas_pw_pool%give_back_pw(v_hartree_rspace)
541 CALL auxbas_pw_pool%give_back_pw(v_rspace_new(ispin))
543 DEALLOCATE (v_rspace_new)
544 IF (
ASSOCIATED(v_xc_tau))
THEN
546 CALL auxbas_pw_pool%give_back_pw(v_xc_tau(ispin))
548 DEALLOCATE (v_xc_tau)
551 CALL timestop(handle)
553 END SUBROUTINE apply_op_2_dft
560 SUBROUTINE apply_op_2_xtb(qs_env, p_env)
564 CHARACTER(len=*),
PARAMETER :: routinen =
'apply_op_2_xtb'
566 INTEGER :: atom_a, handle, iatom, ikind, is, ispin, &
567 na, natom, natorb, nkind, ns, nsgf, &
569 INTEGER,
DIMENSION(25) :: lao
570 INTEGER,
DIMENSION(5) :: occ
571 LOGICAL :: lr_triplet
572 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: mcharge, mcharge1
573 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: aocg, aocg1, charges, charges1
575 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: pmat, rho_ao
576 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p, matrix_p1, matrix_s
582 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
587 CALL timeset(routinen, handle)
589 cpassert(
ASSOCIATED(p_env%kpp1_env))
590 cpassert(
ASSOCIATED(p_env%kpp1))
591 kpp1_env => p_env%kpp1_env
594 cpassert(
ASSOCIATED(rho1))
600 linres_control=linres_control, &
601 dft_control=dft_control)
605 lr_triplet = linres_control%lr_triplet
606 cpassert(.NOT. lr_triplet)
608 nspins =
SIZE(p_env%kpp1)
611 CALL dbcsr_set(p_env%kpp1(ispin)%matrix, 0.0_dp)
614 IF (dft_control%qs_control%xtb_control%coulomb_interaction)
THEN
616 CALL get_qs_env(qs_env, particle_set=particle_set, matrix_s_kp=matrix_s)
617 natom =
SIZE(particle_set)
620 ALLOCATE (mcharge(natom), charges(natom, 5))
621 ALLOCATE (mcharge1(natom), charges1(natom, 5))
624 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, qs_kind_set=qs_kind_set)
625 nkind =
SIZE(atomic_kind_set)
627 ALLOCATE (aocg(nsgf, natom))
629 ALLOCATE (aocg1(nsgf, natom))
631 CALL ao_charges(matrix_p, matrix_s, aocg, para_env)
632 CALL ao_charges(matrix_p1, matrix_s, aocg1, para_env)
633 IF (nspins == 2) aocg1 = 0.5_dp*aocg1
636 CALL get_qs_kind(qs_kind_set(ikind), xtb_parameter=xtb_kind)
639 atom_a = atomic_kind_set(ikind)%atom_list(iatom)
640 charges(atom_a, :) = real(occ(:), kind=
dp)
643 charges(atom_a, ns) = charges(atom_a, ns) - aocg(is, atom_a)
644 charges1(atom_a, ns) = charges1(atom_a, ns) - aocg1(is, atom_a)
648 DEALLOCATE (aocg, aocg1)
650 mcharge(iatom) = sum(charges(iatom, :))
651 mcharge1(iatom) = sum(charges1(iatom, :))
654 pmat => matrix_p1(:, 1)
657 DEALLOCATE (charges, mcharge, charges1, mcharge1)
660 CALL timestop(handle)
662 END SUBROUTINE apply_op_2_xtb
675 CHARACTER(LEN=*),
PARAMETER :: routinen =
'apply_hfx'
677 INTEGER :: handle, ispin, nspins
679 REAL(kind=
dp) :: alpha
681 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: h1_mat, matrix_s, rho1_ao, work
685 CALL timeset(routinen, handle)
692 dft_control=dft_control)
693 nspins = dft_control%nspins
700 IF (dft_control%do_admm)
THEN
702 cpabort(
"ADMM: Linear Response needs purification_method=none")
705 cpabort(
"ADMM: Linear Response needs scaling_model=none")
708 cpabort(
"ADMM: Linear Response needs admm_method=basis_projection")
711 rho1_ao => p_env%p1_admm
712 h1_mat => p_env%kpp1_admm
721 ALLOCATE (work(ispin)%matrix)
722 CALL dbcsr_create(work(ispin)%matrix, template=h1_mat(ispin)%matrix)
723 CALL dbcsr_copy(work(ispin)%matrix, h1_mat(ispin)%matrix)
724 CALL dbcsr_set(work(ispin)%matrix, 0.0_dp)
727 CALL hfx_matrix(work, rho1_ao, qs_env, hfx_section)
730 IF (nspins == 2) alpha = 1.0_dp
733 CALL dbcsr_add(h1_mat(ispin)%matrix, work(ispin)%matrix, 1.0_dp, alpha)
740 CALL timestop(handle)
756 SUBROUTINE hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections, external_x_data, ex)
757 TYPE(
dbcsr_p_type),
DIMENSION(:),
TARGET :: matrix_ks, rho_ao
760 TYPE(
hfx_type),
DIMENSION(:, :),
OPTIONAL,
TARGET :: external_x_data
761 REAL(kind=
dp),
OPTIONAL :: ex
763 CHARACTER(LEN=*),
PARAMETER :: routinen =
'hfx_matrix'
765 INTEGER :: handle, irep, ispin, mspin, n_rep_hf, &
767 LOGICAL :: distribute_fock_matrix, &
768 hfx_treat_lsd_in_core, &
770 REAL(kind=
dp) :: eh1, ehfx
771 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks_kp, rho_ao_kp
773 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
776 CALL timeset(routinen, handle)
778 NULLIFY (dft_control, para_env, matrix_ks_kp, rho_ao_kp, x_data)
781 dft_control=dft_control, &
783 s_mstruct_changed=s_mstruct_changed, &
786 IF (
PRESENT(external_x_data)) x_data => external_x_data
788 cpassert(dft_control%nimages == 1)
789 nspins = dft_control%nspins
796 distribute_fock_matrix = .true.
799 IF (hfx_treat_lsd_in_core) mspin = nspins
801 matrix_ks_kp(1:nspins, 1:1) => matrix_ks(1:nspins)
802 rho_ao_kp(1:nspins, 1:1) => rho_ao(1:nspins)
804 DO irep = 1, n_rep_hf
807 IF (x_data(irep, 1)%do_hfx_ri)
THEN
808 CALL hfx_ri_update_ks(qs_env, x_data(irep, 1)%ri_data, matrix_ks_kp, ehfx, &
809 rho_ao=rho_ao_kp, geometry_did_change=s_mstruct_changed, &
810 nspins=nspins, hf_fraction=x_data(irep, 1)%general_parameter%fraction)
816 s_mstruct_changed, irep, distribute_fock_matrix, ispin=ispin)
824 IF (
PRESENT(ex)) ex = ehfx
826 CALL timestop(handle)
839 CHARACTER(len=*),
PARAMETER :: routinen =
'apply_xc_admm'
841 CHARACTER(LEN=default_string_length) :: basis_type
842 INTEGER :: handle, ispin, ns, nspins
843 INTEGER,
DIMENSION(2, 3) :: bo
845 REAL(kind=
dp) :: alpha
849 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ksmat, psmat
854 POINTER :: sab_aux_fit
858 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_aux_r, tau_pw, v_xc, v_xc_tau
860 TYPE(
rho_atom_type),
DIMENSION(:),
POINTER :: rho1_atom_set, rho_atom_set
866 CALL timeset(routinen, handle)
868 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control)
870 IF (dft_control%do_admm)
THEN
874 CALL get_qs_env(qs_env=qs_env, linres_control=linres_control)
875 cpassert(.NOT. dft_control%qs_control%lrigpw)
876 cpassert(.NOT. linres_control%lr_triplet)
878 nspins = dft_control%nspins
882 cpassert(
ASSOCIATED(pw_env))
883 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
887 CALL get_admm_env(qs_env%admm_env, matrix_s_aux_fit=matrix_s)
888 ALLOCATE (xcmat%matrix)
889 CALL dbcsr_create(xcmat%matrix, template=matrix_s(1)%matrix)
892 gapw = admm_env%do_gapw
895 CALL get_qs_env(qs_env=qs_env, xcint_weights=weights)
897 CALL qs_rho_get(p_env%rho1_admm, rho_r=rho1_aux_r, rho_g=rho1_aux_g)
898 xc_section => admm_env%xc_section_aux
899 bo = rho1_aux_r(1)%pw_grid%bounds_local
914 CALL xc_calc_2nd_deriv(v_xc, v_xc_tau, p_env%kpp1_env%deriv_set_admm, p_env%kpp1_env%rho_set_admm, &
915 rho1_aux_r, rho1_aux_g, tau_pw, auxbas_pw_pool, weights, gapw=.false., &
916 xc_section=xc_section)
917 IF (
ASSOCIATED(v_xc_tau))
THEN
918 cpabort(
"Meta-GGA ADMM functionals not yet supported!")
922 basis_type =
"AUX_FIT"
924 CALL get_admm_env(admm_env, task_list_aux_fit=task_list)
925 IF (admm_env%do_gapw)
THEN
927 do_rho0=.false., kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
928 rho_atom_set => admm_env%admm_gapw_env%local_rho_set%rho_atom_set
929 rho1_atom_set => p_env%local_rho_set_admm%rho_atom_set
931 kind_set_external=admm_env%admm_gapw_env%admm_kind_set)
932 basis_type =
"AUX_FIT_SOFT"
933 task_list => admm_env%admm_gapw_env%task_list
937 IF (nspins == 1) alpha = 2.0_dp
940 CALL pw_scale(v_xc(ispin), v_xc(ispin)%pw_grid%dvol)
941 CALL dbcsr_copy(xcmat%matrix, matrix_s(1)%matrix)
943 CALL integrate_v_rspace(v_rspace=v_xc(ispin), hmat=xcmat, qs_env=qs_env, &
944 calculate_forces=.false., basis_type=basis_type, &
945 task_list_external=task_list)
946 CALL dbcsr_add(p_env%kpp1_admm(ispin)%matrix, xcmat%matrix, 1.0_dp, alpha)
949 IF (admm_env%do_gapw)
THEN
951 ns =
SIZE(p_env%kpp1_admm)
952 ksmat(1:ns, 1:1) => p_env%kpp1_admm(1:ns)
953 psmat(1:ns, 1:1) => p_env%p1_admm(1:ns)
954 CALL update_ks_atom(qs_env, ksmat, psmat, forces=.false., tddft=.true., &
955 rho_atom_external=p_env%local_rho_set_admm%rho_atom_set, &
956 kind_set_external=admm_env%admm_gapw_env%admm_kind_set, &
957 oce_external=admm_env%admm_gapw_env%oce, &
958 sab_external=sab_aux_fit)
962 CALL auxbas_pw_pool%give_back_pw(v_xc(ispin))
970 CALL timestop(handle)
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(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.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
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
represent a full matrix distributed on many processors
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
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
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...
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, nspins)
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.
Routines for a Kim-Gordon-like partitioning into molecular subunits.
subroutine, public kg_ekin_subset(qs_env, ks_matrix, ekin_mol, calc_force, do_kernel, pmat_ext)
Calculates the subsystem Hohenberg-Kohn kinetic energy and the forces.
Types needed for a Kim-Gordon-like partitioning into molecular subunits.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
routines that build the Kohn-Sham matrix for the LRIGPW and xc parts
subroutine, public calculate_lri_ks_matrix(lri_env, lri_v_int, h_matrix, atomic_kind_set, cell_to_index)
update of LRIGPW KS matrix
Interface to the message passing library MPI.
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii} ]
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 ...
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
https://en.wikipedia.org/wiki/Finite_difference_coefficient
subroutine, public qs_fxc_analytic(rho0, rho1_r, tau1_r, xc_section, weights, auxbas_pw_pool, is_triplet, v_xc, v_xc_tau, spinflip)
...
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, hund_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, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, 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, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
basis types for the calculation of the perturbation of density theory.
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...
subroutine, public apply_op_2(qs_env, p_env, c0, av)
...
subroutine, public apply_xc_admm(qs_env, p_env)
...
subroutine, public hfx_matrix(matrix_ks, rho_ao, qs_env, hfx_sections, external_x_data, ex)
Add the hfx contributions to the Hamiltonian.
subroutine, public apply_hfx(qs_env, p_env)
Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
Type definitiona for linear response calculations.
Define the neighbor list data types and the corresponding functionality.
Utility functions for the perturbation calculations.
subroutine, public p_env_finish_kpp1(qs_env, p_env)
...
basis types for the calculation of the perturbation of density theory.
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)
...
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...
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, do_sf, kind_set_external)
...
type(xc_rho_cflags_type) function, public xc_functionals_get_needs(functionals, lsd, calc_potential)
...
subroutine, public xc_rho_set_create(rho_set, local_bounds, rho_cutoff, drho_cutoff, tau_cutoff)
allocates and does (minimal) initialization of a rho_set
subroutine, public xc_rho_set_release(rho_set, pw_pool)
releases the given rho_set
subroutine, public xc_rho_set_update(rho_set, rho_r, rho_g, tau, needs, xc_deriv_method_id, xc_rho_smooth_id, pw_pool, spinflip)
updates the given rho set with the density given by rho_r (and rho_g). The rho set will contain the c...
Exchange and Correlation functional calculations.
subroutine, public xc_prep_2nd_deriv(deriv_set, rho_set, rho_r, pw_pool, weights, xc_section, tau_r)
Prepare objects for the calculation of the 2nd derivatives of the density functional....
subroutine, public xc_calc_2nd_deriv(v_xc, v_xc_tau, deriv_set, rho_set, rho1_r, rho1_g, tau1_r, pw_pool, weights, xc_section, gapw, vxg, do_excitations, do_sf, do_triplet, compute_virial, virial_xc)
Caller routine to calculate the second order potential in the direction of rho1_r.
Calculation of Coulomb Hessian contributions in xTB.
subroutine, public xtb_coulomb_hessian(qs_env, ks_matrix, charges1, mcharge1, mcharge, matrix_p1)
...
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, wall, 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.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores some data used in construction of Kohn-Sham matrix
Contains all the info needed for KG runs...
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 ...
Provides all information about a quickstep kind.
environment that keeps the informations and temporary val to build the kpp1 kernel matrix
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
General settings for linear response calculations.
Represent a qs system that is perturbed. Can calculate the linear operator and the rhs of the system ...
keeps the density in various representations, keeping track of which ones are valid.
contains a flag for each component of xc_rho_set, so that you can use it to tell which components you...
represent a density, with all the representation and data needed to perform a functional evaluation