76#include "./base/base_uses.f90"
82 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'hfx_exx'
104 do_gw, do_admm, calc_forces, reuse_hfx, do_im_time, &
105 E_ex_from_GW, E_admm_from_GW, t3)
107 INTEGER,
INTENT(IN) :: unit_nr
109 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
110 LOGICAL,
INTENT(IN) :: do_gw, do_admm, calc_forces, reuse_hfx, &
112 REAL(kind=
dp),
INTENT(IN) :: e_ex_from_gw, e_admm_from_gw(2), t3
114 CHARACTER(len=*),
PARAMETER :: routinen =
'calculate_exx'
116 INTEGER :: handle, i, irep, ispin, mspin, n_rep_hf, &
118 LOGICAL :: calc_ints, hfx_treat_lsd_in_core, &
120 REAL(kind=
dp) :: eh1, ehfx, t1, t2, tf1, tf2
121 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_ks_aux_fit, rho_ao, &
122 rho_ao_aux_fit, rho_ao_resp
123 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks_2d, rho_ao_2d
131 CALL timeset(routinen, handle)
135 NULLIFY (input, para_env, matrix_ks, matrix_ks_aux_fit, rho, rho_ao, virial, &
136 dft_control, rho_aux_fit, rho_ao_aux_fit)
145 matrix_ks=matrix_ks, &
147 dft_control=dft_control)
152 matrix_ks_aux_fit=matrix_ks_aux_fit, &
153 rho_aux_fit=rho_aux_fit)
154 CALL qs_rho_get(rho_aux_fit, rho_ao=rho_ao_aux_fit)
156 IF (qs_env%admm_env%do_gapw)
THEN
157 cpabort(
"ADMM EXX only implmented with GPW")
166 DO i = 1,
SIZE(matrix_ks)
167 CALL dbcsr_set(matrix_ks(i)%matrix, 0.0_dp)
169 CALL dbcsr_set(matrix_ks_aux_fit(i)%matrix, 0.0_dp)
176 IF (calc_forces) cpabort(
"Not implemented")
178 IF (qs_env%mp2_env%ri_g0w0%update_xc_energy)
THEN
179 CALL remove_exc_energy(energy)
180 energy%total = energy%total + e_ex_from_gw
181 energy%ex = e_ex_from_gw
183 energy%total = energy%total + e_admm_from_gw(1) + e_admm_from_gw(2)
184 energy%exc = e_admm_from_gw(1)
185 energy%exc_aux_fit = e_admm_from_gw(2)
189 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.6)')
'Total EXX Time=', t2 - t1 + t3
190 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.14)')
'EXX energy = ', energy%ex
191 IF (do_admm .AND. unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.14)') &
192 'EXX ADMM XC correction = ', e_admm_from_gw(1) + e_admm_from_gw(2)
197 CALL remove_exc_energy(energy)
199 nspins = dft_control%nspins
201 IF (hfx_treat_lsd_in_core) mspin = nspins
204 IF (reuse_hfx) calc_ints = .false.
205 IF (calc_forces .AND. do_im_time) calc_ints = .false.
209 matrix_ks_2d(1:nspins, 1:1) => matrix_ks_aux_fit(1:nspins)
210 rho_ao_2d(1:nspins, 1:1) => rho_ao_aux_fit(1:nspins)
212 matrix_ks_2d(1:nspins, 1:1) => matrix_ks(1:nspins)
213 rho_ao_2d(1:nspins, 1:1) => rho_ao(1:nspins)
216 DO irep = 1, n_rep_hf
218 IF (x_data(irep, 1)%do_hfx_ri)
THEN
219 CALL hfx_ri_update_ks(qs_env, x_data(irep, 1)%ri_data, matrix_ks_2d, ehfx, &
220 rho_ao=rho_ao_2d, geometry_did_change=calc_ints, nspins=nspins, &
221 hf_fraction=x_data(irep, 1)%general_parameter%fraction)
227 rho_ao_2d, hfx_sections, para_env, &
228 calc_ints, irep, .true., ispin=ispin)
236 energy%total = energy%total + energy%ex
238 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
240 virial%pv_calculate = .true.
241 virial%pv_fock_4c = 0.0_dp
244 IF (calc_forces)
THEN
248 NULLIFY (rho_ao_resp)
250 DO irep = 1, n_rep_hf
252 IF (x_data(irep, 1)%do_hfx_ri)
THEN
255 x_data(irep, 1)%general_parameter%fraction, &
256 rho_ao=rho_ao_2d, rho_ao_resp=rho_ao_resp, &
257 use_virial=use_virial)
261 hfx_sections, para_env, irep, &
262 use_virial, external_x_data=x_data)
269 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.6)')
'Total EXX Force Time=', tf2 - tf1
273 virial%pv_exx = virial%pv_exx - virial%pv_fock_4c
274 virial%pv_virial = virial%pv_virial - virial%pv_fock_4c
281 energy%exc, energy%exc_aux_fit, calc_forces, &
287 energy%total = energy%total + energy%exc_aux_fit
288 energy%total = energy%total + energy%exc
293 virial%pv_calculate = .false.
298 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.6)')
'Total EXX Time=', t2 - t1 + t3
299 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A,T56,F25.14)')
'EXX energy = ', energy%ex
300 IF (do_admm .AND. unit_nr > 0)
THEN
301 WRITE (unit_nr,
'(T3,A,T56,F25.14)')
'EXX ADMM XC correction = ', energy%exc + energy%exc_aux_fit
307 CALL timestop(handle)
324 recalc_integrals, do_admm, do_ec, do_exx, reuse_hfx)
329 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
330 LOGICAL,
INTENT(IN),
OPTIONAL :: recalc_integrals, do_admm, do_ec, &
333 CHARACTER(LEN=*),
PARAMETER :: routinen =
'add_exx_to_rhs'
335 INTEGER :: handle, ispin, nao, nao_aux, nspins, &
337 LOGICAL :: calc_ints, do_hfx, my_do_ec, my_do_exx, &
339 REAL(
dp) :: dummy_real1, dummy_real2
342 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: dbcsr_work, matrix_ks, matrix_s_aux, &
343 rho_ao, rho_ao_aux, work_admm
349 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: vadmm_rspace, vtau_rspace, vxc_rspace
354 NULLIFY (dbcsr_work, matrix_ks, rho, hfx_section, pw_env, vadmm_rspace, vtau_rspace, vxc_rspace, &
355 auxbas_pw_pool, dft_control, rho_ao, rho_aux_fit, rho_ao_aux, work_admm, &
356 matrix_s_aux, admm_env, task_list_aux_fit)
359 IF (logger%para_env%is_source())
THEN
365 CALL timeset(routinen, handle)
367 my_recalc_integrals = .false.
368 IF (
PRESENT(recalc_integrals)) my_recalc_integrals = recalc_integrals
370 IF (
PRESENT(do_ec)) my_do_ec = do_ec
372 IF (
PRESENT(do_exx)) my_do_exx = do_exx
375 CALL get_qs_env(qs_env, matrix_ks=matrix_ks, rho=rho, pw_env=pw_env, dft_control=dft_control)
376 nspins = dft_control%nspins
383 ALLOCATE (dbcsr_work(ispin)%matrix)
384 CALL dbcsr_copy(dbcsr_work(ispin)%matrix, matrix_ks(ispin)%matrix)
385 CALL dbcsr_set(dbcsr_work(ispin)%matrix, 0.0_dp)
388 IF (dft_control%do_admm)
THEN
390 CALL get_admm_env(admm_env, matrix_s_aux_fit=matrix_s_aux, task_list_aux_fit=task_list_aux_fit, &
391 rho_aux_fit=rho_aux_fit)
394 ALLOCATE (work_admm(ispin)%matrix)
395 CALL dbcsr_create(work_admm(ispin)%matrix, template=matrix_s_aux(1)%matrix)
396 CALL dbcsr_copy(work_admm(ispin)%matrix, matrix_s_aux(1)%matrix)
397 CALL dbcsr_set(work_admm(ispin)%matrix, 0.0_dp)
399 CALL dbcsr_create(dbcsr_tmp, template=matrix_ks(1)%matrix)
400 CALL dbcsr_copy(dbcsr_tmp, matrix_ks(1)%matrix)
402 nao = admm_env%nao_orb
403 nao_aux = admm_env%nao_aux_fit
404 CALL qs_rho_get(rho_aux_fit, rho_ao=rho_ao_aux)
410 CALL ks_ref_potential(qs_env, vh_rspace, vxc_rspace, vtau_rspace, vadmm_rspace, dummy_real1, dummy_real2)
417 CALL dbcsr_copy(dbcsr_work(ispin)%matrix, matrix_ks(ispin)%matrix)
421 CALL pw_scale(vxc_rspace(ispin), -1.0_dp)
422 CALL integrate_v_rspace(v_rspace=vxc_rspace(ispin), hmat=dbcsr_work(ispin), qs_env=qs_env, &
423 calculate_forces=.false.)
424 IF (
ASSOCIATED(vtau_rspace))
THEN
425 CALL pw_scale(vtau_rspace(ispin), -1.0_dp)
426 CALL integrate_v_rspace(v_rspace=vtau_rspace(ispin), hmat=dbcsr_work(ispin), qs_env=qs_env, &
427 calculate_forces=.false., compute_tau=.true.)
434 IF (my_do_exx .OR. my_do_ec)
THEN
439 IF (dft_control%do_admm)
THEN
444 CALL integrate_v_rspace(v_rspace=vadmm_rspace(ispin), hmat=work_admm(ispin), &
445 qs_env=qs_env, calculate_forces=.false., basis_type=
"AUX_FIT", &
446 task_list_external=task_list_aux_fit)
450 CALL tddft_hfx_matrix(work_admm, rho_ao_aux, qs_env, .false., my_recalc_integrals)
454 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao_aux, 1.0_dp, admm_env%work_aux_aux, admm_env%A, &
455 0.0_dp, admm_env%work_aux_orb)
456 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, admm_env%work_aux_orb, &
457 0.0_dp, admm_env%work_orb_orb)
458 CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbcsr_tmp, keep_sparsity=.true.)
459 CALL dbcsr_add(dbcsr_work(ispin)%matrix, dbcsr_tmp, 1.0_dp, -1.0_dp)
465 CALL tddft_hfx_matrix(dbcsr_work, rho_ao, qs_env, .false., my_recalc_integrals)
475 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
476 CALL auxbas_pw_pool%give_back_pw(vh_rspace)
478 CALL auxbas_pw_pool%give_back_pw(vxc_rspace(ispin))
479 IF (
ASSOCIATED(vtau_rspace))
THEN
480 CALL auxbas_pw_pool%give_back_pw(vtau_rspace(ispin))
483 DEALLOCATE (vxc_rspace)
484 IF (
ASSOCIATED(vtau_rspace))
DEALLOCATE (vtau_rspace)
486 IF (dft_control%do_admm)
THEN
488 IF (
ASSOCIATED(vadmm_rspace))
THEN
489 CALL auxbas_pw_pool%give_back_pw(vadmm_rspace(ispin))
492 IF (
ASSOCIATED(vadmm_rspace))
DEALLOCATE (vadmm_rspace)
496 CALL exx_pre_hfx(ext_hfx_section, x_data, reuse_hfx)
499 IF (reuse_hfx) calc_ints = .false.
502 CALL dbcsr_set(work_admm(ispin)%matrix, 0.0_dp)
505 CALL tddft_hfx_matrix(work_admm, rho_ao_aux, qs_env, .false., calc_ints, ext_hfx_section, &
510 dummy_real2, .false., .false.)
514 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao_aux, 1.0_dp, admm_env%work_aux_aux, admm_env%A, &
515 0.0_dp, admm_env%work_aux_orb)
516 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, admm_env%work_aux_orb, &
517 0.0_dp, admm_env%work_orb_orb)
518 CALL copy_fm_to_dbcsr(admm_env%work_orb_orb, dbcsr_tmp, keep_sparsity=.true.)
519 CALL dbcsr_add(dbcsr_work(ispin)%matrix, dbcsr_tmp, 1.0_dp, 1.0_dp)
523 CALL tddft_hfx_matrix(dbcsr_work, rho_ao, qs_env, .false., calc_ints, ext_hfx_section, x_data)
529 CALL dbcsr_add(rhs(ispin)%matrix, dbcsr_work(ispin)%matrix, 1.0_dp, 1.0_dp)
533 IF (dft_control%do_admm)
THEN
538 CALL timestop(handle)
549 SUBROUTINE get_exx_admm_xc_sections(qs_env, x_data, xc_section_aux, xc_section_primary)
551 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
555 TYPE(
admm_type),
POINTER :: qs_admm_env, tmp_admm_env
561 NULLIFY (qs_admm_env, tmp_admm_env, para_env, xc_section, xc_section_empty, xc_fun_empty, &
564 IF (
ASSOCIATED(qs_env%mp2_env))
THEN
565 IF (
ASSOCIATED(qs_env%mp2_env%ri_rpa%xc_section_aux) .AND. &
566 ASSOCIATED(qs_env%mp2_env%ri_rpa%xc_section_primary))
THEN
567 xc_section_aux => qs_env%mp2_env%ri_rpa%xc_section_aux
568 xc_section_primary => qs_env%mp2_env%ri_rpa%xc_section_primary
570 ELSEIF (qs_env%energy_correction)
THEN
571 IF (
ASSOCIATED(qs_env%ec_env%xc_section_aux) .AND. &
572 ASSOCIATED(qs_env%ec_env%xc_section_primary))
THEN
573 xc_section_aux => qs_env%ec_env%xc_section_aux
574 xc_section_primary => qs_env%ec_env%xc_section_primary
578 IF (.NOT.
ASSOCIATED(xc_section_aux) .OR. .NOT.
ASSOCIATED(xc_section_primary))
THEN
580 CALL get_qs_env(qs_env, admm_env=qs_admm_env, natom=natom, para_env=para_env, dft_control=dft_control)
581 cpassert(
ASSOCIATED(qs_admm_env))
590 CALL admm_env_create(tmp_admm_env, dft_control%admm_control, qs_admm_env%mos_aux_fit, &
591 para_env, natom, qs_admm_env%nao_aux_fit)
594 admm_env=tmp_admm_env)
599 IF (
ASSOCIATED(qs_env%mp2_env))
THEN
600 qs_env%mp2_env%ri_rpa%xc_section_aux => xc_section_aux
601 qs_env%mp2_env%ri_rpa%xc_section_primary => xc_section_primary
603 IF (qs_env%energy_correction)
THEN
604 qs_env%ec_env%xc_section_aux => xc_section_aux
605 qs_env%ec_env%xc_section_primary => xc_section_primary
614 END SUBROUTINE get_exx_admm_xc_sections
628 calc_forces, use_virial)
630 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_prim, matrix_aux
631 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
632 REAL(
dp),
INTENT(INOUT) :: exc, exc_aux_fit
633 LOGICAL,
INTENT(IN) :: calc_forces, use_virial
635 INTEGER :: ispin, nspins
636 REAL(
dp),
DIMENSION(3, 3) :: pv_loc
638 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: rho_ao, rho_ao_aux_fit
642 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: v_dummy, v_rspace, v_rspace_aux_fit
647 NULLIFY (xc_section_aux, xc_section_primary, rho, rho_aux_fit, v_dummy, v_rspace, v_rspace_aux_fit, &
648 auxbas_pw_pool, pw_env, rho_ao, rho_ao_aux_fit, dft_control, admm_env)
650 CALL get_qs_env(qs_env, dft_control=dft_control, pw_env=pw_env, rho=rho, admm_env=admm_env, virial=virial)
653 nspins = dft_control%nspins
655 CALL qs_rho_get(rho_aux_fit, rho_ao=rho_ao_aux_fit)
656 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
658 CALL get_exx_admm_xc_sections(qs_env, x_data, xc_section_aux, xc_section_primary)
660 IF (use_virial) virial%pv_xc = 0.0_dp
661 CALL qs_vxc_create(qs_env%ks_env, rho_struct=rho_aux_fit, xc_section=xc_section_aux, &
662 vxc_rho=v_rspace_aux_fit, vxc_tau=v_dummy, exc=exc_aux_fit)
664 virial%pv_exc = virial%pv_exc - virial%pv_xc
665 virial%pv_virial = virial%pv_virial - virial%pv_xc
669 IF (use_virial) pv_loc = virial%pv_virial
671 CALL pw_scale(v_rspace_aux_fit(ispin), v_rspace_aux_fit(ispin)%pw_grid%dvol)
672 CALL integrate_v_rspace(v_rspace=v_rspace_aux_fit(ispin), hmat=matrix_aux(ispin), &
673 pmat=rho_ao_aux_fit(ispin), qs_env=qs_env, &
674 basis_type=
"AUX_FIT", calculate_forces=calc_forces, &
675 task_list_external=qs_env%admm_env%task_list_aux_fit)
677 IF (use_virial) virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
680 IF (
ASSOCIATED(v_rspace_aux_fit))
THEN
682 CALL auxbas_pw_pool%give_back_pw(v_rspace_aux_fit(ispin))
684 DEALLOCATE (v_rspace_aux_fit)
686 IF (
ASSOCIATED(v_dummy))
THEN
688 CALL auxbas_pw_pool%give_back_pw(v_dummy(ispin))
693 IF (use_virial) virial%pv_xc = 0.0_dp
694 CALL qs_vxc_create(qs_env%ks_env, rho_struct=rho, xc_section=xc_section_primary, &
695 vxc_rho=v_rspace, vxc_tau=v_dummy, exc=exc)
697 virial%pv_exc = virial%pv_exc - virial%pv_xc
698 virial%pv_virial = virial%pv_virial - virial%pv_xc
702 IF (use_virial) pv_loc = virial%pv_virial
704 CALL pw_scale(v_rspace(ispin), v_rspace(ispin)%pw_grid%dvol)
705 CALL integrate_v_rspace(v_rspace=v_rspace(ispin), hmat=matrix_prim(ispin), &
706 pmat=rho_ao(ispin), qs_env=qs_env, &
707 calculate_forces=calc_forces)
709 IF (use_virial) virial%pv_ehartree = virial%pv_ehartree + (virial%pv_virial - pv_loc)
712 IF (
ASSOCIATED(v_rspace))
THEN
714 CALL auxbas_pw_pool%give_back_pw(v_rspace(ispin))
716 DEALLOCATE (v_rspace)
718 IF (
ASSOCIATED(v_dummy))
THEN
720 CALL auxbas_pw_pool%give_back_pw(v_dummy(ispin))
736 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
739 INTEGER :: irep, n_rep_hf
742 IF (.NOT. reuse_hfx)
RETURN
746 DO irep = 1, n_rep_hf
748 x_data(irep, :)%general_parameter%fraction = frac
761 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
764 INTEGER :: irep, n_rep_hf
768 IF (.NOT. reuse_hfx)
RETURN
774 DO irep = 1, n_rep_hf
776 x_data(irep, :)%general_parameter%fraction = frac
785 ELEMENTAL SUBROUTINE remove_exc_energy(energy)
789 energy%total = energy%total - (energy%exc + energy%exc1 + energy%ex + &
790 energy%exc_aux_fit + energy%exc1_aux_fit)
794 energy%exc_aux_fit = 0.0_dp
795 energy%exc1_aux_fit = 0.0_dp
Contains ADMM methods which require molecular orbitals.
subroutine, public admm_projection_derivative(qs_env, matrix_hz, matrix_pz, fval)
Calculate derivatives terms from overlap matrices.
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.
subroutine, public admm_env_release(admm_env)
releases the ADMM environment, cleans up all types
subroutine, public admm_env_create(admm_env, admm_control, mos, para_env, natoms, nao_aux_fit, blacs_env_ext)
creates ADMM environment, initializes the basic types
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_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
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
Utilities for hfx and admm methods.
subroutine, public tddft_hfx_matrix(matrix_ks, rho_ao, qs_env, update_energy, recalc_integrals, external_hfx_sections, external_x_data, external_para_env)
Add the hfx contributions to the Hamiltonian.
subroutine, public create_admm_xc_section(x_data, xc_section, admm_env)
This routine modifies the xc section depending on the potential type used for the HF exchange and the...
Routines to calculate derivatives with respect to basis function origin.
subroutine, public derivatives_four_center(qs_env, rho_ao, rho_ao_resp, hfx_section, para_env, irep, use_virial, adiabatic_rescale_factor, resp_only, external_x_data)
computes four center derivatives for a full basis set and updates the forcesfock_4c arrays....
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....
Routines to calculate EXX in RPA and energy correction methods.
subroutine, public calc_exx_admm_xc_contributions(qs_env, matrix_prim, matrix_aux, x_data, exc, exc_aux_fit, calc_forces, use_virial)
Calculate the RI_RPAHF / EC_ENVHF ADMM XC contributions to the KS matrices and the respective energie...
subroutine, public calculate_exx(qs_env, unit_nr, hfx_sections, x_data, do_gw, do_admm, calc_forces, reuse_hfx, do_im_time, e_ex_from_gw, e_admm_from_gw, t3)
...
subroutine, public exx_pre_hfx(ext_hfx_section, x_data, reuse_hfx)
Prepare the external x_data for integration. Simply change the HFX fraction in case the qs_envx_data ...
subroutine, public exx_post_hfx(qs_env, x_data, reuse_hfx)
Revert back to the proper HFX fraction in case qs_envx_data is reused.
subroutine, public add_exx_to_rhs(rhs, qs_env, ext_hfx_section, x_data, recalc_integrals, do_admm, do_ec, do_exx, reuse_hfx)
Add the EXX contribution to the RHS of the Z-vector equation, namely the HF Hamiltonian.
subroutine, public hfx_ri_update_ks(qs_env, ri_data, ks_matrix, ehfx, mos, rho_ao, geometry_did_change, nspins, hf_fraction)
...
subroutine, public hfx_ri_update_forces(qs_env, ri_data, nspins, hf_fraction, rho_ao, rho_ao_resp, mos, use_virial, resp_only, rescale_factor)
the general routine that calls the relevant force code
Types and set/get functions for HFX.
Defines the basic variable types.
integer, parameter, public dp
Machine interface based on Fortran 2003 and POSIX.
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
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
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, 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.
Integrate single or product functions over a potential on a RS grid.
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
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...
subroutine, public qs_vxc_create(ks_env, rho_struct, xc_section, vxc_rho, vxc_tau, exc, just_energy, edisp, dispersion_env, adiabatic_rescale_factor, pw_env_external)
calculates and allocates the xc potential, already reducing it to the dependence on rho and the one o...
stores some data used in wavefunction fitting
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
stores all the informations relevant to an mpi environment
contained for different pw related things
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
keeps the density in various representations, keeping track of which ones are valid.