71#include "./base/base_uses.f90"
77 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_operators'
79 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
81 INTEGER,
PARAMETER,
PRIVATE :: nderivs = 3
82 INTEGER,
PARAMETER,
PRIVATE :: maxspins = 2
109 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(INOUT) :: aop_evects
110 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects, s_evects
113 TYPE(
dbcsr_p_type),
DIMENSION(:),
INTENT(in) :: matrix_ks
116 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_energy_diff'
118 INTEGER :: handle, i, ispin, ivect, j, nactive, &
119 nao, nspins, nvects, spin2
120 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: evals_active
124 CALL timeset(routinen, handle)
126 nspins =
SIZE(evects, 1)
127 nvects =
SIZE(evects, 2)
129 DO ispin = 1,
SIZE(evects, 1)
130 CALL cp_fm_get_info(matrix=evects(ispin, 1), matrix_struct=matrix_struct, &
131 nrow_global=nao, ncol_global=nactive)
133 ALLOCATE (evals_active(nactive))
135 j = gs_mos(ispin)%index_active(i)
136 evals_active(i) = gs_mos(ispin)%evals_occ(j)
147 aop_evects(ispin, ivect), ncol=nactive, &
148 alpha=1.0_dp, beta=1.0_dp)
150 IF (
ASSOCIATED(gs_mos(ispin)%evals_occ_matrix))
THEN
152 CALL parallel_gemm(
'N',
'N', nao, nactive, nactive, 1.0_dp, &
153 s_evects(ispin, ivect), gs_mos(ispin)%evals_occ_matrix, &
163 DEALLOCATE (evals_active)
167 CALL timestop(handle)
194 qs_env, sub_env, gapw, work_v_gspace, work_v_rspace, tddfpt_mgrid)
201 LOGICAL,
INTENT(IN) :: gapw
204 LOGICAL,
INTENT(IN) :: tddfpt_mgrid
206 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_coulomb'
208 INTEGER :: handle, ispin, nspins
209 REAL(kind=
dp) :: alpha, pair_energy
214 POINTER :: my_rs_descs
217 CALL timeset(routinen, handle)
219 nspins =
SIZE(a_ia_rspace)
220 pw_env => sub_env%pw_env
221 IF (tddfpt_mgrid)
THEN
222 CALL pw_env_get(pw_env, poisson_env=poisson_env, rs_grids=my_rs_grids, &
223 rs_descs=my_rs_descs, pw_pools=my_pools)
225 CALL pw_env_get(pw_env, poisson_env=poisson_env)
237 cpassert(
ASSOCIATED(local_rho_set))
238 CALL pw_axpy(local_rho_set%rho0_mpole%rho0_s_gs, rho_ia_g)
239 IF (
ASSOCIATED(local_rho_set%rho0_mpole%rhoz_cneo_s_gs))
THEN
240 CALL pw_axpy(local_rho_set%rho0_mpole%rhoz_cneo_s_gs, rho_ia_g)
251 CALL pw_axpy(work_v_rspace, a_ia_rspace(ispin), alpha)
256 hartree_local%ecoul_1c, &
258 sub_env%para_env, tddft=.true., core_2nd=.true.)
259 CALL pw_scale(work_v_rspace, work_v_rspace%pw_grid%dvol)
260 IF (tddfpt_mgrid)
THEN
262 calculate_forces=.false., &
263 local_rho_set=local_rho_set, my_pools=my_pools, &
264 my_rs_descs=my_rs_descs)
267 calculate_forces=.false., &
268 local_rho_set=local_rho_set)
272 CALL timestop(handle)
291 pw_env, work_v_xc, work_v_xc_tau, spinflip)
296 LOGICAL,
INTENT(in) :: is_rks_triplets
298 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
299 INTEGER,
INTENT(in),
OPTIONAL :: spinflip
301 INTEGER :: ispin, my_spinflip, nspins
303 nspins =
SIZE(a_ia_rspace)
305 IF (
PRESENT(spinflip)) my_spinflip = spinflip
307 IF (kernel_env%deriv2_analytic)
THEN
308 CALL tddfpt_apply_xc_analytic(kernel_env, rho_ia_struct, is_rks_triplets, my_spinflip, &
309 nspins, pw_env, work_v_xc, work_v_xc_tau)
311 CALL tddfpt_apply_xc_fd(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
312 pw_env, work_v_xc, work_v_xc_tau)
317 CALL pw_axpy(work_v_xc(ispin), a_ia_rspace(ispin), kernel_env%alpha)
335 LOGICAL,
INTENT(in) :: is_rks_triplets
338 REAL(kind=
dp) :: alpha
341 nspins =
SIZE(a_ia_rspace)
347 IF (nspins == 2)
THEN
348 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
349 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(2), alpha)
350 CALL pw_multiply(a_ia_rspace(2), fxc_rspace(3), rho1_r(2), alpha)
351 CALL pw_multiply(a_ia_rspace(2), fxc_rspace(2), rho1_r(1), alpha)
352 ELSE IF (is_rks_triplets)
THEN
353 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
354 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(1), -alpha)
356 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(1), rho1_r(1), alpha)
357 CALL pw_multiply(a_ia_rspace(1), fxc_rspace(2), rho1_r(1), alpha)
383 SUBROUTINE tddfpt_apply_xc_analytic(kernel_env, rho_ia_struct, is_rks_triplets, spinflip, &
384 nspins, pw_env, work_v_xc, work_v_xc_tau)
387 LOGICAL,
INTENT(in) :: is_rks_triplets
388 INTEGER,
INTENT(in) :: spinflip, nspins
390 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
392 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_xc_analytic'
394 INTEGER :: handle, ispin
395 LOGICAL :: do_spinflip
396 TYPE(
pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_ia_g, rho_ia_g2
398 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_ia_r, rho_ia_r2, tau_ia_r, tau_ia_r2
400 CALL timeset(routinen, handle)
402 CALL qs_rho_get(rho_ia_struct, rho_g=rho_ia_g, rho_r=rho_ia_r, tau_r=tau_ia_r)
403 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
405 IF (debug_this_module)
THEN
406 cpassert(
SIZE(rho_ia_g) == nspins)
407 cpassert(
SIZE(rho_ia_r) == nspins)
408 cpassert((.NOT.
ASSOCIATED(tau_ia_r)) .OR.
SIZE(tau_ia_r) == nspins)
409 cpassert((.NOT. is_rks_triplets) .OR. nspins == 1)
410 cpassert((spinflip /=
no_sf_tddfpt) .EQV. (nspins == 2))
416 do_spinflip = .false.
420 IF (is_rks_triplets)
THEN
421 ALLOCATE (rho_ia_r2(2))
422 ALLOCATE (rho_ia_g2(2))
423 rho_ia_r2(1) = rho_ia_r(1)
424 rho_ia_r2(2) = rho_ia_r(1)
425 rho_ia_g2(1) = rho_ia_g(1)
426 rho_ia_g2(2) = rho_ia_g(1)
428 IF (
ASSOCIATED(tau_ia_r))
THEN
429 ALLOCATE (tau_ia_r2(2))
430 tau_ia_r2(1) = tau_ia_r(1)
431 tau_ia_r2(2) = tau_ia_r(1)
434 rho_ia_r2 => rho_ia_r
435 rho_ia_g2 => rho_ia_g
437 tau_ia_r2 => tau_ia_r
442 IF (
ASSOCIATED(work_v_xc_tau))
CALL pw_zero(work_v_xc_tau(ispin))
445 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, &
446 needs=kernel_env%xc_rho1_cflags, xc_deriv_method_id=kernel_env%deriv_method_id, &
447 xc_rho_smooth_id=kernel_env%rho_smooth_id, pw_pool=auxbas_pw_pool)
450 rho_set=kernel_env%xc_rho_set, &
451 rho1_set=kernel_env%xc_rho1_set, pw_pool=auxbas_pw_pool, &
452 xc_section=kernel_env%xc_section, gapw=.false., tddfpt_fac=kernel_env%beta, &
453 spinflip=do_spinflip)
455 IF (is_rks_triplets)
THEN
456 DEALLOCATE (rho_ia_r2)
457 DEALLOCATE (rho_ia_g2)
458 IF (
ASSOCIATED(tau_ia_r2))
DEALLOCATE (tau_ia_r2)
461 CALL timestop(handle)
463 END SUBROUTINE tddfpt_apply_xc_analytic
477 SUBROUTINE tddfpt_apply_xc_fd(kernel_env, rho_ia_struct, is_rks_triplets, nspins, &
478 pw_env, work_v_xc, work_v_xc_tau)
481 LOGICAL,
INTENT(in) :: is_rks_triplets
482 INTEGER,
INTENT(in) :: nspins
484 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: work_v_xc, work_v_xc_tau
486 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_xc_fd'
488 INTEGER :: handle, ispin
489 LOGICAL :: lsd, singlet, triplet
495 CALL timeset(routinen, handle)
497 CALL qs_rho_get(rho_ia_struct, rho_r=rho1_r, rho_g=rho1_g, tau_r=tau1_r)
498 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
502 rho_set => kernel_env%xc_rho_set
507 IF (nspins == 1 .AND. .NOT. is_rks_triplets)
THEN
509 ELSE IF (nspins == 1 .AND. is_rks_triplets)
THEN
511 ELSE IF (nspins == 2)
THEN
514 cpabort(
"illegal options")
517 IF (
ASSOCIATED(tau1_r))
THEN
519 CALL pw_zero(work_v_xc_tau(ispin))
524 auxbas_pw_pool, kernel_env%xc_section, &
527 CALL timestop(handle)
529 END SUBROUTINE tddfpt_apply_xc_fd
552 work_rho_ia_ao_symm, work_hmat_symm, work_rho_ia_ao_asymm, &
553 work_hmat_asymm, wfm_rho_orb)
554 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(INOUT) :: aop_evects
555 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects
558 LOGICAL,
INTENT(in) :: do_admm
560 TYPE(
dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao_symm
562 TARGET :: work_hmat_symm
563 TYPE(
dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao_asymm
565 TARGET :: work_hmat_asymm
568 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_hfx'
570 INTEGER :: handle, ispin, ivect, nao, nao_aux, &
572 INTEGER,
DIMENSION(maxspins) :: nactive
574 REAL(kind=
dp) :: alpha
578 CALL timeset(routinen, handle)
586 nspins =
SIZE(evects, 1)
587 nvects =
SIZE(evects, 2)
589 IF (
SIZE(gs_mos) > 1)
THEN
616 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
617 gs_mos(ispin)%mos_active, 0.0_dp, wfm_rho_orb)
618 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, gs_mos(ispin)%mos_active, &
619 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
621 CALL dbcsr_set(work_hmat_symm(ispin)%matrix, 0.0_dp)
623 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
624 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
625 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
626 0.0_dp, admm_env%work_aux_aux)
627 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao_symm(ispin)%matrix, keep_sparsity=.true.)
629 CALL copy_fm_to_dbcsr(wfm_rho_orb, work_rho_ia_ao_symm(ispin)%matrix, keep_sparsity=.true.)
638 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
640 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
641 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
643 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
644 gs_mos(ispin)%mos_active, 1.0_dp, aop_evects(ispin, ivect))
649 aop_evects(ispin, ivect), ncol=nactive(ispin), &
650 alpha=alpha, beta=1.0_dp)
658 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
659 gs_mos(ispin)%mos_active, 0.0_dp, wfm_rho_orb)
660 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), -0.5_dp, gs_mos(ispin)%mos_active, &
661 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
663 CALL dbcsr_set(work_hmat_asymm(ispin)%matrix, 0.0_dp)
665 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
666 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
667 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
668 0.0_dp, admm_env%work_aux_aux)
669 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao_asymm(ispin)%matrix, keep_sparsity=.true.)
671 CALL copy_fm_to_dbcsr(wfm_rho_orb, work_rho_ia_ao_asymm(ispin)%matrix, keep_sparsity=.true.)
680 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
682 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
683 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
685 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
686 gs_mos(ispin)%mos_active, 1.0_dp, aop_evects(ispin, ivect))
691 aop_evects(ispin, ivect), ncol=nactive(ispin), &
692 alpha=alpha, beta=1.0_dp)
698 CALL timestop(handle)
719 hfx_section, x_data, symmetry, recalc_integrals, &
720 work_rho_ia_ao, work_hmat, wfm_rho_orb)
721 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(in) :: aop_evects, evects
727 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data
728 INTEGER,
INTENT(IN) :: symmetry
729 LOGICAL,
INTENT(IN) :: recalc_integrals
730 TYPE(
dbcsr_p_type),
DIMENSION(:),
INTENT(INOUT) :: work_rho_ia_ao
735 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_apply_hfxsr_kernel'
737 INTEGER :: handle, ispin, ivect, nao, nao_aux, &
739 INTEGER,
DIMENSION(maxspins) :: nactive
741 REAL(kind=
dp) :: alpha
743 CALL timeset(routinen, handle)
745 nspins =
SIZE(evects, 1)
746 nvects =
SIZE(evects, 2)
749 IF (nspins > 1) alpha = 1.0_dp
757 reint = recalc_integrals
761 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp, evects(ispin, ivect), &
762 gs_mos(ispin)%mos_active, 0.0_dp, wfm_rho_orb)
763 CALL parallel_gemm(
'N',
'T', nao, nao, nactive(ispin), 0.5_dp*symmetry, gs_mos(ispin)%mos_active, &
764 evects(ispin, ivect), 1.0_dp, wfm_rho_orb)
765 CALL dbcsr_set(work_hmat(ispin)%matrix, 0.0_dp)
766 CALL parallel_gemm(
'N',
'N', nao_aux, nao, nao, 1.0_dp, admm_env%A, &
767 wfm_rho_orb, 0.0_dp, admm_env%work_aux_orb)
768 CALL parallel_gemm(
'N',
'T', nao_aux, nao_aux, nao, 1.0_dp, admm_env%work_aux_orb, admm_env%A, &
769 0.0_dp, admm_env%work_aux_aux)
770 CALL copy_fm_to_dbcsr(admm_env%work_aux_aux, work_rho_ia_ao(ispin)%matrix, keep_sparsity=.true.)
773 CALL tddft_hfx_matrix(work_hmat, work_rho_ia_ao, qs_env, .false., reint, hfx_section, x_data)
778 ncol=nao, alpha=1.0_dp, beta=0.0_dp)
779 CALL parallel_gemm(
'T',
'N', nao, nao, nao_aux, 1.0_dp, admm_env%A, &
780 admm_env%work_aux_orb, 0.0_dp, wfm_rho_orb)
781 CALL parallel_gemm(
'N',
'N', nao, nactive(ispin), nao, alpha, wfm_rho_orb, &
782 gs_mos(ispin)%mos_active, 1.0_dp, aop_evects(ispin, ivect))
786 CALL timestop(handle)
806 REAL(kind=
dp),
INTENT(IN) :: rcut, hfx_scale
808 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: x
809 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(INOUT) :: res
811 CHARACTER(len=*),
PARAMETER :: routinen =
'tddfpt_apply_hfxlr_kernel'
813 INTEGER :: handle, iatom, ispin, jatom, natom, &
815 INTEGER,
DIMENSION(2) :: nactive
816 REAL(kind=
dp) :: dr, eps_filter, fcut, gabr
817 REAL(kind=
dp),
DIMENSION(3) :: rij
818 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: pblock
822 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: xtransformed
830 CALL timeset(routinen, handle)
833 eps_filter = 1.e-08_dp
840 para_env => sub_env%para_env
842 CALL get_qs_env(qs_env, natom=natom, cell=cell, particle_set=particle_set)
846 ALLOCATE (xtransformed(nspins))
849 ct => work%ctransformed(ispin)
851 CALL cp_fm_create(matrix=xtransformed(ispin), matrix_struct=fmstruct, name=
"XTRANSFORMED")
856 ct => work%ctransformed(ispin)
860 tempmat => work%shalf
861 CALL dbcsr_create(pdens, template=tempmat, matrix_type=dbcsr_type_no_symmetry)
863 ct => work%ctransformed(ispin)
866 1.0_dp, keep_sparsity=.false.)
873 rij = particle_set(iatom)%r - particle_set(jatom)%r
875 dr = sqrt(sum(rij(:)**2))
878 gabr = 2._dp*gabr/sqrt(3.1415926_dp)
880 gabr = erf(gabr*dr)/dr
881 fcut = exp(dr - 4._dp*rcut)
882 fcut = fcut/(fcut + 1._dp)
884 pblock = hfx_scale*gabr*pblock
900 CALL timestop(handle)
Types and set/get functions for auxiliary density matrix methods.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_filter(matrix, eps)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
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_create(matrix, matrix_struct, name, use_sp, set_zero)
creates a new full matrix with the given structure
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 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, external_para_env)
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_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public 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...
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_xc(a_ia_rspace, kernel_env, rho_ia_struct, is_rks_triplets, pw_env, work_v_xc, work_v_xc_tau, spinflip)
Driver routine for applying fxc (analyic vs. finite difference for testing.
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, tddfpt_mgrid)
Update v_rspace by adding coulomb term.
subroutine, public tddfpt_apply_energy_diff(aop_evects, evects, s_evects, gs_mos, matrix_ks, tddfpt_control)
Apply orbital energy difference term: Aop_evects(spin,state) += KS(spin) * evects(spin,...
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...
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_xc_potential(a_ia_rspace, fxc_rspace, rho_ia_struct, is_rks_triplets)
Routine for applying fxc potential.
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, 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_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, spinflip)
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
stores some data used in wavefunction fitting
Type defining parameters related to the simulation cell.
keeps the information about the structure of a full matrix
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
to create arrays of pools
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Collection of variables required to evaluate adiabatic TDDFPT kernel.
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.
represent a density, with all the representation and data needed to perform a functional evaluation