103#include "./base/base_uses.f90"
111 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'xc_pot_saop'
114 REAL(KIND=
dp),
PARAMETER :: alpha = 1.19_dp, beta = 0.01_dp, k_rho = 0.42_dp
115 REAL(KIND=
dp),
PARAMETER :: kappa = 0.804_dp, mu = 0.21951_dp, &
116 beta_ec = 0.066725_dp, gamma_saop = 0.031091_dp
130 INTEGER,
INTENT(IN) :: oe_corr
132 INTEGER :: dft_method_id, homo, i, ispin, j, k, &
133 nspins, orb, xc_deriv_method_id, &
135 INTEGER,
DIMENSION(2) :: ncol, nrow
136 INTEGER,
DIMENSION(2, 3) :: bo
137 LOGICAL :: compute_virial, gapw, lsd
138 REAL(kind=
dp) :: density_cut, efac, gradient_cut, &
139 tau_cut, we_gllb, we_lb, xc_energy
140 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coeff_col
141 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_xc_tmp
142 REAL(kind=
dp),
DIMENSION(:),
POINTER :: mo_eigenvalues
143 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: e_uniform
144 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: single_mo_coeff
146 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: orbital_density_matrix, rho_struct_ao
147 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: molecular_orbitals
153 TYPE(
pw_r3d_rs_type),
ALLOCATABLE,
DIMENSION(:) :: vxc_gllb, vxc_saop
154 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r, rho_struct_r, tau, vxc_lb, &
160 xc_fun_section_tmp, xc_section_orig, &
168 NULLIFY (ks_env, pw_env, auxbas_pw_pool, input)
169 NULLIFY (rho_g, rho_r, tau, rho_struct, e_uniform)
170 NULLIFY (vxc_lb, vxc_tmp, vxc_tau)
171 NULLIFY (mo_eigenvalues, deriv, rho_struct_r, rho_struct_ao)
172 NULLIFY (orbital_density_matrix, xc_section_tmp, xc_fun_section_tmp)
177 xcint_weights=weights, &
181 mos=molecular_orbitals)
182 compute_virial = virial%pv_calculate .AND. (.NOT. virial%pv_numer)
197 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
206 ALLOCATE (single_mo_coeff(nspins))
208 CALL qs_rho_get(rho_struct, rho_r=rho_struct_r, rho_ao=rho_struct_ao)
209 rho_r => rho_struct_r
211 ALLOCATE (orbital_density_matrix(ispin)%matrix)
212 CALL dbcsr_copy(orbital_density_matrix(ispin)%matrix, &
213 rho_struct_ao(ispin)%matrix,
"orbital density")
215 bo = rho_r(1)%pw_grid%bounds_local
227 needs%norm_drho = .true.
232 i_val=xc_deriv_method_id)
234 i_val=xc_rho_smooth_id)
236 xc_deriv_method_id, &
253 cpassert(.NOT. compute_virial)
255 xc_section_tmp, weights, auxbas_pw_pool, &
256 compute_virial=.false., virial_xc=virial_xc_tmp)
263 cpassert(.NOT. compute_virial)
265 xc_section_tmp, weights, auxbas_pw_pool, &
266 compute_virial=.false., virial_xc=virial_xc_tmp)
269 CALL pw_axpy(vxc_tmp(ispin), vxc_lb(ispin), alpha)
273 CALL add_lb_pot(vxc_tmp(ispin)%array, rho_set, lsd, ispin)
274 CALL pw_axpy(vxc_tmp(ispin), vxc_lb(ispin), -1.0_dp)
284 deriv_set=deriv_set, &
290 ALLOCATE (vxc_gllb(nspins))
292 CALL auxbas_pw_pool%create_pw(vxc_gllb(ispin))
296 CALL calc_2excpbe(vxc_gllb(ispin)%array, rho_set, e_uniform, lsd)
301 CALL auxbas_pw_pool%create_pw(
orbital)
302 CALL auxbas_pw_pool%create_pw(orbital_g)
308 eigenvalues=mo_eigenvalues, &
311 mo_coeff%matrix_struct, &
312 "orbital density matrix")
315 nrow_global=nrow(ispin), ncol_global=ncol(ispin))
316 ALLOCATE (coeff_col(nrow(ispin), 1))
322 efac = k_rho*sqrt(mo_eigenvalues(homo) - mo_eigenvalues(orb))
323 IF (.NOT. lsd) efac = 2.0_dp*efac
327 1, orb, nrow(ispin), 1)
330 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
332 matrix_v=single_mo_coeff(ispin), &
338 rho=
orbital, rho_gspace=orbital_g, &
344 DEALLOCATE (coeff_col)
346 DO k = bo(1, 3), bo(2, 3)
347 DO j = bo(1, 2), bo(2, 2)
348 DO i = bo(1, 1), bo(2, 1)
349 IF (rho_r(ispin)%array(i, j, k) > density_cut)
THEN
350 vxc_tmp(ispin)%array(i, j, k) = vxc_tmp(ispin)%array(i, j, k)/ &
351 rho_r(ispin)%array(i, j, k)
353 vxc_tmp(ispin)%array(i, j, k) = 0.0_dp
359 CALL pw_axpy(vxc_tmp(ispin), vxc_gllb(ispin), 1.0_dp)
366 ALLOCATE (vxc_saop(nspins))
372 eigenvalues=mo_eigenvalues, &
374 CALL auxbas_pw_pool%create_pw(vxc_saop(ispin))
377 ALLOCATE (coeff_col(nrow(ispin), 1))
381 we_lb = exp(-2.0_dp*(mo_eigenvalues(homo) - mo_eigenvalues(orb))**2)
382 we_gllb = 1.0_dp - we_lb
385 we_gllb = 2.0_dp*we_gllb
388 vxc_tmp(ispin)%array = we_lb*vxc_lb(ispin)%array + &
389 we_gllb*vxc_gllb(ispin)%array
393 1, orb, nrow(ispin), 1)
396 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
398 matrix_v=single_mo_coeff(ispin), &
404 rho=
orbital, rho_gspace=orbital_g, &
407 vxc_saop(ispin)%array = vxc_saop(ispin)%array + &
408 orbital%array*vxc_tmp(ispin)%array
414 DEALLOCATE (coeff_col)
416 DO k = bo(1, 3), bo(2, 3)
417 DO j = bo(1, 2), bo(2, 2)
418 DO i = bo(1, 1), bo(2, 1)
419 IF (rho_r(ispin)%array(i, j, k) > density_cut)
THEN
420 vxc_saop(ispin)%array(i, j, k) = vxc_saop(ispin)%array(i, j, k)/ &
421 rho_r(ispin)%array(i, j, k)
423 vxc_saop(ispin)%array(i, j, k) = 0.0_dp
434 CALL auxbas_pw_pool%give_back_pw(
orbital)
435 CALL auxbas_pw_pool%give_back_pw(orbital_g)
442 IF (oe_corr ==
oe_lb)
THEN
443 CALL pw_copy(vxc_lb(ispin), vxc_saop(ispin))
444 ELSE IF (oe_corr ==
oe_gllb)
THEN
445 CALL pw_copy(vxc_gllb(ispin), vxc_saop(ispin))
447 CALL pw_scale(vxc_saop(ispin), vxc_saop(ispin)%pw_grid%dvol)
449 CALL integrate_v_rspace(v_rspace=vxc_saop(ispin), pmat=rho_struct_ao(ispin), &
450 hmat=ks_matrix(ispin), qs_env=qs_env, &
451 calculate_forces=.false., &
457 CALL auxbas_pw_pool%give_back_pw(vxc_saop(ispin))
458 CALL auxbas_pw_pool%give_back_pw(vxc_gllb(ispin))
459 CALL vxc_lb(ispin)%release()
460 CALL vxc_tmp(ispin)%release()
462 DEALLOCATE (vxc_gllb, vxc_lb, vxc_tmp, orbital_density_matrix)
464 DEALLOCATE (vxc_saop)
474 CALL gapw_add_atomic_saop_pot(qs_env, oe_corr)
484 SUBROUTINE gapw_add_atomic_saop_pot(qs_env, oe_corr)
487 INTEGER,
INTENT(IN) :: oe_corr
489 INTEGER :: ia, iat, iatom, ikind, ir, ispin, na, &
490 natom, nr, ns, nspins, on, orb
491 INTEGER,
DIMENSION(2) :: bo, homo, ncol, nrow
492 INTEGER,
DIMENSION(2, 3) :: bounds
493 INTEGER,
DIMENSION(:),
POINTER :: atom_list
494 LOGICAL :: accint, lsd, paw_atom
495 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: tau
496 REAL(kind=
dp) :: agr, alpha, density_cut, efac, exc, &
497 gradient_cut, tau_cut, we_gllb, we_lb
498 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: fw
499 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: coeff_col, weight_h, weight_s
500 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: dummy, e_uniform, rho_h, rho_s, vtau, &
501 vxc_gllb_h, vxc_gllb_s, vxc_lb_h, vxc_lb_s, vxc_saop_h, vxc_saop_s, vxc_tmp_h, vxc_tmp_s
502 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: drho_h, drho_s, vxg
505 TYPE(
cp_fm_p_type),
ALLOCATABLE,
DIMENSION(:) :: mo_coeff
506 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: single_mo_coeff
507 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, orbital_density_matrix, &
509 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: ksmat, psmat
515 TYPE(
mo_set_type),
DIMENSION(:),
POINTER :: molecular_orbitals
520 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
522 TYPE(
rho_atom_coeff),
DIMENSION(:),
POINTER :: dr_h, dr_s, int_hh, int_ss, r_h, r_s
527 xc_fun_section_tmp, xc_section_orig, &
535 NULLIFY (rho_h, rho_s, vxc_lb_h, vxc_lb_s, vxc_gllb_h, vxc_gllb_s, &
536 vxc_tmp_h, vxc_tmp_s, vtau, dummy, e_uniform, drho_h, drho_s, vxg, atom_list, &
537 atomic_kind_set, qs_kind_set, deriv, atomic_grid, rho_struct_ao, &
538 harmonics, molecular_orbitals, rho_structure, r_h, r_s, dr_h, dr_s, &
539 r_h_d, r_s_d, rho_atom_set, rho_atom, para_env, &
540 mo_eigenvalues, local_rho_set, matrix_ks, &
541 orbital_density_matrix, vxc_saop_h, vxc_saop_s)
545 NULLIFY (dft_control, oce, sab)
549 mos=molecular_orbitals, &
550 atomic_kind_set=atomic_kind_set, &
551 qs_kind_set=qs_kind_set, &
552 rho_atom_set=rho_atom_set, &
553 matrix_ks=matrix_ks, &
554 dft_control=dft_control, &
556 oce=oce, sab_orb=sab)
558 CALL qs_rho_get(rho_structure, rho_ao=rho_struct_ao)
564 accint = dft_control%qs_control%gapw_control%accurate_xcint
586 ns =
SIZE(rho_struct_ao)
587 psmat(1:ns, 1:1) => rho_struct_ao(1:ns)
591 ALLOCATE (mo_coeff(nspins), single_mo_coeff(nspins), mo_eigenvalues(nspins))
597 mo_coeff=mo_coeff(ispin)%matrix, &
598 eigenvalues=mo_eigenvalues(ispin)%array, &
601 mo_coeff(ispin)%matrix%matrix_struct, &
602 "orbital density matrix")
604 nrow_global=nrow(ispin), ncol_global=ncol(ispin))
605 ALLOCATE (orbital_density_matrix(ispin)%matrix)
606 CALL dbcsr_copy(orbital_density_matrix(ispin)%matrix, &
607 rho_struct_ao(ispin)%matrix, &
612 qs_kind_set, dft_control, para_env)
614 DO ikind = 1,
SIZE(atomic_kind_set)
615 CALL get_atomic_kind(atomic_kind_set(ikind), atom_list=atom_list, natom=natom)
617 CALL get_qs_kind(qs_kind_set(ikind), paw_atom=paw_atom, &
618 harmonics=harmonics, grid_atom=atomic_grid)
619 IF (.NOT. paw_atom) cycle
622 na = atomic_grid%ng_sphere
630 gradient_cut, tau_cut)
632 gradient_cut, tau_cut)
634 gradient_cut, tau_cut)
636 gradient_cut, tau_cut)
641 needs%norm_drho = .true.
648 needs_orbs%rho = .true.
649 IF (lsd) needs_orbs%rho_spin = .true.
653 ALLOCATE (rho_h(1:na, 1:nr, 1:nspins), rho_s(1:na, 1:nr, 1:nspins))
654 ALLOCATE (weight_h(1:na, 1:nr), weight_s(1:na, 1:nr))
655 ALLOCATE (vxc_lb_h(1:na, 1:nr, 1:nspins), vxc_lb_s(1:na, 1:nr, 1:nspins))
656 ALLOCATE (vxc_gllb_h(1:na, 1:nr, 1:nspins), vxc_gllb_s(1:na, 1:nr, 1:nspins))
657 ALLOCATE (vxc_tmp_h(1:na, 1:nr, 1:nspins), vxc_tmp_s(1:na, 1:nr, 1:nspins))
658 ALLOCATE (vxc_saop_h(1:na, 1:nr, 1:nspins), vxc_saop_s(1:na, 1:nr, 1:nspins))
659 ALLOCATE (drho_h(1:4, 1:na, 1:nr, 1:nspins), drho_s(1:4, 1:na, 1:nr, 1:nspins))
662 bo =
get_limit(natom, para_env%num_pe, para_env%mepos)
666 weight_h(ia, ir) = atomic_grid%wr(ir)*atomic_grid%wa(ia)
670 on = dft_control%qs_control%gapw_control%oweights
671 alpha = dft_control%qs_control%gapw_control%aw(ikind)
675 agr = 1.0_dp - fw(ir)
677 weight_s(ia, ir) = agr*atomic_grid%wr(ir)*atomic_grid%wa(ia)
682 weight_s(:, :) = weight_h(:, :)
686 iatom = atom_list(iat)
688 rho_atom => rho_atom_set(iatom)
689 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
691 rho_rad_s=r_s, drho_rad_h=dr_h, &
692 drho_rad_s=dr_s, rho_rad_h_d=r_h_d, &
700 ir, r_h, r_s, rho_h, rho_s, &
701 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
704 CALL fill_rho_set(rho_set_h, lsd, nspins, needs, rho_h, drho_h, tau, na, ir)
705 CALL fill_rho_set(rho_set_s, lsd, nspins, needs, rho_s, drho_s, tau, na, ir)
725 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_h, deriv_set, 1, needs, &
726 weight_h, lsd, na, nr, exc, vxc_tmp_h, vxg, vtau)
728 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_s, deriv_set, 1, needs, &
729 weight_s, lsd, na, nr, exc, vxc_tmp_s, vxg, vtau)
743 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_h, deriv_set, 1, needs, &
744 weight_h, lsd, na, nr, exc, vxc_lb_h, vxg, vtau)
745 vxc_lb_h = vxc_lb_h + alpha*vxc_tmp_h
747 dummy => vxc_tmp_h(:, :, ispin:ispin)
748 CALL add_lb_pot(dummy, rho_set_h, lsd, ispin)
749 vxc_lb_h(:, :, ispin) = vxc_lb_h(:, :, ispin) - weight_h(:, :)*vxc_tmp_h(:, :, ispin)
755 cpassert(
ASSOCIATED(deriv))
758 dummy => vxc_gllb_h(:, :, ispin:ispin)
759 CALL calc_2excpbe(dummy, rho_set_h, e_uniform, lsd)
760 vxc_gllb_h(:, :, ispin) = vxc_gllb_h(:, :, ispin)*weight_h(:, :)
762 NULLIFY (deriv, dummy, e_uniform)
768 CALL vxc_of_r_new(xc_fun_section_tmp, rho_set_s, deriv_set, 1, needs, &
769 weight_s, lsd, na, nr, exc, vxc_lb_s, vxg, vtau)
771 vxc_lb_s = vxc_lb_s + alpha*vxc_tmp_s
773 dummy => vxc_tmp_s(:, :, ispin:ispin)
774 CALL add_lb_pot(dummy, rho_set_s, lsd, ispin)
775 vxc_lb_s(:, :, ispin) = vxc_lb_s(:, :, ispin) - weight_s(:, :)*vxc_tmp_s(:, :, ispin)
781 cpassert(
ASSOCIATED(deriv))
784 dummy => vxc_gllb_s(:, :, ispin:ispin)
785 CALL calc_2excpbe(dummy, rho_set_s, e_uniform, lsd)
786 vxc_gllb_s(:, :, ispin) = vxc_gllb_s(:, :, ispin)*weight_s(:, :)
788 NULLIFY (deriv, dummy, e_uniform)
793 vxc_tmp_h = 0.0_dp; vxc_tmp_s = 0.0_dp
797 DO orb = 1, homo(ispin) - 1
799 ALLOCATE (coeff_col(nrow(ispin), 1))
801 efac = k_rho*sqrt(mo_eigenvalues(ispin)%array(homo(ispin)) - &
802 mo_eigenvalues(ispin)%array(orb))
803 IF (.NOT. lsd) efac = 2.0_dp*efac
807 1, orb, nrow(ispin), 1)
810 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
812 matrix_v=single_mo_coeff(ispin), &
816 DEALLOCATE (coeff_col)
822 ns =
SIZE(orbital_density_matrix)
823 psmat(1:ns, 1:1) => orbital_density_matrix(1:ns)
827 rho_atom => local_rho_set%rho_atom_set(iatom)
828 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
829 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
836 ir, r_h, r_s, rho_h, rho_s, &
837 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
840 CALL fill_rho_set(orb_rho_set_h, lsd, nspins, needs_orbs, rho_h, drho_h, tau, na, ir)
841 CALL fill_rho_set(orb_rho_set_s, lsd, nspins, needs_orbs, rho_s, drho_s, tau, na, ir)
846 vxc_tmp_h(:, :, 1) = vxc_tmp_h(:, :, 1) + efac*orb_rho_set_h%rhoa(:, :, 1)
847 vxc_tmp_s(:, :, 1) = vxc_tmp_s(:, :, 1) + efac*orb_rho_set_s%rhoa(:, :, 1)
849 vxc_tmp_h(:, :, 2) = vxc_tmp_h(:, :, 2) + efac*orb_rho_set_h%rhob(:, :, 1)
850 vxc_tmp_s(:, :, 2) = vxc_tmp_s(:, :, 2) + efac*orb_rho_set_s%rhob(:, :, 1)
853 vxc_tmp_h(:, :, 1) = vxc_tmp_h(:, :, 1) + efac*orb_rho_set_h%rho(:, :, 1)
854 vxc_tmp_s(:, :, 1) = vxc_tmp_s(:, :, 1) + efac*orb_rho_set_s%rho(:, :, 1)
864 IF (rho_set_h%rhoa(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
865 vxc_gllb_h(ia, ir, 1) = vxc_gllb_h(ia, ir, 1) + &
866 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 1)/rho_set_h%rhoa(ia, ir, 1)
868 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
869 vxc_gllb_h(ia, ir, 2) = vxc_gllb_h(ia, ir, 2) + &
870 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
872 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
873 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
874 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
876 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
877 vxc_gllb_s(ia, ir, 2) = vxc_gllb_s(ia, ir, 2) + &
878 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
885 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
886 vxc_gllb_h(ia, ir, 1) = vxc_gllb_h(ia, ir, 1) + &
887 weight_h(ia, ir)*vxc_tmp_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
889 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
890 vxc_gllb_s(ia, ir, 1) = vxc_gllb_s(ia, ir, 1) + &
891 weight_s(ia, ir)*vxc_tmp_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
897 vxc_saop_h = 0.0_dp; vxc_saop_s = 0.0_dp
901 DO orb = 1, homo(ispin)
903 ALLOCATE (coeff_col(nrow(ispin), 1))
905 we_lb = exp(-2.0_dp*(mo_eigenvalues(ispin)%array(homo(ispin)) - &
906 mo_eigenvalues(ispin)%array(orb))**2)
907 we_gllb = 1.0_dp - we_lb
910 we_gllb = 2.0_dp*we_gllb
913 vxc_tmp_h(:, :, ispin) = we_lb*vxc_lb_h(:, :, ispin) + &
914 we_gllb*vxc_gllb_h(:, :, ispin)
915 vxc_tmp_s(:, :, ispin) = we_lb*vxc_lb_s(:, :, ispin) + &
916 we_gllb*vxc_gllb_s(:, :, ispin)
920 1, orb, nrow(ispin), 1)
923 CALL dbcsr_set(orbital_density_matrix(ispin)%matrix, 0.0_dp)
925 matrix_v=single_mo_coeff(ispin), &
929 DEALLOCATE (coeff_col)
935 ns =
SIZE(orbital_density_matrix)
936 psmat(1:ns, 1:1) => orbital_density_matrix(1:ns)
940 rho_atom => local_rho_set%rho_atom_set(iatom)
941 NULLIFY (r_h, r_s, dr_h, dr_s, r_h_d, r_s_d)
942 CALL get_rho_atom(rho_atom=rho_atom, rho_rad_h=r_h, rho_rad_s=r_s)
949 ir, r_h, r_s, rho_h, rho_s, &
950 dr_h, dr_s, r_h_d, r_s_d, drho_h, drho_s)
953 CALL fill_rho_set(orb_rho_set_h, lsd, nspins, needs_orbs, rho_h, drho_h, tau, na, ir)
954 CALL fill_rho_set(orb_rho_set_s, lsd, nspins, needs_orbs, rho_s, drho_s, tau, na, ir)
959 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rhoa(:, :, 1)
960 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rhoa(:, :, 1)
962 vxc_saop_h(:, :, 2) = vxc_saop_h(:, :, 2) + vxc_tmp_h(:, :, 2)*orb_rho_set_h%rhob(:, :, 1)
963 vxc_saop_s(:, :, 2) = vxc_saop_s(:, :, 2) + vxc_tmp_s(:, :, 2)*orb_rho_set_s%rhob(:, :, 1)
966 vxc_saop_h(:, :, 1) = vxc_saop_h(:, :, 1) + vxc_tmp_h(:, :, 1)*orb_rho_set_h%rho(:, :, 1)
967 vxc_saop_s(:, :, 1) = vxc_saop_s(:, :, 1) + vxc_tmp_s(:, :, 1)*orb_rho_set_s%rho(:, :, 1)
977 IF (rho_set_h%rhoa(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
978 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rhoa(ia, ir, 1)
980 vxc_saop_h(ia, ir, 1) = 0.0_dp
982 IF (rho_set_h%rhob(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
983 vxc_saop_h(ia, ir, 2) = vxc_saop_h(ia, ir, 2)/rho_set_h%rhob(ia, ir, 1)
985 vxc_saop_h(ia, ir, 2) = 0.0_dp
987 IF (rho_set_s%rhoa(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
988 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rhoa(ia, ir, 1)
990 vxc_saop_s(ia, ir, 1) = 0.0_dp
992 IF (rho_set_s%rhob(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
993 vxc_saop_s(ia, ir, 2) = vxc_saop_s(ia, ir, 2)/rho_set_s%rhob(ia, ir, 1)
995 vxc_saop_s(ia, ir, 2) = 0.0_dp
1002 IF (rho_set_h%rho(ia, ir, 1) > rho_set_h%rho_cutoff)
THEN
1003 vxc_saop_h(ia, ir, 1) = vxc_saop_h(ia, ir, 1)/rho_set_h%rho(ia, ir, 1)
1005 vxc_saop_h(ia, ir, 1) = 0.0_dp
1007 IF (rho_set_s%rho(ia, ir, 1) > rho_set_s%rho_cutoff)
THEN
1008 vxc_saop_s(ia, ir, 1) = vxc_saop_s(ia, ir, 1)/rho_set_s%rho(ia, ir, 1)
1010 vxc_saop_s(ia, ir, 1) = 0.0_dp
1016 rho_atom => rho_atom_set(iatom)
1017 CALL get_rho_atom(rho_atom=rho_atom, ga_vlocal_gb_h=int_hh, ga_vlocal_gb_s=int_ss)
1018 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis, &
1019 harmonics=harmonics, grid_atom=grid_atom)
1020 SELECT CASE (oe_corr)
1022 CALL gavxcgb_nogc(vxc_lb_h, vxc_lb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1024 CALL gavxcgb_nogc(vxc_gllb_h, vxc_gllb_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1026 CALL gavxcgb_nogc(vxc_saop_h, vxc_saop_s, int_hh, int_ss, grid_atom, orb_basis, harmonics, nspins)
1028 cpabort(
"Unknown correction!")
1033 DEALLOCATE (rho_h, rho_s, weight_h, weight_s)
1034 DEALLOCATE (vxc_lb_h, vxc_lb_s)
1035 DEALLOCATE (vxc_gllb_h, vxc_gllb_s)
1036 DEALLOCATE (vxc_tmp_h, vxc_tmp_s)
1037 DEALLOCATE (vxc_saop_h, vxc_saop_s)
1038 DEALLOCATE (drho_h, drho_s)
1049 ns =
SIZE(matrix_ks)
1050 ksmat(1:ns, 1:1) => matrix_ks(1:ns)
1051 ns =
SIZE(rho_struct_ao)
1052 psmat(1:ns, 1:1) => rho_struct_ao(1:ns)
1065 DEALLOCATE (mo_coeff, mo_eigenvalues)
1068 END SUBROUTINE gapw_add_atomic_saop_pot
1077 SUBROUTINE add_lb_pot(pot, rho_set, lsd, spin)
1079 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1081 LOGICAL,
INTENT(IN) :: lsd
1082 INTEGER,
INTENT(IN) :: spin
1084 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp
1087 INTEGER,
DIMENSION(2, 3) :: bo
1088 REAL(kind=
dp) :: n, n_13, x, x2
1090 bo = rho_set%local_bounds
1092 DO k = bo(1, 3), bo(2, 3)
1093 DO j = bo(1, 2), bo(2, 2)
1094 DO i = bo(1, 1), bo(2, 1)
1096 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1097 n = rho_set%rho(i, j, k)/2.0_dp
1099 x = (rho_set%norm_drho(i, j, k)/2.0_dp)/(n*n_13)
1101 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(x + sqrt(x2 + 1.0_dp)))
1105 IF (rho_set%rhoa(i, j, k) > rho_set%rho_cutoff)
THEN
1106 n_13 = rho_set%rhoa_1_3(i, j, k)
1107 x = rho_set%norm_drhoa(i, j, k)/(rho_set%rhoa(i, j, k)*n_13)
1109 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1111 ELSE IF (spin == 2)
THEN
1112 IF (rho_set%rhob(i, j, k) > rho_set%rho_cutoff)
THEN
1113 n_13 = rho_set%rhob_1_3(i, j, k)
1114 x = rho_set%norm_drhob(i, j, k)/(rho_set%rhob(i, j, k)*n_13)
1116 pot(i, j, k) = beta*x2*n_13/(1.0_dp + 3.0_dp*beta*x*log(sqrt(x2 + 1.0_dp) + x))
1124 END SUBROUTINE add_lb_pot
1133 SUBROUTINE calc_2excpbe(pot, rho_set, e_uniform, lsd)
1135 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: pot
1137 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: e_uniform
1138 LOGICAL,
INTENT(IN) :: lsd
1141 INTEGER,
DIMENSION(2, 3) :: bo
1142 REAL(kind=
dp) :: e_unif, rho
1144 bo = rho_set%local_bounds
1146 DO k = bo(1, 3), bo(2, 3)
1147 DO j = bo(1, 2), bo(2, 2)
1148 DO i = bo(1, 1), bo(2, 1)
1150 IF (rho_set%rho(i, j, k) > rho_set%rho_cutoff)
THEN
1151 e_unif = e_uniform(i, j, k)/rho_set%rho(i, j, k)
1157 calc_ecpbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1158 e_unif, rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1160 calc_expbe_r(rho_set%rho(i, j, k), rho_set%norm_drho(i, j, k), &
1161 rho_set%rho_cutoff, rho_set%drho_cutoff)
1163 rho = rho_set%rhoa(i, j, k) + rho_set%rhob(i, j, k)
1164 IF (rho > rho_set%rho_cutoff)
THEN
1165 e_unif = e_uniform(i, j, k)/rho
1171 calc_ecpbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1173 rho_set%rho_cutoff, rho_set%drho_cutoff) + &
1175 calc_expbe_u(rho_set%rhoa(i, j, k), rho_set%rhob(i, j, k), rho_set%norm_drho(i, j, k), &
1176 rho_set%rho_cutoff, rho_set%drho_cutoff)
1182 END SUBROUTINE calc_2excpbe
1194 FUNCTION calc_ecpbe_u(ra, rb, ngr, ec_unif, rc, ngrc)
RESULT(res)
1196 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, ec_unif, rc, ngrc
1197 REAL(kind=
dp) :: res
1199 REAL(kind=
dp),
PARAMETER :: ob3 = 1.0_dp/3.0_dp, tb3 = 2.0_dp/3.0_dp
1201 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, phi, phi3, r, t2, &
1206 IF (r > rc .AND. ngr > ngrc)
THEN
1208 IF (zeta > 1.0_dp) zeta = 1.0_dp
1209 IF (zeta < -1.0_dp) zeta = -1.0_dp
1210 phi = ((1.0_dp + zeta)**tb3 + (1.0_dp - zeta)**tb3)/2.0_dp
1212 kf = (3.0_dp*r*
pi*
pi)**ob3
1213 ks = sqrt(4.0_dp*kf/
pi)
1214 t2 = (ngr/(2.0_dp*phi*ks*r))**2
1215 a = beta_ec/gamma_saop/(exp(-ec_unif/(gamma_saop*phi3)) - 1.0_dp)
1217 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1218 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1222 END FUNCTION calc_ecpbe_u
1233 FUNCTION calc_ecpbe_r(r, ngr, ec_unif, rc, ngrc)
RESULT(res)
1235 REAL(kind=
dp),
INTENT(in) :: r, ngr, ec_unif, rc, ngrc
1236 REAL(kind=
dp) :: res
1238 REAL(kind=
dp) :: a, at2, h, kf, kl, ks, t2
1241 IF (r > rc .AND. ngr > ngrc)
THEN
1242 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1243 ks = sqrt(4.0_dp*kf/
pi)
1244 t2 = (ngr/(2.0_dp*ks*r))**2
1245 a = beta_ec/gamma_saop/(exp(-ec_unif/gamma_saop) - 1.0_dp)
1247 kl = (1.0_dp + at2)/(1.0_dp + at2 + at2*at2)
1248 h = gamma_saop*log(1.0_dp + beta_ec/gamma_saop*t2*kl)
1252 END FUNCTION calc_ecpbe_r
1263 FUNCTION calc_expbe_u(ra, rb, ngr, rc, ngrc)
RESULT(res)
1265 REAL(kind=
dp),
INTENT(in) :: ra, rb, ngr, rc, ngrc
1266 REAL(kind=
dp) :: res
1271 res = calc_expbe_r(r, ngr, rc, ngrc)
1273 END FUNCTION calc_expbe_u
1283 FUNCTION calc_expbe_r(r, ngr, rc, ngrc)
RESULT(res)
1285 REAL(kind=
dp),
INTENT(in) :: r, ngr, rc, ngrc
1286 REAL(kind=
dp) :: res
1288 REAL(kind=
dp) :: ex_unif, fx, kf, s
1291 kf = (3.0_dp*r*
pi*
pi)**(1.0_dp/3.0_dp)
1292 ex_unif = -3.0_dp*kf/(4.0_dp*
pi)
1294 IF (ngr > ngrc)
THEN
1295 s = ngr/(2.0_dp*kf*r)
1296 fx = fx + kappa - kappa/(1.0_dp + mu*s*s/kappa)
1303 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, matrix_vhxc, 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, hund_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, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, 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, cmo_coeff)
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...
Support routines for integrals of the Vxc/Fxc/Gxc potentials calculated for the atomic density in the...
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)
...
subroutine, public calc_weight_function(fun, r2, order, alpha)
Calculates the radial weight function for accurate XC integration.
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