102#include "./base/base_uses.f90"
110 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xc_pot_saop'
113 REAL(KIND=
dp),
PARAMETER :: alpha = 1.19_dp, beta = 0.01_dp, k_rho = 0.42_dp
114 REAL(KIND=
dp),
PARAMETER :: kappa = 0.804_dp, mu = 0.21951_dp, &
115 beta_ec = 0.066725_dp, gamma_saop = 0.031091_dp
129 INTEGER,
INTENT(IN) :: oe_corr
131 INTEGER :: dft_method_id, homo, i, ispin, j, k, &
132 nspins, orb, xc_deriv_method_id, &
134 INTEGER,
DIMENSION(2) :: ncol, nrow
135 INTEGER,
DIMENSION(2, 3) :: bo
136 LOGICAL :: compute_virial, gapw, lsd
137 REAL(kind=
dp) :: density_cut, efac, gradient_cut, &
138 tau_cut, we_gllb, we_lb, xc_energy
139 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coeff_col
140 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_xc_tmp
141 REAL(kind=
dp),
DIMENSION(:),
POINTER :: mo_eigenvalues
142 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: e_uniform
143 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: single_mo_coeff
145 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: orbital_density_matrix, rho_struct_ao
146 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: molecular_orbitals
152 TYPE(
pw_r3d_rs_type),
ALLOCATABLE,
DIMENSION(:) :: vxc_gllb, vxc_saop
153 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, rho_struct_r, tau, vxc_lb, &
159 xc_fun_section_tmp, xc_section_orig, &
167 NULLIFY (ks_env, pw_env, auxbas_pw_pool, input)
168 NULLIFY (rho_g, rho_r, tau, rho_struct, e_uniform)
169 NULLIFY (vxc_lb, vxc_tmp, vxc_tau)
170 NULLIFY (mo_eigenvalues, deriv, rho_struct_r, rho_struct_ao)
171 NULLIFY (orbital_density_matrix, xc_section_tmp, xc_fun_section_tmp)
176 xcint_weights=weights, &
180 mos=molecular_orbitals)
181 compute_virial = virial%pv_calculate .AND. (.NOT. virial%pv_numer)
196 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
205 ALLOCATE (single_mo_coeff(nspins))
207 CALL qs_rho_get(rho_struct, rho_r=rho_struct_r, rho_ao=rho_struct_ao)
208 rho_r => rho_struct_r
210 ALLOCATE (orbital_density_matrix(ispin)%matrix)
211 CALL dbcsr_copy(orbital_density_matrix(ispin)%matrix, &
212 rho_struct_ao(ispin)%matrix,
"orbital density")
214 bo = rho_r(1)%pw_grid%bounds_local
226 needs%norm_drho = .true.
231 i_val=xc_deriv_method_id)
233 i_val=xc_rho_smooth_id)
235 xc_deriv_method_id, &
252 cpassert(.NOT. compute_virial)
254 xc_section_tmp, weights, auxbas_pw_pool, &
255 compute_virial=.false., virial_xc=virial_xc_tmp)
262 cpassert(.NOT. compute_virial)
264 xc_section_tmp, weights, auxbas_pw_pool, &
265 compute_virial=.false., virial_xc=virial_xc_tmp)
268 CALL pw_axpy(vxc_tmp(ispin), vxc_lb(ispin), alpha)
272 CALL add_lb_pot(vxc_tmp(ispin)%array, rho_set, lsd, ispin)
273 CALL pw_axpy(vxc_tmp(ispin), vxc_lb(ispin), -1.0_dp)
283 deriv_set=deriv_set, &
289 ALLOCATE (vxc_gllb(nspins))
291 CALL auxbas_pw_pool%create_pw(vxc_gllb(ispin))
295 CALL calc_2excpbe(vxc_gllb(ispin)%array, rho_set, e_uniform, lsd)
300 CALL auxbas_pw_pool%create_pw(
orbital)
301 CALL auxbas_pw_pool%create_pw(orbital_g)
307 eigenvalues=mo_eigenvalues, &
310 mo_coeff%matrix_struct, &
311 "orbital density matrix")
314 nrow_global=nrow(ispin), ncol_global=ncol(ispin))
315 ALLOCATE (coeff_col(nrow(ispin), 1))
321 efac = k_rho*sqrt(mo_eigenvalues(homo) - mo_eigenvalues(orb))
322 IF (.NOT. lsd) efac = 2.0_dp*efac
326 1, orb, nrow(ispin), 1)
329 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
331 matrix_v=single_mo_coeff(ispin), &
337 rho=
orbital, rho_gspace=orbital_g, &
343 DEALLOCATE (coeff_col)
345 DO k = bo(1, 3), bo(2, 3)
346 DO j = bo(1, 2), bo(2, 2)
347 DO i = bo(1, 1), bo(2, 1)
348 IF (rho_r(ispin)%array(i, j, k) > density_cut)
THEN
349 vxc_tmp(ispin)%array(i, j, k) = vxc_tmp(ispin)%array(i, j, k)/ &
350 rho_r(ispin)%array(i, j, k)
352 vxc_tmp(ispin)%array(i, j, k) = 0.0_dp
358 CALL pw_axpy(vxc_tmp(ispin), vxc_gllb(ispin), 1.0_dp)
365 ALLOCATE (vxc_saop(nspins))
371 eigenvalues=mo_eigenvalues, &
373 CALL auxbas_pw_pool%create_pw(vxc_saop(ispin))
376 ALLOCATE (coeff_col(nrow(ispin), 1))
380 we_lb = exp(-2.0_dp*(mo_eigenvalues(homo) - mo_eigenvalues(orb))**2)
381 we_gllb = 1.0_dp - we_lb
384 we_gllb = 2.0_dp*we_gllb
387 vxc_tmp(ispin)%array = we_lb*vxc_lb(ispin)%array + &
388 we_gllb*vxc_gllb(ispin)%array
392 1, orb, nrow(ispin), 1)
395 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
397 matrix_v=single_mo_coeff(ispin), &
403 rho=
orbital, rho_gspace=orbital_g, &
406 vxc_saop(ispin)%array = vxc_saop(ispin)%array + &
407 orbital%array*vxc_tmp(ispin)%array
413 DEALLOCATE (coeff_col)
415 DO k = bo(1, 3), bo(2, 3)
416 DO j = bo(1, 2), bo(2, 2)
417 DO i = bo(1, 1), bo(2, 1)
418 IF (rho_r(ispin)%array(i, j, k) > density_cut)
THEN
419 vxc_saop(ispin)%array(i, j, k) = vxc_saop(ispin)%array(i, j, k)/ &
420 rho_r(ispin)%array(i, j, k)
422 vxc_saop(ispin)%array(i, j, k) = 0.0_dp
433 CALL auxbas_pw_pool%give_back_pw(
orbital)
434 CALL auxbas_pw_pool%give_back_pw(orbital_g)
441 IF (oe_corr ==
oe_lb)
THEN
442 CALL pw_copy(vxc_lb(ispin), vxc_saop(ispin))
443 ELSE IF (oe_corr ==
oe_gllb)
THEN
444 CALL pw_copy(vxc_gllb(ispin), vxc_saop(ispin))
446 CALL pw_scale(vxc_saop(ispin), vxc_saop(ispin)%pw_grid%dvol)
448 CALL integrate_v_rspace(v_rspace=vxc_saop(ispin), pmat=rho_struct_ao(ispin), &
449 hmat=ks_matrix(ispin), qs_env=qs_env, &
450 calculate_forces=.false., &
456 CALL auxbas_pw_pool%give_back_pw(vxc_saop(ispin))
457 CALL auxbas_pw_pool%give_back_pw(vxc_gllb(ispin))
458 CALL vxc_lb(ispin)%release()
459 CALL vxc_tmp(ispin)%release()
461 DEALLOCATE (vxc_gllb, vxc_lb, vxc_tmp, orbital_density_matrix)
463 DEALLOCATE (vxc_saop)
473 CALL gapw_add_atomic_saop_pot(qs_env, oe_corr)
483 SUBROUTINE gapw_add_atomic_saop_pot(qs_env, oe_corr)
486 INTEGER,
INTENT(IN) :: oe_corr
488 INTEGER :: ia, iat, iatom, ikind, ir, ispin, na, &
489 natom, nr, ns, nspins, orb
490 INTEGER,
DIMENSION(2) :: bo, homo, ncol, nrow
491 INTEGER,
DIMENSION(2, 3) :: bounds
492 INTEGER,
DIMENSION(:),
POINTER :: atom_list
493 LOGICAL :: accint, lsd, paw_atom
494 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: tau
495 REAL(kind=
dp) :: agr, alpha, density_cut, efac, exc, &
496 gradient_cut, tau_cut, we_gllb, we_lb
497 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coeff_col, weight_h, weight_s
498 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: dummy, e_uniform, rho_h, rho_s, vtau, &
499 vxc_gllb_h, vxc_gllb_s, vxc_lb_h, vxc_lb_s, vxc_saop_h, vxc_saop_s, vxc_tmp_h, vxc_tmp_s
500 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: drho_h, drho_s, vxg
503 TYPE(
cp_fm_p_type),
ALLOCATABLE,
DIMENSION(:) :: mo_coeff
504 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: single_mo_coeff
505 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, orbital_density_matrix, &
507 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ksmat, psmat
513 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: molecular_orbitals
518 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
520 TYPE(
rho_atom_coeff),
DIMENSION(:),
POINTER :: dr_h, dr_s, int_hh, int_ss, r_h, r_s
525 xc_fun_section_tmp, xc_section_orig, &
533 NULLIFY (rho_h, rho_s, vxc_lb_h, vxc_lb_s, vxc_gllb_h, vxc_gllb_s, &
534 vxc_tmp_h, vxc_tmp_s, vtau, dummy, e_uniform, drho_h, drho_s, vxg, atom_list, &
535 atomic_kind_set, qs_kind_set, deriv, atomic_grid, rho_struct_ao, &
536 harmonics, molecular_orbitals, rho_structure, r_h, r_s, dr_h, dr_s, &
537 r_h_d, r_s_d, rho_atom_set, rho_atom, para_env, &
538 mo_eigenvalues, local_rho_set, matrix_ks, &
539 orbital_density_matrix, vxc_saop_h, vxc_saop_s)
543 NULLIFY (dft_control, oce, sab)
547 mos=molecular_orbitals, &
548 atomic_kind_set=atomic_kind_set, &
549 qs_kind_set=qs_kind_set, &
550 rho_atom_set=rho_atom_set, &
551 matrix_ks=matrix_ks, &
552 dft_control=dft_control, &
554 oce=oce, sab_orb=sab)
556 CALL qs_rho_get(rho_structure, rho_ao=rho_struct_ao)
562 accint = dft_control%qs_control%gapw_control%accurate_xcint
584 ns =
SIZE(rho_struct_ao)
585 psmat(1:ns, 1:1) => rho_struct_ao(1:ns)
589 ALLOCATE (mo_coeff(nspins), single_mo_coeff(nspins), mo_eigenvalues(nspins))
595 mo_coeff=mo_coeff(ispin)%matrix, &
596 eigenvalues=mo_eigenvalues(ispin)%array, &
599 mo_coeff(ispin)%matrix%matrix_struct, &
600 "orbital density matrix")
602 nrow_global=nrow(ispin), ncol_global=ncol(ispin))
603 ALLOCATE (orbital_density_matrix(ispin)%matrix)
604 CALL dbcsr_copy(orbital_density_matrix(ispin)%matrix, &
605 rho_struct_ao(ispin)%matrix, &
610 qs_kind_set, dft_control, para_env)
612 DO ikind = 1,
SIZE(atomic_kind_set)
613 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
615 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom, &
616 harmonics=harmonics, grid_atom=atomic_grid)
617 IF (.NOT. paw_atom) cycle
620 na = atomic_grid%ng_sphere
628 gradient_cut, tau_cut)
630 gradient_cut, tau_cut)
632 gradient_cut, tau_cut)
634 gradient_cut, tau_cut)
639 needs%norm_drho = .true.
646 needs_orbs%rho = .true.
647 IF (lsd) needs_orbs%rho_spin = .true.
651 ALLOCATE (rho_h(1:na, 1:nr, 1:nspins), rho_s(1:na, 1:nr, 1:nspins))
652 ALLOCATE (weight_h(1:na, 1:nr), weight_s(1:na, 1:nr))
653 ALLOCATE (vxc_lb_h(1:na, 1:nr, 1:nspins), vxc_lb_s(1:na, 1:nr, 1:nspins))
654 ALLOCATE (vxc_gllb_h(1:na, 1:nr, 1:nspins), vxc_gllb_s(1:na, 1:nr, 1:nspins))
655 ALLOCATE (vxc_tmp_h(1:na, 1:nr, 1:nspins), vxc_tmp_s(1:na, 1:nr, 1:nspins))
656 ALLOCATE (vxc_saop_h(1:na, 1:nr, 1:nspins), vxc_saop_s(1:na, 1:nr, 1:nspins))
657 ALLOCATE (drho_h(1:4, 1:na, 1:nr, 1:nspins), drho_s(1:4, 1:na, 1:nr, 1:nspins))
660 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
664 weight_h(ia, ir) = atomic_grid%wr(ir)*atomic_grid%wa(ia)
667 alpha = dft_control%qs_control%gapw_control%aw(ikind)
668 agr = 1.0_dp - exp(-alpha*atomic_grid%rad2(ir))
670 weight_s(ia, ir) = atomic_grid%wr(ir)*atomic_grid%wa(ia)*agr
674 weight_s(ia, ir) = atomic_grid%wr(ir)*atomic_grid%wa(ia)
680 iatom = atom_list(iat)
682 rho_atom => rho_atom_set(iatom)
683 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
685 rho_rad_s=r_s, drho_rad_h=dr_h, &
686 drho_rad_s=dr_s, rho_rad_h_d=r_h_d, &
694 ir, r_h, r_s, rho_h, rho_s, &
695 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
698 CALL fill_rho_set(rho_set_h, lsd, nspins, needs, rho_h, drho_h, tau, na, ir)
699 CALL fill_rho_set(rho_set_s, lsd, nspins, needs, rho_s, drho_s, tau, na, ir)
719 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_h, deriv_set, 1, needs, &
720 weight_h, lsd, na, nr, exc, vxc_tmp_h, vxg, vtau)
722 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_s, deriv_set, 1, needs, &
723 weight_s, lsd, na, nr, exc, vxc_tmp_s, vxg, vtau)
737 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_h, deriv_set, 1, needs, &
738 weight_h, lsd, na, nr, exc, vxc_lb_h, vxg, vtau)
739 vxc_lb_h = vxc_lb_h + alpha*vxc_tmp_h
741 dummy => vxc_tmp_h(:, :, ispin:ispin)
742 CALL add_lb_pot(dummy, rho_set_h, lsd, ispin)
743 vxc_lb_h(:, :, ispin) = vxc_lb_h(:, :, ispin) - weight_h(:, :)*vxc_tmp_h(:, :, ispin)
749 cpassert(
ASSOCIATED(deriv))
752 dummy => vxc_gllb_h(:, :, ispin:ispin)
753 CALL calc_2excpbe(dummy, rho_set_h, e_uniform, lsd)
754 vxc_gllb_h(:, :, ispin) = vxc_gllb_h(:, :, ispin)*weight_h(:, :)
756 NULLIFY (deriv, dummy, e_uniform)
762 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_s, deriv_set, 1, needs, &
763 weight_s, lsd, na, nr, exc, vxc_lb_s, vxg, vtau)
765 vxc_lb_s = vxc_lb_s + alpha*vxc_tmp_s
767 dummy => vxc_tmp_s(:, :, ispin:ispin)
768 CALL add_lb_pot(dummy, rho_set_s, lsd, ispin)
769 vxc_lb_s(:, :, ispin) = vxc_lb_s(:, :, ispin) - weight_s(:, :)*vxc_tmp_s(:, :, ispin)
775 cpassert(
ASSOCIATED(deriv))
778 dummy => vxc_gllb_s(:, :, ispin:ispin)
779 CALL calc_2excpbe(dummy, rho_set_s, e_uniform, lsd)
780 vxc_gllb_s(:, :, ispin) = vxc_gllb_s(:, :, ispin)*weight_s(:, :)
782 NULLIFY (deriv, dummy, e_uniform)
787 vxc_tmp_h = 0.0_dp; vxc_tmp_s = 0.0_dp
791 DO orb = 1, homo(ispin) - 1
793 ALLOCATE (coeff_col(nrow(ispin), 1))
795 efac = k_rho*sqrt(mo_eigenvalues(ispin)%array(homo(ispin)) - &
796 mo_eigenvalues(ispin)%array(orb))
797 IF (.NOT. lsd) efac = 2.0_dp*efac
801 1, orb, nrow(ispin), 1)
804 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
806 matrix_v=single_mo_coeff(ispin), &
810 DEALLOCATE (coeff_col)
816 ns =
SIZE(orbital_density_matrix)
817 psmat(1:ns, 1:1) => orbital_density_matrix(1:ns)
821 rho_atom => local_rho_set%rho_atom_set(iatom)
822 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
823 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
830 ir, r_h, r_s, rho_h, rho_s, &
831 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
834 CALL fill_rho_set(orb_rho_set_h, lsd, nspins, needs_orbs, rho_h, drho_h, tau, na, ir)
835 CALL fill_rho_set(orb_rho_set_s, lsd, nspins, needs_orbs, rho_s, drho_s, tau, na, ir)
840 vxc_tmp_h(:, :, 1) = vxc_tmp_h(:, :, 1) + efac*orb_rho_set_h%rhoa(:, :, 1)
841 vxc_tmp_s(:, :, 1) = vxc_tmp_s(:, :, 1) + efac*orb_rho_set_s%rhoa(:, :, 1)
843 vxc_tmp_h(:, :, 2) = vxc_tmp_h(:, :, 2) + efac*orb_rho_set_h%rhob(:, :, 1)
844 vxc_tmp_s(:, :, 2) = vxc_tmp_s(:, :, 2) + efac*orb_rho_set_s%rhob(:, :, 1)
847 vxc_tmp_h(:, :, 1) = vxc_tmp_h(:, :, 1) + efac*orb_rho_set_h%rho(:, :, 1)
848 vxc_tmp_s(:, :, 1) = vxc_tmp_s(:, :, 1) + efac*orb_rho_set_s%rho(:, :, 1)
858 IF (rho_set_h%rhoa(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
859 vxc_gllb_h(ia, ir, 1) = vxc_gllb_h(ia, ir, 1) + &
860 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 1)/rho_set_h%rhoa(ia, ir, 1)
862 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
863 vxc_gllb_h(ia, ir, 2) = vxc_gllb_h(ia, ir, 2) + &
864 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
866 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
867 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
868 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
870 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
871 vxc_gllb_s(ia, ir, 2) = vxc_gllb_s(ia, ir, 2) + &
872 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
879 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
880 vxc_gllb_h(ia, ir, 1) = vxc_gllb_h(ia, ir, 1) + &
881 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
883 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
884 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
885 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
891 vxc_saop_h = 0.0_dp; vxc_saop_s = 0.0_dp
895 DO orb = 1, homo(ispin)
897 ALLOCATE (coeff_col(nrow(ispin), 1))
899 we_lb = exp(-2.0_dp*(mo_eigenvalues(ispin)%array(homo(ispin)) - &
900 mo_eigenvalues(ispin)%array(orb))**2)
901 we_gllb = 1.0_dp - we_lb
904 we_gllb = 2.0_dp*we_gllb
907 vxc_tmp_h(:, :, ispin) = we_lb*vxc_lb_h(:, :, ispin) + &
908 we_gllb*vxc_gllb_h(:, :, ispin)
909 vxc_tmp_s(:, :, ispin) = we_lb*vxc_lb_s(:, :, ispin) + &
910 we_gllb*vxc_gllb_s(:, :, ispin)
914 1, orb, nrow(ispin), 1)
917 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
919 matrix_v=single_mo_coeff(ispin), &
923 DEALLOCATE (coeff_col)
929 ns =
SIZE(orbital_density_matrix)
930 psmat(1:ns, 1:1) => orbital_density_matrix(1:ns)
934 rho_atom => local_rho_set%rho_atom_set(iatom)
935 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
936 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
943 ir, r_h, r_s, rho_h, rho_s, &
944 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
947 CALL fill_rho_set(orb_rho_set_h, lsd, nspins, needs_orbs, rho_h, drho_h, tau, na, ir)
948 CALL fill_rho_set(orb_rho_set_s, lsd, nspins, needs_orbs, rho_s, drho_s, tau, na, ir)
953 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rhoa(:, :, 1)
954 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rhoa(:, :, 1)
956 vxc_saop_h(:, :, 2) = vxc_saop_h(:, :, 2) + vxc_tmp_h(:, :, 2)*orb_rho_set_h%rhob(:, :, 1)
957 vxc_saop_s(:, :, 2) = vxc_saop_s(:, :, 2) + vxc_tmp_s(:, :, 2)*orb_rho_set_s%rhob(:, :, 1)
960 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rho(:, :, 1)
961 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rho(:, :, 1)
971 IF (rho_set_h%rhoa(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
972 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rhoa(ia, ir, 1)
974 vxc_saop_h(ia, ir, 1) = 0.0_dp
976 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
977 vxc_saop_h(ia, ir, 2) = vxc_saop_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
979 vxc_saop_h(ia, ir, 2) = 0.0_dp
981 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
982 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
984 vxc_saop_s(ia, ir, 1) = 0.0_dp
986 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
987 vxc_saop_s(ia, ir, 2) = vxc_saop_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
989 vxc_saop_s(ia, ir, 2) = 0.0_dp
996 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
997 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
999 vxc_saop_h(ia, ir, 1) = 0.0_dp
1001 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
1002 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
1004 vxc_saop_s(ia, ir, 1) = 0.0_dp
1010 rho_atom => rho_atom_set(iatom)
1011 CALL get_rho_atom(rho_atom=rho_atom, ga_vlocal_gb_h=int_hh, ga_vlocal_gb_s=int_ss)
1012 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis, &
1013 harmonics=harmonics, grid_atom=grid_atom)
1014 SELECT CASE (oe_corr)
1016 CALL gavxcgb_nogc(vxc_lb_h, vxc_lb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1018 CALL gavxcgb_nogc(vxc_gllb_h, vxc_gllb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1020 CALL gavxcgb_nogc(vxc_saop_h, vxc_saop_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1022 cpabort(
"Unknown correction!")
1027 DEALLOCATE (rho_h, rho_s, weight_h, weight_s)
1028 DEALLOCATE (vxc_lb_h, vxc_lb_s)
1029 DEALLOCATE (vxc_gllb_h, vxc_gllb_s)
1030 DEALLOCATE (vxc_tmp_h, vxc_tmp_s)
1031 DEALLOCATE (vxc_saop_h, vxc_saop_s)
1032 DEALLOCATE (drho_h, drho_s)
1043 ns =
SIZE(matrix_ks)
1044 ksmat(1:ns, 1:1) => matrix_ks(1:ns)
1045 ns =
SIZE(rho_struct_ao)
1046 psmat(1:ns, 1:1) => rho_struct_ao(1:ns)
1059 DEALLOCATE (mo_coeff, mo_eigenvalues)
1062 END SUBROUTINE gapw_add_atomic_saop_pot
1071 SUBROUTINE add_lb_pot(pot, rho_set, lsd, spin)
1073 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1075 LOGICAL,
INTENT(IN) :: lsd
1076 INTEGER,
INTENT(IN) :: spin
1078 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp
1081 INTEGER,
DIMENSION(2, 3) :: bo
1082 REAL(kind=
dp) :: n, n_13, x, x2
1084 bo = rho_set%local_bounds
1086 DO k = bo(1, 3), bo(2, 3)
1087 DO j = bo(1, 2), bo(2, 2)
1088 DO i = bo(1, 1), bo(2, 1)
1090 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1091 n = rho_set%rho(i, j, k)/2.0_dp
1093 x = (rho_set%norm_drho(i, j, k)/2.0_dp)/(n*n_13)
1095 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(x + sqrt(x2 + 1.0_dp)))
1099 IF (rho_set%rhoa(i, j, k) > rho_set%rho_cutoff)
THEN
1100 n_13 = rho_set%rhoa_1_3(i, j, k)
1101 x = rho_set%norm_drhoa(i, j, k)/(rho_set%rhoa(i, j, k)*n_13)
1103 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1105 ELSE IF (spin == 2)
THEN
1106 IF (rho_set%rhob(i, j, k) > rho_set%rho_cutoff)
THEN
1107 n_13 = rho_set%rhob_1_3(i, j, k)
1108 x = rho_set%norm_drhob(i, j, k)/(rho_set%rhob(i, j, k)*n_13)
1110 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1118 END SUBROUTINE add_lb_pot
1127 SUBROUTINE calc_2excpbe(pot, rho_set, e_uniform, lsd)
1129 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1131 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: e_uniform
1132 LOGICAL,
INTENT(IN) :: lsd
1135 INTEGER,
DIMENSION(2, 3) :: bo
1136 REAL(kind=
dp) :: e_unif, rho
1138 bo = rho_set%local_bounds
1140 DO k = bo(1, 3), bo(2, 3)
1141 DO j = bo(1, 2), bo(2, 2)
1142 DO i = bo(1, 1), bo(2, 1)
1144 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1145 e_unif = e_uniform(i, j, k)/rho_set%rho(i, j, k)
1151 calc_ecpbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1152 e_unif, rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1154 calc_expbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1155 rho_set%rho_cutoff, rho_set%drho_cutoff)
1157 rho = rho_set%rhoa(i, j, k) + rho_set%rhob(i, j, k)
1158 IF (rho > rho_set%rho_cutoff)
THEN
1159 e_unif = e_uniform(i, j, k)/rho
1165 calc_ecpbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1167 rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1169 calc_expbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1170 rho_set%rho_cutoff, rho_set%drho_cutoff)
1176 END SUBROUTINE calc_2excpbe
1188 FUNCTION calc_ecpbe_u(ra, rb, ngr, ec_unif, rc, ngrc)
RESULT(res)
1190 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, ec_unif, rc, ngrc
1191 REAL(kind=
dp) :: res
1193 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp, tb3 = 2.0_dp/3.0_dp
1195 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, phi, phi3, r, t2, &
1200 IF (r > rc .AND. ngr > ngrc)
THEN
1202 IF (zeta > 1.0_dp) zeta = 1.0_dp
1203 IF (zeta < -1.0_dp) zeta = -1.0_dp
1204 phi = ((1.0_dp + zeta)**tb3 + (1.0_dp - zeta)**tb3)/2.0_dp
1206 kf = (3.0_dp*r*
pi*
pi)**ob3
1207 ks = sqrt(4.0_dp*kf/
pi)
1208 t2 = (ngr/(2.0_dp*phi*ks*r))**2
1209 a = beta_ec/gamma_saop/(exp(-ec_unif/(gamma_saop*phi3)) - 1.0_dp)
1211 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1212 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1216 END FUNCTION calc_ecpbe_u
1227 FUNCTION calc_ecpbe_r(r, ngr, ec_unif, rc, ngrc)
RESULT(res)
1229 REAL(kind=
dp),
INTENT(in) :: r, ngr, ec_unif, rc, ngrc
1230 REAL(kind=
dp) :: res
1232 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, t2
1235 IF (r > rc .AND. ngr > ngrc)
THEN
1236 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1237 ks = sqrt(4.0_dp*kf/
pi)
1238 t2 = (ngr/(2.0_dp*ks*r))**2
1239 a = beta_ec/gamma_saop/(exp(-ec_unif/gamma_saop) - 1.0_dp)
1241 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1242 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1246 END FUNCTION calc_ecpbe_r
1257 FUNCTION calc_expbe_u(ra, rb, ngr, rc, ngrc)
RESULT(res)
1259 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, rc, ngrc
1260 REAL(kind=
dp) :: res
1265 res = calc_expbe_r(r, ngr, rc, ngrc)
1267 END FUNCTION calc_expbe_u
1277 FUNCTION calc_expbe_r(r, ngr, rc, ngrc)
RESULT(res)
1279 REAL(kind=
dp),
INTENT(in) :: r, ngr, rc, ngrc
1280 REAL(kind=
dp) :: res
1282 REAL(kind=
dp) :: ex_unif, fx, kf, s
1285 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1286 ex_unif = -3.0_dp*kf/(4.0_dp*
pi)
1288 IF (ngr > ngrc)
THEN
1289 s = ngr/(2.0_dp*kf*r)
1290 fx = fx + kappa - kappa/(1.0_dp + mu*s*s/kappa)
1297 END FUNCTION calc_expbe_r
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.
various utilities that regard array of different kinds: output, allocation,... maybe it is not a good...
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)
...
DBCSR operations in CP2K.
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,...
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_set_submatrix(fm, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
sets a submatrix of a full matrix fm(start_row:start_row+n_rows,start_col:start_col+n_cols) = alpha*o...
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
subroutine, public cp_fm_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
gets a submatrix of a full matrix op(target_m)(1:n_rows,1:n_cols) =fm(start_row:start_row+n_rows,...
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Interface to the message passing library MPI.
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 ...
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
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, 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.
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, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
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 local_rho_set_create(local_rho_set)
...
subroutine, public local_rho_set_release(local_rho_set)
...
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
subroutine, public allocate_rho_atom_internals(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
...
subroutine, public calculate_rho_atom_coeff(qs_env, rho_ao, rho_atom_set, qs_kind_set, oce, sab, para_env)
...
subroutine, public get_rho_atom(rho_atom, cpc_h, cpc_s, rho_rad_h, rho_rad_s, drho_rad_h, drho_rad_s, vrho_rad_h, vrho_rad_s, rho_rad_h_d, rho_rad_s_d, ga_vlocal_gb_h, ga_vlocal_gb_s, int_scr_h, int_scr_s)
...
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 calc_rho_angular(grid_atom, harmonics, nspins, grad_func, ir, r_h, r_s, rho_h, rho_s, dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
...
subroutine, public gavxcgb_nogc(vxc_h, vxc_s, int_hh, int_ss, grid_atom, basis_1c, harmonics, nspins)
...
All kind of helpful little routines.
pure integer function, dimension(2), public get_limit(m, n, me)
divide m entries into n parts, return size of part me
subroutine, public vxc_of_r_new(xc_fun_section, rho_set, deriv_set, deriv_order, needs, w, lsd, na, nr, exc, vxc, vxg, vtau, energy_only, adiabatic_rescale_factor)
...
subroutine, public xc_rho_set_atom_update(rho_set, needs, nspins, bo)
...
subroutine, public fill_rho_set(rho_set, lsd, nspins, needs, rho, drho, tau, na, ir)
...
represent a group ofunctional derivatives
subroutine, public xc_dset_zero_all(deriv_set)
...
type(xc_derivative_type) function, pointer, public xc_dset_get_derivative(derivative_set, description, allocate_deriv)
returns the requested xc_derivative
subroutine, public xc_dset_release(derivative_set)
releases a derivative set
subroutine, public xc_dset_create(derivative_set, pw_pool, local_bounds)
creates a derivative set object
Provides types for the management of the xc-functionals and their derivatives.
subroutine, public xc_derivative_get(deriv, split_desc, order, deriv_data, accept_null_data)
returns various information on the given derivative
subroutine, public xc_functionals_eval(functionals, lsd, rho_set, deriv_set, deriv_order)
...
Calculate the saop potential.
subroutine, public add_saop_pot(ks_matrix, qs_env, oe_corr)
...
elemental subroutine, public xc_rho_cflags_setall(cflags, value)
sets all the flags to the given value
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...
calculates the Becke 88 exchange functional
subroutine, public xb88_lsd_info(reference, shortform, needs, max_deriv)
return various information on the functional
subroutine, public xb88_lda_info(reference, shortform, needs, max_deriv)
return various information on the functional
Exchange and Correlation functional calculations.
subroutine, public xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau, xc_section, weights, pw_pool, compute_virial, virial_xc, exc_r)
Exchange and Correlation functional calculations.
Provides all information about an atomic kind.
represent a pointer to a 1d array
just to build arrays of pointers to matrices
stores all the informations relevant to an mpi environment
Orbital angular momentum.
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 ...
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.
A derivative set contains the different derivatives of a xc-functional in form of a linked list.
represent a derivative of a functional
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