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) &
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)
861 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff) &
862 vxc_gllb_h(ia, ir, 2) = vxc_gllb_h(ia, ir, 2) + &
863 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
864 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff) &
865 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
866 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
867 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff) &
868 vxc_gllb_s(ia, ir, 2) = vxc_gllb_s(ia, ir, 2) + &
869 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
875 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff) &
876 vxc_gllb_h(ia, ir, 1) = vxc_gllb_h(ia, ir, 1) + &
877 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
878 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff) &
879 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
880 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
885 vxc_saop_h = 0.0_dp; vxc_saop_s = 0.0_dp
889 DO orb = 1, homo(ispin)
891 ALLOCATE (coeff_col(nrow(ispin), 1))
893 we_lb = exp(-2.0_dp*(mo_eigenvalues(ispin)%array(homo(ispin)) - &
894 mo_eigenvalues(ispin)%array(orb))**2)
895 we_gllb = 1.0_dp - we_lb
898 we_gllb = 2.0_dp*we_gllb
901 vxc_tmp_h(:, :, ispin) = we_lb*vxc_lb_h(:, :, ispin) + &
902 we_gllb*vxc_gllb_h(:, :, ispin)
903 vxc_tmp_s(:, :, ispin) = we_lb*vxc_lb_s(:, :, ispin) + &
904 we_gllb*vxc_gllb_s(:, :, ispin)
908 1, orb, nrow(ispin), 1)
911 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
913 matrix_v=single_mo_coeff(ispin), &
917 DEALLOCATE (coeff_col)
923 ns =
SIZE(orbital_density_matrix)
924 psmat(1:ns, 1:1) => orbital_density_matrix(1:ns)
928 rho_atom => local_rho_set%rho_atom_set(iatom)
929 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
930 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
937 ir, r_h, r_s, rho_h, rho_s, &
938 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
941 CALL fill_rho_set(orb_rho_set_h, lsd, nspins, needs_orbs, rho_h, drho_h, tau, na, ir)
942 CALL fill_rho_set(orb_rho_set_s, lsd, nspins, needs_orbs, rho_s, drho_s, tau, na, ir)
947 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rhoa(:, :, 1)
948 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rhoa(:, :, 1)
950 vxc_saop_h(:, :, 2) = vxc_saop_h(:, :, 2) + vxc_tmp_h(:, :, 2)*orb_rho_set_h%rhob(:, :, 1)
951 vxc_saop_s(:, :, 2) = vxc_saop_s(:, :, 2) + vxc_tmp_s(:, :, 2)*orb_rho_set_s%rhob(:, :, 1)
954 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rho(:, :, 1)
955 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rho(:, :, 1)
965 IF (rho_set_h%rhoa(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
966 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rhoa(ia, ir, 1)
968 vxc_saop_h(ia, ir, 1) = 0.0_dp
970 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
971 vxc_saop_h(ia, ir, 2) = vxc_saop_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
973 vxc_saop_h(ia, ir, 2) = 0.0_dp
975 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
976 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
978 vxc_saop_s(ia, ir, 1) = 0.0_dp
980 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
981 vxc_saop_s(ia, ir, 2) = vxc_saop_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
983 vxc_saop_s(ia, ir, 2) = 0.0_dp
990 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
991 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
993 vxc_saop_h(ia, ir, 1) = 0.0_dp
995 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
996 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
998 vxc_saop_s(ia, ir, 1) = 0.0_dp
1004 rho_atom => rho_atom_set(iatom)
1005 CALL get_rho_atom(rho_atom=rho_atom, ga_vlocal_gb_h=int_hh, ga_vlocal_gb_s=int_ss)
1006 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis, &
1007 harmonics=harmonics, grid_atom=grid_atom)
1008 SELECT CASE (oe_corr)
1010 CALL gavxcgb_nogc(vxc_lb_h, vxc_lb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1012 CALL gavxcgb_nogc(vxc_gllb_h, vxc_gllb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1014 CALL gavxcgb_nogc(vxc_saop_h, vxc_saop_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1016 cpabort(
"Unknown correction!")
1021 DEALLOCATE (rho_h, rho_s, weight_h, weight_s)
1022 DEALLOCATE (vxc_lb_h, vxc_lb_s)
1023 DEALLOCATE (vxc_gllb_h, vxc_gllb_s)
1024 DEALLOCATE (vxc_tmp_h, vxc_tmp_s)
1025 DEALLOCATE (vxc_saop_h, vxc_saop_s)
1026 DEALLOCATE (drho_h, drho_s)
1037 ns =
SIZE(matrix_ks)
1038 ksmat(1:ns, 1:1) => matrix_ks(1:ns)
1039 ns =
SIZE(rho_struct_ao)
1040 psmat(1:ns, 1:1) => rho_struct_ao(1:ns)
1053 DEALLOCATE (mo_coeff, mo_eigenvalues)
1056 END SUBROUTINE gapw_add_atomic_saop_pot
1065 SUBROUTINE add_lb_pot(pot, rho_set, lsd, spin)
1067 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1069 LOGICAL,
INTENT(IN) :: lsd
1070 INTEGER,
INTENT(IN) :: spin
1072 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp
1075 INTEGER,
DIMENSION(2, 3) :: bo
1076 REAL(kind=
dp) :: n, n_13, x, x2
1078 bo = rho_set%local_bounds
1080 DO k = bo(1, 3), bo(2, 3)
1081 DO j = bo(1, 2), bo(2, 2)
1082 DO i = bo(1, 1), bo(2, 1)
1084 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1085 n = rho_set%rho(i, j, k)/2.0_dp
1087 x = (rho_set%norm_drho(i, j, k)/2.0_dp)/(n*n_13)
1089 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(x + sqrt(x2 + 1.0_dp)))
1093 IF (rho_set%rhoa(i, j, k) > rho_set%rho_cutoff)
THEN
1094 n_13 = rho_set%rhoa_1_3(i, j, k)
1095 x = rho_set%norm_drhoa(i, j, k)/(rho_set%rhoa(i, j, k)*n_13)
1097 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1099 ELSE IF (spin == 2)
THEN
1100 IF (rho_set%rhob(i, j, k) > rho_set%rho_cutoff)
THEN
1101 n_13 = rho_set%rhob_1_3(i, j, k)
1102 x = rho_set%norm_drhob(i, j, k)/(rho_set%rhob(i, j, k)*n_13)
1104 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1112 END SUBROUTINE add_lb_pot
1121 SUBROUTINE calc_2excpbe(pot, rho_set, e_uniform, lsd)
1123 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1125 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: e_uniform
1126 LOGICAL,
INTENT(IN) :: lsd
1129 INTEGER,
DIMENSION(2, 3) :: bo
1130 REAL(kind=
dp) :: e_unif, rho
1132 bo = rho_set%local_bounds
1134 DO k = bo(1, 3), bo(2, 3)
1135 DO j = bo(1, 2), bo(2, 2)
1136 DO i = bo(1, 1), bo(2, 1)
1138 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1139 e_unif = e_uniform(i, j, k)/rho_set%rho(i, j, k)
1145 calc_ecpbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1146 e_unif, rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1148 calc_expbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1149 rho_set%rho_cutoff, rho_set%drho_cutoff)
1151 rho = rho_set%rhoa(i, j, k) + rho_set%rhob(i, j, k)
1152 IF (rho > rho_set%rho_cutoff)
THEN
1153 e_unif = e_uniform(i, j, k)/rho
1159 calc_ecpbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1161 rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1163 calc_expbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1164 rho_set%rho_cutoff, rho_set%drho_cutoff)
1170 END SUBROUTINE calc_2excpbe
1182 FUNCTION calc_ecpbe_u(ra, rb, ngr, ec_unif, rc, ngrc)
RESULT(res)
1184 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, ec_unif, rc, ngrc
1185 REAL(kind=
dp) :: res
1187 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp, tb3 = 2.0_dp/3.0_dp
1189 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, phi, phi3, r, t2, &
1194 IF (r > rc .AND. ngr > ngrc)
THEN
1196 IF (zeta > 1.0_dp) zeta = 1.0_dp
1197 IF (zeta < -1.0_dp) zeta = -1.0_dp
1198 phi = ((1.0_dp + zeta)**tb3 + (1.0_dp - zeta)**tb3)/2.0_dp
1200 kf = (3.0_dp*r*
pi*
pi)**ob3
1201 ks = sqrt(4.0_dp*kf/
pi)
1202 t2 = (ngr/(2.0_dp*phi*ks*r))**2
1203 a = beta_ec/gamma_saop/(exp(-ec_unif/(gamma_saop*phi3)) - 1.0_dp)
1205 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1206 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1210 END FUNCTION calc_ecpbe_u
1221 FUNCTION calc_ecpbe_r(r, ngr, ec_unif, rc, ngrc)
RESULT(res)
1223 REAL(kind=
dp),
INTENT(in) :: r, ngr, ec_unif, rc, ngrc
1224 REAL(kind=
dp) :: res
1226 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, t2
1229 IF (r > rc .AND. ngr > ngrc)
THEN
1230 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1231 ks = sqrt(4.0_dp*kf/
pi)
1232 t2 = (ngr/(2.0_dp*ks*r))**2
1233 a = beta_ec/gamma_saop/(exp(-ec_unif/gamma_saop) - 1.0_dp)
1235 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1236 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1240 END FUNCTION calc_ecpbe_r
1251 FUNCTION calc_expbe_u(ra, rb, ngr, rc, ngrc)
RESULT(res)
1253 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, rc, ngrc
1254 REAL(kind=
dp) :: res
1259 res = calc_expbe_r(r, ngr, rc, ngrc)
1261 END FUNCTION calc_expbe_u
1271 FUNCTION calc_expbe_r(r, ngr, rc, ngrc)
RESULT(res)
1273 REAL(kind=
dp),
INTENT(in) :: r, ngr, rc, ngrc
1274 REAL(kind=
dp) :: res
1276 REAL(kind=
dp) :: ex_unif, fx, kf, s
1279 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1280 ex_unif = -3.0_dp*kf/(4.0_dp*
pi)
1282 IF (ngr > ngrc)
THEN
1283 s = ngr/(2.0_dp*kf*r)
1284 fx = fx + kappa - kappa/(1.0_dp + mu*s*s/kappa)
1291 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_create(matrix, matrix_struct, name, use_sp, nrow, ncol, set_zero)
creates a new full matrix with the given structure
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_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