23 USE dbcsr_api,
ONLY: &
24 dbcsr_create, dbcsr_filter, dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, &
25 dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, dbcsr_p_type, &
26 dbcsr_release, dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry
65 #include "./base/base_uses.f90"
71 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_operators'
73 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
75 INTEGER,
PARAMETER,
PRIVATE :: nderivs = 3
76 INTEGER,
PARAMETER,
PRIVATE :: maxspins = 2
102 TYPE(cp_fm_type),
DIMENSION(:, :),
INTENT(in) :: aop_evects, evects, s_evects
103 TYPE(tddfpt_ground_state_mos),
DIMENSION(:), &
105 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(in) :: matrix_ks
107 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_energy_diff'
109 INTEGER :: handle, ispin, ivect, nactive, nao, &
111 TYPE(cp_fm_struct_type),
POINTER :: matrix_struct
112 TYPE(cp_fm_type) :: hevec
114 CALL timeset(routinen, handle)
116 nspins =
SIZE(evects, 1)
117 nvects =
SIZE(evects, 2)
120 CALL cp_fm_get_info(matrix=evects(ispin, 1), matrix_struct=matrix_struct, &
121 nrow_global=nao, ncol_global=nactive)
126 aop_evects(ispin, ivect), ncol=nactive, &
127 alpha=1.0_dp, beta=1.0_dp)
129 IF (
ASSOCIATED(gs_mos(ispin)%evals_occ_matrix))
THEN
131 CALL parallel_gemm(
'N',
'N', nao, nactive, nactive, 1.0_dp, &
132 s_evects(ispin, ivect), gs_mos(ispin)%evals_occ_matrix, &
135 CALL cp_fm_to_fm(s_evects(ispin, ivect), hevec)
142 CALL cp_fm_release(hevec)
145 CALL timestop(handle)
171 qs_env, sub_env, gapw, work_v_gspace, work_v_rspace)
172 TYPE(pw_r3d_rs_type),
DIMENSION(:),
INTENT(INOUT) :: a_ia_rspace
173 TYPE(pw_c1d_gs_type),
INTENT(INOUT) :: rho_ia_g
174 TYPE(local_rho_type),
POINTER :: local_rho_set
175 TYPE(hartree_local_type),
POINTER :: hartree_local
176 TYPE(qs_environment_type),
POINTER :: qs_env
177 TYPE(tddfpt_subgroup_env_type),
INTENT(in) :: sub_env
178 LOGICAL,
INTENT(IN) :: gapw
179 TYPE(pw_c1d_gs_type),
INTENT(INOUT) :: work_v_gspace
180 TYPE(pw_r3d_rs_type),
INTENT(INOUT) :: work_v_rspace
182 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_coulomb'
184 INTEGER :: handle, ispin, nspins
185 REAL(kind=
dp) :: alpha, pair_energy
186 TYPE(pw_env_type),
POINTER :: pw_env
187 TYPE(pw_poisson_type),
POINTER :: poisson_env
189 CALL timeset(routinen, handle)
191 nspins =
SIZE(a_ia_rspace)
192 pw_env => sub_env%pw_env
193 CALL pw_env_get(pw_env, poisson_env=poisson_env)
204 cpassert(
ASSOCIATED(local_rho_set))
205 CALL pw_axpy(local_rho_set%rho0_mpole%rho0_s_gs, rho_ia_g)
208 CALL pw_poisson_solve(poisson_env, rho_ia_g, pair_energy, work_v_gspace)
209 CALL pw_transfer(work_v_gspace, work_v_rspace)
215 CALL pw_axpy(work_v_rspace, a_ia_rspace(ispin), alpha)
220 hartree_local%ecoul_1c, &
222 sub_env%para_env, tddft=.true., core_2nd=.true.)
223 CALL pw_scale(work_v_rspace, work_v_rspace%pw_grid%dvol)
225 calculate_forces=.false., &
226 local_rho_set=local_rho_set)
229 CALL timestop(handle)
247 pw_env, work_v_xc, work_v_xc_tau)
249 TYPE(pw_r3d_rs_type),
DIMENSION(:),
INTENT(INOUT) :: a_ia_rspace
250 TYPE(full_kernel_env_type),
INTENT(IN) :: kernel_env
251 TYPE(qs_rho_type),
POINTER :: rho_ia_struct
252 LOGICAL,
INTENT(in) :: is_rks_triplets
253 TYPE(pw_env_type),
POINTER :: pw_env
254 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
256 INTEGER :: ispin, nspins
258 nspins =
SIZE(a_ia_rspace)
260 IF (kernel_env%deriv2_analytic)
THEN
261 CALL tddfpt_apply_xc_analytic(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
262 pw_env, work_v_xc, work_v_xc_tau)
264 CALL tddfpt_apply_xc_fd(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
265 pw_env, work_v_xc, work_v_xc_tau)
270 CALL pw_axpy(work_v_xc(ispin), a_ia_rspace(ispin), kernel_env%alpha)
285 TYPE(pw_r3d_rs_type),
DIMENSION(:),
INTENT(INOUT) :: a_ia_rspace
286 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: fxc_rspace
287 TYPE(qs_rho_type),
POINTER :: rho_ia_struct
288 LOGICAL,
INTENT(in) :: is_rks_triplets
291 REAL(kind=
dp) :: alpha
292 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r
294 nspins =
SIZE(a_ia_rspace)
300 IF (nspins == 2)
THEN
301 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
302 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(2), alpha)
303 CALL pw_multiply(a_ia_rspace(2), fxc_rspace(3), rho1_r(2), alpha)
304 CALL pw_multiply(a_ia_rspace(2), fxc_rspace(2), rho1_r(1), alpha)
305 ELSE IF (is_rks_triplets)
THEN
306 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
307 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(1), -alpha)
309 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
310 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(1), alpha)
335 SUBROUTINE tddfpt_apply_xc_analytic(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
336 pw_env, work_v_xc, work_v_xc_tau)
337 TYPE(full_kernel_env_type),
INTENT(in) :: kernel_env
338 TYPE(qs_rho_type),
POINTER :: rho_ia_struct
339 LOGICAL,
INTENT(in) :: is_rks_triplets
340 INTEGER,
INTENT(in) :: nspins
341 TYPE(pw_env_type),
POINTER :: pw_env
342 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
344 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_xc_analytic'
346 INTEGER :: handle, ispin
347 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_ia_g, rho_ia_g2
348 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool
349 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_ia_r, rho_ia_r2, tau_ia_r, tau_ia_r2
351 CALL timeset(routinen, handle)
353 CALL qs_rho_get(rho_ia_struct, rho_g=rho_ia_g, rho_r=rho_ia_r, tau_r=tau_ia_r)
354 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
356 IF (debug_this_module)
THEN
357 cpassert(
SIZE(rho_ia_g) == nspins)
358 cpassert(
SIZE(rho_ia_r) == nspins)
359 cpassert((.NOT.
ASSOCIATED(tau_ia_r)) .OR.
SIZE(tau_ia_r) == nspins)
360 cpassert((.NOT. is_rks_triplets) .OR. nspins == 1)
364 IF (is_rks_triplets)
THEN
365 ALLOCATE (rho_ia_r2(2))
366 ALLOCATE (rho_ia_g2(2))
367 rho_ia_r2(1) = rho_ia_r(1)
368 rho_ia_r2(2) = rho_ia_r(1)
369 rho_ia_g2(1) = rho_ia_g(1)
370 rho_ia_g2(2) = rho_ia_g(1)
372 IF (
ASSOCIATED(tau_ia_r))
THEN
373 ALLOCATE (tau_ia_r2(2))
374 tau_ia_r2(1) = tau_ia_r(1)
375 tau_ia_r2(2) = tau_ia_r(1)
378 rho_ia_r2 => rho_ia_r
379 rho_ia_g2 => rho_ia_g
381 tau_ia_r2 => tau_ia_r
385 CALL pw_zero(work_v_xc(ispin))
386 IF (
ASSOCIATED(work_v_xc_tau))
CALL pw_zero(work_v_xc_tau(ispin))
389 CALL xc_rho_set_update(rho_set=kernel_env%xc_rho1_set, rho_r=rho_ia_r2, rho_g=rho_ia_g2, tau=tau_ia_r2, &
390 needs=kernel_env%xc_rho1_cflags, xc_deriv_method_id=kernel_env%deriv_method_id, &
391 xc_rho_smooth_id=kernel_env%rho_smooth_id, pw_pool=auxbas_pw_pool)
394 rho_set=kernel_env%xc_rho_set, &
395 rho1_set=kernel_env%xc_rho1_set, pw_pool=auxbas_pw_pool, &
396 xc_section=kernel_env%xc_section, gapw=.false., tddfpt_fac=kernel_env%beta)
398 IF (is_rks_triplets)
THEN
399 DEALLOCATE (rho_ia_r2)
400 DEALLOCATE (rho_ia_g2)
401 IF (
ASSOCIATED(tau_ia_r2))
DEALLOCATE (tau_ia_r2)
404 CALL timestop(handle)
406 END SUBROUTINE tddfpt_apply_xc_analytic
420 SUBROUTINE tddfpt_apply_xc_fd(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
421 pw_env, work_v_xc, work_v_xc_tau)
422 TYPE(full_kernel_env_type),
INTENT(in) :: kernel_env
423 TYPE(qs_rho_type),
POINTER :: rho_ia_struct
424 LOGICAL,
INTENT(in) :: is_rks_triplets
425 INTEGER,
INTENT(in) :: nspins
426 TYPE(pw_env_type),
POINTER :: pw_env
427 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
429 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_xc_fd'
431 INTEGER :: handle, ispin
432 LOGICAL :: lsd, singlet, triplet
433 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho1_g
434 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool
435 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho1_r, tau1_r
436 TYPE(xc_rho_set_type),
POINTER :: rho_set
438 CALL timeset(routinen, handle)
440 CALL qs_rho_get(rho_ia_struct, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
441 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
443 CALL pw_zero(work_v_xc(ispin))
445 rho_set => kernel_env%xc_rho_set
450 IF (nspins == 1 .AND. .NOT. is_rks_triplets)
THEN
452 ELSE IF (nspins == 1 .AND. is_rks_triplets)
THEN
454 ELSE IF (nspins == 2)
THEN
457 cpabort(
"illegal options")
460 IF (
ASSOCIATED(tau1_r))
THEN
462 CALL pw_zero(work_v_xc_tau(ispin))
467 auxbas_pw_pool, kernel_env%xc_section, &
470 CALL timestop(handle)
472 END SUBROUTINE tddfpt_apply_xc_fd
495 work_rho_ia_ao_symm, work_hmat_symm, work_rho_ia_ao_asymm, &
496 work_hmat_asymm, wfm_rho_orb)
497 TYPE(cp_fm_type),
DIMENSION(:, :),
INTENT(in) :: aop_evects, evects
498 TYPE(tddfpt_ground_state_mos),
DIMENSION(:), &
500 LOGICAL,
INTENT(in) :: do_admm
501 TYPE(qs_environment_type),
POINTER :: qs_env
502 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao_symm
503 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT), &
504 TARGET :: work_hmat_symm
505 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao_asymm
506 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT), &
507 TARGET :: work_hmat_asymm
508 TYPE(cp_fm_type),
INTENT(IN) :: wfm_rho_orb
510 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_hfx'
512 INTEGER :: handle, ispin, ivect, nao, nao_aux, &
514 INTEGER,
DIMENSION(maxspins) :: nactive
516 REAL(kind=
dp) :: alpha
517 TYPE(admm_type),
POINTER :: admm_env
518 TYPE(section_vals_type),
POINTER :: hfx_section, input
520 CALL timeset(routinen, handle)
528 nspins =
SIZE(evects, 1)
529 nvects =
SIZE(evects, 2)
558 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
559 gs_mos(ispin)%mos_occ, 0.0_dp, wfm_rho_orb)
560 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, gs_mos(ispin)%mos_occ, &
561 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
563 CALL dbcsr_set(work_hmat_symm(ispin)%matrix, 0.0_dp)
565 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
566 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
567 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
568 0.0_dp, admm_env%work_aux_aux)
569 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao_symm(ispin)%matrix, keep_sparsity=.true.)
571 CALL copy_fm_to_dbcsr(wfm_rho_orb, work_rho_ia_ao_symm(ispin)%matrix, keep_sparsity=.true.)
580 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
582 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
583 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
585 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
586 gs_mos(ispin)%mos_occ, 1.0_dp, aop_evects(ispin, ivect))
591 aop_evects(ispin, ivect), ncol=nactive(ispin), &
592 alpha=alpha, beta=1.0_dp)
600 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
601 gs_mos(ispin)%mos_occ, 0.0_dp, wfm_rho_orb)
602 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), -0.5_dp, gs_mos(ispin)%mos_occ, &
603 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
605 CALL dbcsr_set(work_hmat_asymm(ispin)%matrix, 0.0_dp)
607 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
608 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
609 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
610 0.0_dp, admm_env%work_aux_aux)
611 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao_asymm(ispin)%matrix, keep_sparsity=.true.)
613 CALL copy_fm_to_dbcsr(wfm_rho_orb, work_rho_ia_ao_asymm(ispin)%matrix, keep_sparsity=.true.)
622 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
624 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
625 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
627 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
628 gs_mos(ispin)%mos_occ, 1.0_dp, aop_evects(ispin, ivect))
633 aop_evects(ispin, ivect), ncol=nactive(ispin), &
634 alpha=alpha, beta=1.0_dp)
640 CALL timestop(handle)
661 hfx_section, x_data, symmetry, recalc_integrals, &
662 work_rho_ia_ao, work_hmat, wfm_rho_orb)
663 TYPE(cp_fm_type),
DIMENSION(:, :),
INTENT(in) :: aop_evects, evects
664 TYPE(tddfpt_ground_state_mos),
DIMENSION(:), &
666 TYPE(qs_environment_type),
POINTER :: qs_env
667 TYPE(admm_type),
POINTER :: admm_env
668 TYPE(section_vals_type),
POINTER :: hfx_section
669 TYPE(hfx_type),
DIMENSION(:, :),
POINTER :: x_data
670 INTEGER,
INTENT(IN) :: symmetry
671 LOGICAL,
INTENT(IN) :: recalc_integrals
672 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao
673 TYPE(dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT), &
675 TYPE(cp_fm_type),
INTENT(IN) :: wfm_rho_orb
677 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_hfxsr_kernel'
679 INTEGER :: handle, ispin, ivect, nao, nao_aux, &
681 INTEGER,
DIMENSION(maxspins) :: nactive
683 REAL(kind=
dp) :: alpha
685 CALL timeset(routinen, handle)
687 nspins =
SIZE(evects, 1)
688 nvects =
SIZE(evects, 2)
691 IF (nspins > 1) alpha = 1.0_dp
699 reint = recalc_integrals
703 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
704 gs_mos(ispin)%mos_occ, 0.0_dp, wfm_rho_orb)
705 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp*symmetry, gs_mos(ispin)%mos_occ, &
706 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
707 CALL dbcsr_set(work_hmat(ispin)%matrix, 0.0_dp)
708 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
709 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
710 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
711 0.0_dp, admm_env%work_aux_aux)
712 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao(ispin)%matrix, keep_sparsity=.true.)
715 CALL tddft_hfx_matrix(work_hmat, work_rho_ia_ao, qs_env, .false., reint, hfx_section, x_data)
720 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
721 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
722 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
723 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
724 gs_mos(ispin)%mos_occ, 1.0_dp, aop_evects(ispin, ivect))
728 CALL timestop(handle)
746 TYPE(qs_environment_type),
POINTER :: qs_env
747 TYPE(tddfpt_subgroup_env_type) :: sub_env
748 REAL(kind=
dp),
INTENT(IN) :: rcut, hfx_scale
749 TYPE(tddfpt_work_matrices) :: work
750 TYPE(cp_fm_type),
DIMENSION(:),
INTENT(IN) :: x, res
752 CHARACTER(len=*),
PARAMETER :: routinen =
'tddfpt_apply_hfxlr_kernel'
754 INTEGER :: blk, handle, iatom, ispin, jatom, natom, &
756 INTEGER,
DIMENSION(2) :: nactive
757 REAL(kind=
dp) :: dr, eps_filter, fcut, gabr
758 REAL(kind=
dp),
DIMENSION(3) :: rij
759 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: pblock
760 TYPE(cell_type),
POINTER :: cell
761 TYPE(cp_fm_struct_type),
POINTER :: fmstruct
762 TYPE(cp_fm_type) :: cvec
763 TYPE(cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: xtransformed
764 TYPE(cp_fm_type),
POINTER :: ct
765 TYPE(dbcsr_iterator_type) :: iter
766 TYPE(dbcsr_type) :: pdens
767 TYPE(dbcsr_type),
POINTER :: tempmat
768 TYPE(mp_para_env_type),
POINTER :: para_env
769 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
771 CALL timeset(routinen, handle)
774 eps_filter = 1.e-08_dp
781 para_env => sub_env%para_env
783 CALL get_qs_env(qs_env, natom=natom, cell=cell, particle_set=particle_set)
787 ALLOCATE (xtransformed(nspins))
790 ct => work%ctransformed(ispin)
792 CALL cp_fm_create(matrix=xtransformed(ispin), matrix_struct=fmstruct, name=
"XTRANSFORMED")
797 ct => work%ctransformed(ispin)
801 tempmat => work%shalf
802 CALL dbcsr_create(pdens, template=tempmat, matrix_type=dbcsr_type_no_symmetry)
804 ct => work%ctransformed(ispin)
805 CALL dbcsr_set(pdens, 0.0_dp)
807 1.0_dp, keep_sparsity=.false.)
808 CALL dbcsr_filter(pdens, eps_filter)
811 CALL dbcsr_iterator_start(iter, pdens)
812 DO WHILE (dbcsr_iterator_blocks_left(iter))
813 CALL dbcsr_iterator_next_block(iter, iatom, jatom, pblock, blk)
814 rij = particle_set(iatom)%r - particle_set(jatom)%r
816 dr = sqrt(sum(rij(:)**2))
819 gabr = 2._dp*gabr/sqrt(3.1415926_dp)
821 gabr = erf(gabr*dr)/dr
822 fcut = exp(dr - 4._dp*rcut)
823 fcut = fcut/(fcut + 1._dp)
825 pblock = hfx_scale*gabr*pblock
827 CALL dbcsr_iterator_stop(iter)
834 CALL dbcsr_release(pdens)
836 CALL cp_fm_release(cvec)
839 CALL cp_fm_release(xtransformed)
841 CALL timestop(handle)
subroutine pbc(r, r_pbc, s, s_pbc, a, b, c, alpha, beta, gamma, debug, info, pbc0, h, hinv)
...
Types and set/get functions for auxiliary density matrix methods.
Handles all functions related to the CELL.
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 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.
basic linear algebra operations for full matrices
subroutine, public cp_fm_column_scale(matrixa, scaling)
scales column i of matrix a with scaling(i)
subroutine, public cp_fm_scale_and_add(alpha, matrix_a, beta, matrix_b)
calc A <- alpha*A + beta*B optimized for alpha == 1.0 (just add beta*B) and beta == 0....
represent the structure of a full 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
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
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...
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)
Add the hfx contributions to the Hamiltonian.
Types and set/get functions for HFX.
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
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 ...
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_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, 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, rhs)
Get the QUICKSTEP environment.
subroutine, public integrate_vhg0_rspace(qs_env, v_rspace, para_env, calculate_forces, local_rho_set, local_rho_set_2nd, atener, kforce)
...
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 tddfpt_apply_xc_potential(A_ia_rspace, fxc_rspace, rho_ia_struct, is_rks_triplets)
Routine for applying fxc potential.
subroutine, public tddfpt_apply_xc(A_ia_rspace, kernel_env, rho_ia_struct, is_rks_triplets, pw_env, work_v_xc, work_v_xc_tau)
Driver routine for applying fxc (analyic vs. finite difference for testing.
subroutine, public tddfpt_apply_energy_diff(Aop_evects, evects, S_evects, gs_mos, matrix_ks)
Apply orbital energy difference term: Aop_evects(spin,state) += KS(spin) * evects(spin,...
subroutine, public tddfpt_apply_coulomb(A_ia_rspace, rho_ia_g, local_rho_set, hartree_local, qs_env, sub_env, gapw, work_v_gspace, work_v_rspace)
Update v_rspace by adding coulomb term.
subroutine, public tddfpt_apply_hfx(Aop_evects, evects, gs_mos, do_admm, qs_env, work_rho_ia_ao_symm, work_hmat_symm, work_rho_ia_ao_asymm, work_hmat_asymm, wfm_rho_orb)
Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
subroutine, public tddfpt_apply_hfxsr_kernel(Aop_evects, evects, gs_mos, qs_env, admm_env, hfx_section, x_data, symmetry, recalc_integrals, work_rho_ia_ao, work_hmat, wfm_rho_orb)
Update action of TDDFPT operator on trial vectors by adding exact-exchange term.
subroutine, public tddfpt_apply_hfxlr_kernel(qs_env, sub_env, rcut, hfx_scale, work, X, res)
...Calculate the HFXLR kernel contribution by contracting the Lowdin MO coefficients – transition cha...
Simplified Tamm Dancoff approach (sTDA).
subroutine, public get_lowdin_x(shalf, xvec, xt)
Calculate Lowdin transformed Davidson trial vector X shalf (dbcsr), xvec, xt (fm) are defined in the ...
subroutine, public xc_rho_set_update(rho_set, rho_r, rho_g, tau, needs, xc_deriv_method_id, xc_rho_smooth_id, pw_pool)
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_calc_2nd_deriv_analytical(v_xc, v_xc_tau, deriv_set, rho_set, rho1_set, pw_pool, xc_section, gapw, vxg, tddfpt_fac, compute_virial, virial_xc)
Calculates the second derivative of E_xc at rho in the direction rho1 (if you see the second derivati...
subroutine, public xc_calc_2nd_deriv_numerical(v_xc, v_tau, rho_set, rho1_r, rho1_g, tau1_r, pw_pool, xc_section, do_triplet, calc_virial, virial_xc, deriv_set)
calculates 2nd derivative numerically