1653 pw_pool, xc_section, &
1654 do_triplet, calc_virial, virial_xc, deriv_set)
1656 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: v_xc, v_tau
1658 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: rho1_r, tau1_r
1659 TYPE(
pw_c1d_gs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: rho1_g
1662 LOGICAL,
INTENT(IN) :: do_triplet
1663 LOGICAL,
INTENT(IN),
OPTIONAL :: calc_virial
1664 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(INOUT), &
1665 OPTIONAL :: virial_xc
1668 CHARACTER(len=*),
PARAMETER :: routinen =
'xc_calc_2nd_deriv_numerical'
1669 REAL(kind=
dp),
DIMENSION(-4:4, 4),
PARAMETER :: &
1670 weights = reshape([0.0_dp, 0.0_dp, 0.0_dp, -0.5_dp, 0.0_dp, 0.5_dp, 0.0_dp, 0.0_dp, 0.0_dp, &
1671 0.0_dp, 0.0_dp, 1.0_dp/12.0_dp, -2.0_dp/3.0_dp, 0.0_dp, 2.0_dp/3.0_dp, -1.0_dp/12.0_dp, 0.0_dp, 0.0_dp, &
1672 0.0_dp, -1.0_dp/60.0_dp, 0.15_dp, -0.75_dp, 0.0_dp, 0.75_dp, -0.15_dp, 1.0_dp/60.0_dp, 0.0_dp, &
1673 1.0_dp/280.0_dp, -4.0_dp/105.0_dp, 0.2_dp, -0.8_dp, 0.0_dp, 0.8_dp, -0.2_dp, 4.0_dp/105.0_dp, -1.0_dp/280.0_dp], [9, 4])
1675 INTEGER :: handle, idir, ispin, nspins, istep, nsteps
1676 INTEGER,
DIMENSION(2, 3) :: bo
1677 LOGICAL :: gradient_f, lsd, my_calc_virial, tau_f, laplace_f, rho_f
1678 REAL(kind=
dp) :: exc, gradient_cut, h, weight, step, rho_cutoff
1679 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: dr1dr, dra1dra, drb1drb
1680 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_dummy
1681 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: norm_drho, norm_drho2, norm_drho2a, &
1682 norm_drho2b, norm_drhoa, norm_drhob, &
1683 rho, rho1, rho1a, rho1b, rhoa, rhob, &
1684 tau_a, tau_b, tau, tau1, tau1a, tau1b, laplace, laplace1, &
1685 laplacea, laplaceb, laplace1a, laplace1b, &
1686 laplace2, laplace2a, laplace2b, deriv_data
1687 TYPE(
cp_3d_r_cp_type),
DIMENSION(3) :: drho, drho1, drho1a, drho1b, drhoa, drhob
1692 TYPE(
pw_r3d_rs_type) :: virial_pw, v_laplace, v_laplacea, v_laplaceb
1698 CALL timeset(routinen, handle)
1700 my_calc_virial = .false.
1701 IF (
PRESENT(calc_virial) .AND.
PRESENT(virial_xc)) my_calc_virial = calc_virial
1705 NULLIFY (tau, tau_r, tau_a, tau_b)
1709 IF (nsteps < lbound(weights, 2) .OR. nspins > ubound(weights, 2))
THEN
1710 cpabort(
"The number of steps must be a value from 1 to 4.")
1713 IF (nspins == 2)
THEN
1714 NULLIFY (vxc_rho, rho_g, vxc_tau)
1716 DO ispin = 1, nspins
1717 CALL pw_pool%create_pw(rho_r(ispin))
1719 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1721 DO ispin = 1, nspins
1722 CALL pw_pool%create_pw(tau_r(ispin))
1725 CALL xc_rho_set_get(rho_set, can_return_null=.true., rhoa=rhoa, rhob=rhob, tau_a=tau_a, tau_b=tau_b)
1726 DO istep = -nsteps, nsteps
1727 IF (istep == 0) cycle
1728 weight = weights(istep, nsteps)/h
1729 step = real(istep,
dp)*h
1730 CALL calc_resp_potential_numer_ab(rho_r, rho_g, rho1_r, rhoa, rhob, vxc_rho, &
1731 tau_r, tau1_r, tau_a, tau_b, vxc_tau, xc_section, pw_pool, step)
1732 DO ispin = 1, nspins
1733 CALL pw_axpy(vxc_rho(ispin), v_xc(ispin), weight)
1734 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1735 CALL pw_axpy(vxc_tau(ispin), v_tau(ispin), weight)
1738 DO ispin = 1, nspins
1739 CALL vxc_rho(ispin)%release()
1741 DEALLOCATE (vxc_rho)
1742 IF (
ASSOCIATED(vxc_tau))
THEN
1743 DO ispin = 1, nspins
1744 CALL vxc_tau(ispin)%release()
1746 DEALLOCATE (vxc_tau)
1749 ELSE IF (nspins == 1 .AND. do_triplet)
THEN
1750 NULLIFY (vxc_rho, vxc_tau, rho_g)
1753 CALL pw_pool%create_pw(rho_r(ispin))
1755 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1757 DO ispin = 1, nspins
1758 CALL pw_pool%create_pw(tau_r(ispin))
1761 CALL xc_rho_set_get(rho_set, can_return_null=.true., rhoa=rhoa, rhob=rhob, tau_a=tau_a, tau_b=tau_b)
1762 DO istep = -nsteps, nsteps
1763 IF (istep == 0) cycle
1764 weight = weights(istep, nsteps)/h
1765 step = real(istep,
dp)*h
1769 rho_r(1)%array(:, :, :) = rhoa(:, :, :) + step*rho1_r(1)%array(:, :, :)
1772 rho_r(2)%array(:, :, :) = rhob(:, :, :)
1774 IF (
ASSOCIATED(tau1_r))
THEN
1776 tau_r(1)%array(:, :, :) = tau_a(:, :, :) + step*tau1_r(1)%array(:, :, :)
1779 tau_r(2)%array(:, :, :) = tau_b(:, :, :)
1783 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1784 pw_pool, .false., virial_dummy)
1785 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1786 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1787 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1790 CALL vxc_rho(ispin)%release()
1792 DEALLOCATE (vxc_rho)
1793 IF (
ASSOCIATED(vxc_tau))
THEN
1795 CALL vxc_tau(ispin)%release()
1797 DEALLOCATE (vxc_tau)
1802 rho_r(1)%array(:, :, :) = rhoa(:, :, :)
1805 rho_r(2)%array(:, :, :) = rhob(:, :, :) + step*rho1_r(1)%array(:, :, :)
1807 IF (
ASSOCIATED(tau1_r))
THEN
1809 tau_r(1)%array(:, :, :) = tau_a(:, :, :)
1812 tau_r(2)%array(:, :, :) = tau_b(:, :, :) + step*tau1_r(1)%array(:, :, :)
1816 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1817 pw_pool, .false., virial_dummy)
1818 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1819 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1820 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1823 CALL vxc_rho(ispin)%release()
1825 DEALLOCATE (vxc_rho)
1826 IF (
ASSOCIATED(vxc_tau))
THEN
1828 CALL vxc_tau(ispin)%release()
1830 DEALLOCATE (vxc_tau)
1834 NULLIFY (vxc_rho, rho_r, rho_g, vxc_tau, tau_r, tau)
1836 CALL pw_pool%create_pw(rho_r(1))
1837 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1839 CALL pw_pool%create_pw(tau_r(1))
1841 CALL xc_rho_set_get(rho_set, can_return_null=.true., rho=rho, tau=tau)
1842 DO istep = -nsteps, nsteps
1843 IF (istep == 0) cycle
1844 weight = weights(istep, nsteps)/h
1845 step = real(istep,
dp)*h
1848 rho_r(1)%array(:, :, :) = rho(:, :, :) + step*rho1_r(1)%array(:, :, :)
1850 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(tau) .AND.
ASSOCIATED(tau1_r))
THEN
1852 tau_r(1)%array(:, :, :) = tau(:, :, :) + step*tau1_r(1)%array(:, :, :)
1856 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1857 pw_pool, .false., virial_dummy)
1858 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1859 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1860 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1862 CALL vxc_rho(1)%release()
1863 DEALLOCATE (vxc_rho)
1864 IF (
ASSOCIATED(vxc_tau))
THEN
1865 CALL vxc_tau(1)%release()
1866 DEALLOCATE (vxc_tau)
1871 IF (my_calc_virial)
THEN
1873 IF (nspins == 1 .AND. do_triplet)
THEN
1877 CALL check_for_derivatives(deriv_set, (nspins == 2), rho_f, gradient_f, tau_f, laplace_f)
1883 IF (gradient_f)
THEN
1884 bo = rho_set%local_bounds
1887 CALL allocate_pw(virial_pw, pw_pool, bo)
1894 drho_cutoff=gradient_cut, &
1907 CALL xc_rho_set_get(rho_set, drhoa=drhoa, drhob=drhob, norm_drho=norm_drho, &
1908 norm_drhoa=norm_drhoa, norm_drhob=norm_drhob, tau_a=tau_a, tau_b=tau_b, &
1909 laplace_rhoa=laplacea, laplace_rhob=laplaceb, can_return_null=.true.)
1910 CALL xc_rho_set_get(rho1_set, rhoa=rho1a, rhob=rho1b, drhoa=drho1a, drhob=drho1b, laplace_rhoa=laplace1a, &
1911 laplace_rhob=laplace1b, can_return_null=.true.)
1913 CALL calc_drho_from_ab(drho, drhoa, drhob)
1914 CALL calc_drho_from_ab(drho1, drho1a, drho1b)
1916 CALL xc_rho_set_get(rho_set, drho=drho, norm_drho=norm_drho, tau=tau, laplace_rho=laplace, can_return_null=.true.)
1917 CALL xc_rho_set_get(rho1_set, rho=rho1, drho=drho1, laplace_rho=laplace1, can_return_null=.true.)
1920 CALL prepare_dr1dr(dr1dr, drho, drho1)
1923 CALL prepare_dr1dr(dra1dra, drhoa, drho1a)
1924 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
1926 CALL allocate_pw(v_drho, pw_pool, bo)
1927 CALL allocate_pw(v_drhoa, pw_pool, bo)
1928 CALL allocate_pw(v_drhob, pw_pool, bo)
1930 IF (
ASSOCIATED(norm_drhoa))
CALL apply_drho(deriv_set, [
deriv_norm_drhoa], virial_pw, drhoa, drho1a, virial_xc, &
1931 norm_drhoa, gradient_cut, dra1dra, v_drhoa%array)
1932 IF (
ASSOCIATED(norm_drhob))
CALL apply_drho(deriv_set, [
deriv_norm_drhob], virial_pw, drhob, drho1b, virial_xc, &
1933 norm_drhob, gradient_cut, drb1drb, v_drhob%array)
1934 IF (
ASSOCIATED(norm_drho))
CALL apply_drho(deriv_set, [
deriv_norm_drho], virial_pw, drho, drho1, virial_xc, &
1935 norm_drho, gradient_cut, dr1dr, v_drho%array)
1938 cpassert(
ASSOCIATED(deriv_data))
1939 virial_pw%array(:, :, :) = -rho1a(:, :, :)
1940 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1942 CALL allocate_pw(v_laplacea, pw_pool, bo)
1945 cpassert(
ASSOCIATED(deriv_data))
1946 virial_pw%array(:, :, :) = -rho1b(:, :, :)
1947 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1949 CALL allocate_pw(v_laplaceb, pw_pool, bo)
1955 CALL allocate_pw(v_drho, pw_pool, bo)
1957 CALL apply_drho(deriv_set, [
deriv_norm_drho], virial_pw, drho, drho1, virial_xc, &
1958 norm_drho, gradient_cut, dr1dr, v_drho%array)
1961 cpassert(
ASSOCIATED(deriv_data))
1962 virial_pw%array(:, :, :) = -rho1(:, :, :)
1963 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1965 CALL allocate_pw(v_laplace, pw_pool, bo)
1971 rho_r(1)%array = rhoa
1972 rho_r(2)%array = rhob
1974 rho_r(1)%array = rho
1976 IF (
ASSOCIATED(tau1_r))
THEN
1978 tau_r(1)%array = tau_a
1979 tau_r(2)%array = tau_b
1981 tau_r(1)%array = tau
1992 rho_cutoff=rho_cutoff, &
2003 CALL xc_rho_set_get(rho1_set, rhoa=rho1a, rhob=rho1b, tau_a=tau1a, tau_b=tau1b, &
2004 laplace_rhoa=laplace1a, laplace_rhob=laplace1b, can_return_null=.true.)
2005 CALL xc_rho_set_get(rho2_set, norm_drhoa=norm_drho2a, norm_drhob=norm_drho2b, &
2006 norm_drho=norm_drho2, laplace_rhoa=laplace2a, laplace_rhob=laplace2b, can_return_null=.true.)
2008 DO istep = -nsteps, nsteps
2009 IF (istep == 0) cycle
2010 weight = weights(istep, nsteps)/h
2011 step = real(istep,
dp)*h
2012 IF (
ASSOCIATED(norm_drhoa))
THEN
2013 CALL get_derivs_rho(norm_drho2a, norm_drhoa, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2014 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2015 norm_drhoa, gradient_cut, weight, rho1a, v_drhoa%array)
2016 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2017 norm_drhoa, gradient_cut, weight, rho1b, v_drhoa%array)
2019 norm_drhoa, gradient_cut, weight, dra1dra, v_drhoa%array)
2021 norm_drhoa, gradient_cut, weight, dra1dra, drb1drb, v_drhoa%array, v_drhob%array)
2023 norm_drhoa, gradient_cut, weight, dra1dra, dr1dr, v_drhoa%array, v_drho%array)
2025 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2026 norm_drhoa, gradient_cut, weight, tau1a, v_drhoa%array)
2027 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2028 norm_drhoa, gradient_cut, weight, tau1b, v_drhoa%array)
2032 norm_drhoa, gradient_cut, weight, laplace1a, v_drhoa%array)
2034 norm_drhoa, gradient_cut, weight, laplace1b, v_drhoa%array)
2038 IF (
ASSOCIATED(norm_drhob))
THEN
2039 CALL get_derivs_rho(norm_drho2b, norm_drhob, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2040 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2041 norm_drhob, gradient_cut, weight, rho1a, v_drhob%array)
2042 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2043 norm_drhob, gradient_cut, weight, rho1b, v_drhob%array)
2045 norm_drhob, gradient_cut, weight, drb1drb, v_drhob%array)
2047 norm_drhob, gradient_cut, weight, drb1drb, dra1dra, v_drhob%array, v_drhoa%array)
2049 norm_drhob, gradient_cut, weight, drb1drb, dr1dr, v_drhob%array, v_drho%array)
2051 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2052 norm_drhob, gradient_cut, weight, tau1a, v_drhob%array)
2053 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2054 norm_drhob, gradient_cut, weight, tau1b, v_drhob%array)
2058 norm_drhob, gradient_cut, weight, laplace1a, v_drhob%array)
2060 norm_drhob, gradient_cut, weight, laplace1b, v_drhob%array)
2064 IF (
ASSOCIATED(norm_drho))
THEN
2065 CALL get_derivs_rho(norm_drho2, norm_drho, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2066 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2067 norm_drho, gradient_cut, weight, rho1a, v_drho%array)
2068 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2069 norm_drho, gradient_cut, weight, rho1b, v_drho%array)
2071 norm_drho, gradient_cut, weight, dr1dr, v_drho%array)
2073 norm_drho, gradient_cut, weight, dr1dr, dra1dra, v_drho%array, v_drhoa%array)
2075 norm_drho, gradient_cut, weight, dr1dr, drb1drb, v_drho%array, v_drhob%array)
2077 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2078 norm_drho, gradient_cut, weight, tau1a, v_drho%array)
2079 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2080 norm_drho, gradient_cut, weight, tau1b, v_drho%array)
2084 norm_drho, gradient_cut, weight, laplace1a, v_drho%array)
2086 norm_drho, gradient_cut, weight, laplace1b, v_drho%array)
2092 CALL get_derivs_rho(laplace2a, laplacea, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2095 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_rhoa], bo, &
2096 weight, rho1a, v_laplacea%array)
2097 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_rhob], bo, &
2098 weight, rho1b, v_laplacea%array)
2099 IF (
ASSOCIATED(norm_drho))
THEN
2100 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drho], bo, &
2101 weight, dr1dr, v_laplacea%array)
2103 IF (
ASSOCIATED(norm_drhoa))
THEN
2104 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drhoa], bo, &
2105 weight, dra1dra, v_laplacea%array)
2107 IF (
ASSOCIATED(norm_drhob))
THEN
2108 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drhob], bo, &
2109 weight, drb1drb, v_laplacea%array)
2112 IF (
ASSOCIATED(tau1a))
THEN
2113 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_tau_a], bo, &
2114 weight, tau1a, v_laplacea%array)
2116 IF (
ASSOCIATED(tau1b))
THEN
2117 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_tau_b], bo, &
2118 weight, tau1b, v_laplacea%array)
2122 weight, laplace1a, v_laplacea%array)
2125 weight, laplace1b, v_laplacea%array)
2128 CALL get_derivs_rho(laplace2b, laplaceb, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2131 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_rhoa], bo, &
2132 weight, rho1a, v_laplaceb%array)
2133 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_rhob], bo, &
2134 weight, rho1b, v_laplaceb%array)
2135 IF (
ASSOCIATED(norm_drho))
THEN
2136 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drho], bo, &
2137 weight, dr1dr, v_laplaceb%array)
2139 IF (
ASSOCIATED(norm_drhoa))
THEN
2140 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drhoa], bo, &
2141 weight, dra1dra, v_laplaceb%array)
2143 IF (
ASSOCIATED(norm_drhob))
THEN
2144 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drhob], bo, &
2145 weight, drb1drb, v_laplaceb%array)
2149 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_tau_a], bo, &
2150 weight, tau1a, v_laplaceb%array)
2151 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_tau_b], bo, &
2152 weight, tau1b, v_laplaceb%array)
2156 weight, laplace1a, v_laplaceb%array)
2159 weight, laplace1b, v_laplaceb%array)
2163 CALL virial_drho_drho(virial_pw, drhoa, v_drhoa, virial_xc)
2164 CALL virial_drho_drho(virial_pw, drhob, v_drhob, virial_xc)
2165 CALL virial_drho_drho(virial_pw, drho, v_drho, virial_xc)
2167 CALL deallocate_pw(v_drho, pw_pool)
2168 CALL deallocate_pw(v_drhoa, pw_pool)
2169 CALL deallocate_pw(v_drhob, pw_pool)
2172 virial_pw%array(:, :, :) = -rhoa(:, :, :)
2173 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplacea%array)
2174 CALL deallocate_pw(v_laplacea, pw_pool)
2176 virial_pw%array(:, :, :) = -rhob(:, :, :)
2177 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplaceb%array)
2178 CALL deallocate_pw(v_laplaceb, pw_pool)
2181 CALL deallocate_pw(virial_pw, pw_pool)
2184 DEALLOCATE (drho(idir)%array)
2185 DEALLOCATE (drho1(idir)%array)
2187 DEALLOCATE (dra1dra, drb1drb)
2190 CALL xc_rho_set_get(rho1_set, rho=rho1, tau=tau1, laplace_rho=laplace1, can_return_null=.true.)
2191 CALL xc_rho_set_get(rho2_set, norm_drho=norm_drho2, laplace_rho=laplace2, can_return_null=.true.)
2193 DO istep = -nsteps, nsteps
2194 IF (istep == 0) cycle
2195 weight = weights(istep, nsteps)/h
2196 step = real(istep,
dp)*h
2197 CALL get_derivs_rho(norm_drho2, norm_drho, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2200 CALL update_deriv_rho(deriv_set1, [
deriv_rho], bo, &
2201 norm_drho, gradient_cut, weight, rho1, v_drho%array)
2203 norm_drho, gradient_cut, weight, dr1dr, v_drho%array)
2206 CALL update_deriv_rho(deriv_set1, [
deriv_tau], bo, &
2207 norm_drho, gradient_cut, weight, tau1, v_drho%array)
2211 norm_drho, gradient_cut, weight, laplace1, v_drho%array)
2213 CALL get_derivs_rho(laplace2, laplace, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2216 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_rho], bo, &
2217 weight, rho1, v_laplace%array)
2218 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_norm_drho], bo, &
2219 weight, dr1dr, v_laplace%array)
2222 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_tau], bo, &
2223 weight, tau1, v_laplace%array)
2227 weight, laplace1, v_laplace%array)
2232 CALL virial_drho_drho(virial_pw, drho, v_drho, virial_xc)
2234 CALL deallocate_pw(v_drho, pw_pool)
2237 virial_pw%array(:, :, :) = -rho(:, :, :)
2238 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace%array)
2239 CALL deallocate_pw(v_laplace, pw_pool)
2242 CALL deallocate_pw(virial_pw, pw_pool)
2255 DO ispin = 1,
SIZE(rho_r)
2256 CALL pw_pool%give_back_pw(rho_r(ispin))
2260 IF (
ASSOCIATED(tau_r))
THEN
2261 DO ispin = 1,
SIZE(tau_r)
2262 CALL pw_pool%give_back_pw(tau_r(ispin))
2267 CALL timestop(handle)
2633 LOGICAL,
INTENT(IN),
OPTIONAL :: gapw
2634 REAL(kind=
dp),
DIMENSION(:, :, :, :),
OPTIONAL, &
2636 REAL(kind=
dp),
INTENT(in),
OPTIONAL :: tddfpt_fac
2637 LOGICAL,
INTENT(IN),
OPTIONAL :: compute_virial
2638 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(INOUT), &
2639 OPTIONAL :: virial_xc
2641 CHARACTER(len=*),
PARAMETER :: routinen =
'xc_calc_2nd_deriv_analytical'
2643 INTEGER :: handle, i, ia, idir, ir, ispin, j, jdir, &
2644 k, nspins, xc_deriv_method_id
2645 INTEGER,
DIMENSION(2, 3) :: bo
2646 LOGICAL :: gradient_f, lsd, my_compute_virial, &
2647 my_gapw, tau_f, laplace_f, rho_f
2648 REAL(kind=
dp) ::
fac, gradient_cut, tmp, factor2
2649 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: dr1dr, dra1dra, drb1drb
2650 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: deriv_data, e_drhoa, e_drhob, &
2651 e_drho, norm_drho, norm_drhoa, &
2652 norm_drhob, rho1, rho1a, rho1b, &
2653 tau1, tau1a, tau1b, laplace1, laplace1a, laplace1b, &
2655 TYPE(
cp_3d_r_cp_type),
DIMENSION(3) :: drho, drho1, drho1a, drho1b, drhoa, drhob
2656 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
ALLOCATABLE :: v_drhoa, v_drhob, v_drho, v_laplace
2662 CALL timeset(routinen, handle)
2664 NULLIFY (e_drhoa, e_drhob, e_drho)
2667 IF (
PRESENT(gapw)) my_gapw = gapw
2669 my_compute_virial = .false.
2670 IF (
PRESENT(compute_virial)) my_compute_virial = compute_virial
2672 cpassert(
ASSOCIATED(v_xc))
2673 cpassert(
ASSOCIATED(xc_section))
2675 cpassert(
PRESENT(vxg))
2677 IF (my_compute_virial)
THEN
2678 cpassert(
PRESENT(virial_xc))
2682 i_val=xc_deriv_method_id)
2685 lsd =
ASSOCIATED(rho_set%rhoa)
2688 IF (
PRESENT(tddfpt_fac))
fac = tddfpt_fac
2689 IF (
PRESENT(tddfpt_fac)) factor2 = tddfpt_fac
2691 bo = rho_set%local_bounds
2693 CALL check_for_derivatives(deriv_set, lsd, rho_f, gradient_f, tau_f, laplace_f)
2696 cpassert(
ASSOCIATED(v_xc_tau))
2699 IF (gradient_f)
THEN
2700 ALLOCATE (v_drho_r(3, nspins), v_drho(nspins))
2701 DO ispin = 1, nspins
2703 CALL allocate_pw(v_drho_r(idir, ispin), pw_pool, bo)
2705 CALL allocate_pw(v_drho(ispin), pw_pool, bo)
2709 IF (
ASSOCIATED(pw_pool))
THEN
2710 CALL pw_pool%create_pw(tmp_g)
2711 CALL pw_pool%create_pw(vxc_g)
2714 cpabort(
"XC_DERIV method is not implemented in GAPW")
2719 DO ispin = 1, nspins
2720 v_xc(ispin)%array = 0.0_dp
2724 DO ispin = 1, nspins
2725 v_xc_tau(ispin)%array = 0.0_dp
2729 IF (laplace_f .AND. my_gapw) &
2730 cpabort(
"Laplace-dependent functional not implemented with GAPW!")
2732 IF (my_compute_virial .AND. (gradient_f .OR. laplace_f))
CALL allocate_pw(virial_pw, pw_pool, bo)
2742 IF (gradient_f)
THEN
2744 norm_drho=norm_drho, norm_drhoa=norm_drhoa, norm_drhob=norm_drhob)
2747 CALL calc_drho_from_ab(drho, drhoa, drhob)
2748 CALL calc_drho_from_ab(drho1, drho1a, drho1b)
2750 CALL prepare_dr1dr(dra1dra, drhoa, drho1a)
2751 IF (nspins /= 1)
THEN
2752 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
2753 CALL prepare_dr1dr(dr1dr, drho, drho1)
2755 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
2756 CALL prepare_dr1dr_ab(dr1dr, drhoa, drhob, drho1a, drho1b,
fac)
2759 ALLOCATE (v_drhoa(nspins), v_drhob(nspins))
2760 DO ispin = 1, nspins
2761 CALL allocate_pw(v_drhoa(ispin), pw_pool, bo)
2762 CALL allocate_pw(v_drhob(ispin), pw_pool, bo)
2768 CALL xc_rho_set_get(rho1_set, laplace_rhoa=laplace1a, laplace_rhob=laplace1b)
2770 ALLOCATE (v_laplace(nspins))
2771 DO ispin = 1, nspins
2772 CALL allocate_pw(v_laplace(ispin), pw_pool, bo)
2775 IF (my_compute_virial)
CALL xc_rho_set_get(rho_set, rhoa=rhoa, rhob=rhob)
2782 IF (nspins /= 1)
THEN
2785 IF (
ASSOCIATED(deriv_att))
THEN
2789 DO k = bo(1, 3), bo(2, 3)
2790 DO j = bo(1, 2), bo(2, 2)
2791 DO i = bo(1, 1), bo(2, 1)
2792 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2793 deriv_data(i, j, k)*rho1a(i, j, k)
2799 IF (
ASSOCIATED(deriv_att))
THEN
2803 DO k = bo(1, 3), bo(2, 3)
2804 DO j = bo(1, 2), bo(2, 2)
2805 DO i = bo(1, 1), bo(2, 1)
2806 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2807 deriv_data(i, j, k)*rho1b(i, j, k)
2813 IF (
ASSOCIATED(deriv_att))
THEN
2817 DO k = bo(1, 3), bo(2, 3)
2818 DO j = bo(1, 2), bo(2, 2)
2819 DO i = bo(1, 1), bo(2, 1)
2820 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2821 deriv_data(i, j, k)*dr1dr(i, j, k)
2827 IF (
ASSOCIATED(deriv_att))
THEN
2831 DO k = bo(1, 3), bo(2, 3)
2832 DO j = bo(1, 2), bo(2, 2)
2833 DO i = bo(1, 1), bo(2, 1)
2834 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2835 deriv_data(i, j, k)*dra1dra(i, j, k)
2841 IF (
ASSOCIATED(deriv_att))
THEN
2845 DO k = bo(1, 3), bo(2, 3)
2846 DO j = bo(1, 2), bo(2, 2)
2847 DO i = bo(1, 1), bo(2, 1)
2848 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2849 deriv_data(i, j, k)*drb1drb(i, j, k)
2855 IF (
ASSOCIATED(deriv_att))
THEN
2859 DO k = bo(1, 3), bo(2, 3)
2860 DO j = bo(1, 2), bo(2, 2)
2861 DO i = bo(1, 1), bo(2, 1)
2862 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2863 deriv_data(i, j, k)*tau1a(i, j, k)
2869 IF (
ASSOCIATED(deriv_att))
THEN
2873 DO k = bo(1, 3), bo(2, 3)
2874 DO j = bo(1, 2), bo(2, 2)
2875 DO i = bo(1, 1), bo(2, 1)
2876 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2877 deriv_data(i, j, k)*tau1b(i, j, k)
2883 IF (
ASSOCIATED(deriv_att))
THEN
2887 DO k = bo(1, 3), bo(2, 3)
2888 DO j = bo(1, 2), bo(2, 2)
2889 DO i = bo(1, 1), bo(2, 1)
2890 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2891 deriv_data(i, j, k)*laplace1a(i, j, k)
2897 IF (
ASSOCIATED(deriv_att))
THEN
2901 DO k = bo(1, 3), bo(2, 3)
2902 DO j = bo(1, 2), bo(2, 2)
2903 DO i = bo(1, 1), bo(2, 1)
2904 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2905 deriv_data(i, j, k)*laplace1b(i, j, k)
2913 IF (
ASSOCIATED(deriv_att))
THEN
2917 DO k = bo(1, 3), bo(2, 3)
2918 DO j = bo(1, 2), bo(2, 2)
2919 DO i = bo(1, 1), bo(2, 1)
2920 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2921 deriv_data(i, j, k)*rho1a(i, j, k)
2927 IF (
ASSOCIATED(deriv_att))
THEN
2931 DO k = bo(1, 3), bo(2, 3)
2932 DO j = bo(1, 2), bo(2, 2)
2933 DO i = bo(1, 1), bo(2, 1)
2934 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2935 deriv_data(i, j, k)*rho1b(i, j, k)
2941 IF (
ASSOCIATED(deriv_att))
THEN
2945 DO k = bo(1, 3), bo(2, 3)
2946 DO j = bo(1, 2), bo(2, 2)
2947 DO i = bo(1, 1), bo(2, 1)
2948 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2949 deriv_data(i, j, k)*dr1dr(i, j, k)
2955 IF (
ASSOCIATED(deriv_att))
THEN
2959 DO k = bo(1, 3), bo(2, 3)
2960 DO j = bo(1, 2), bo(2, 2)
2961 DO i = bo(1, 1), bo(2, 1)
2962 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2963 deriv_data(i, j, k)*dra1dra(i, j, k)
2969 IF (
ASSOCIATED(deriv_att))
THEN
2973 DO k = bo(1, 3), bo(2, 3)
2974 DO j = bo(1, 2), bo(2, 2)
2975 DO i = bo(1, 1), bo(2, 1)
2976 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2977 deriv_data(i, j, k)*drb1drb(i, j, k)
2983 IF (
ASSOCIATED(deriv_att))
THEN
2987 DO k = bo(1, 3), bo(2, 3)
2988 DO j = bo(1, 2), bo(2, 2)
2989 DO i = bo(1, 1), bo(2, 1)
2990 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2991 deriv_data(i, j, k)*tau1a(i, j, k)
2997 IF (
ASSOCIATED(deriv_att))
THEN
3001 DO k = bo(1, 3), bo(2, 3)
3002 DO j = bo(1, 2), bo(2, 2)
3003 DO i = bo(1, 1), bo(2, 1)
3004 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3005 deriv_data(i, j, k)*tau1b(i, j, k)
3011 IF (
ASSOCIATED(deriv_att))
THEN
3015 DO k = bo(1, 3), bo(2, 3)
3016 DO j = bo(1, 2), bo(2, 2)
3017 DO i = bo(1, 1), bo(2, 1)
3018 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3019 deriv_data(i, j, k)*laplace1a(i, j, k)
3025 IF (
ASSOCIATED(deriv_att))
THEN
3029 DO k = bo(1, 3), bo(2, 3)
3030 DO j = bo(1, 2), bo(2, 2)
3031 DO i = bo(1, 1), bo(2, 1)
3032 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3033 deriv_data(i, j, k)*laplace1b(i, j, k)
3041 IF (
ASSOCIATED(deriv_att))
THEN
3045 DO k = bo(1, 3), bo(2, 3)
3046 DO j = bo(1, 2), bo(2, 2)
3047 DO i = bo(1, 1), bo(2, 1)
3048 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3049 deriv_data(i, j, k)*rho1a(i, j, k)
3050 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3051 deriv_data(i, j, k)*rho1a(i, j, k)
3057 IF (
ASSOCIATED(deriv_att))
THEN
3061 DO k = bo(1, 3), bo(2, 3)
3062 DO j = bo(1, 2), bo(2, 2)
3063 DO i = bo(1, 1), bo(2, 1)
3064 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3065 deriv_data(i, j, k)*rho1b(i, j, k)
3066 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3067 deriv_data(i, j, k)*rho1b(i, j, k)
3073 IF (
ASSOCIATED(deriv_att))
THEN
3077 DO k = bo(1, 3), bo(2, 3)
3078 DO j = bo(1, 2), bo(2, 2)
3079 DO i = bo(1, 1), bo(2, 1)
3080 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3081 deriv_data(i, j, k)*dr1dr(i, j, k)
3082 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3083 deriv_data(i, j, k)*dr1dr(i, j, k)
3089 IF (
ASSOCIATED(deriv_att))
THEN
3093 DO k = bo(1, 3), bo(2, 3)
3094 DO j = bo(1, 2), bo(2, 2)
3095 DO i = bo(1, 1), bo(2, 1)
3096 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3097 deriv_data(i, j, k)*dra1dra(i, j, k)
3098 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3099 deriv_data(i, j, k)*dra1dra(i, j, k)
3105 IF (
ASSOCIATED(deriv_att))
THEN
3109 DO k = bo(1, 3), bo(2, 3)
3110 DO j = bo(1, 2), bo(2, 2)
3111 DO i = bo(1, 1), bo(2, 1)
3112 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3113 deriv_data(i, j, k)*drb1drb(i, j, k)
3114 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3115 deriv_data(i, j, k)*drb1drb(i, j, k)
3121 IF (
ASSOCIATED(deriv_att))
THEN
3125 DO k = bo(1, 3), bo(2, 3)
3126 DO j = bo(1, 2), bo(2, 2)
3127 DO i = bo(1, 1), bo(2, 1)
3128 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3129 deriv_data(i, j, k)*tau1a(i, j, k)
3130 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3131 deriv_data(i, j, k)*tau1a(i, j, k)
3137 IF (
ASSOCIATED(deriv_att))
THEN
3141 DO k = bo(1, 3), bo(2, 3)
3142 DO j = bo(1, 2), bo(2, 2)
3143 DO i = bo(1, 1), bo(2, 1)
3144 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3145 deriv_data(i, j, k)*tau1b(i, j, k)
3146 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3147 deriv_data(i, j, k)*tau1b(i, j, k)
3153 IF (
ASSOCIATED(deriv_att))
THEN
3157 DO k = bo(1, 3), bo(2, 3)
3158 DO j = bo(1, 2), bo(2, 2)
3159 DO i = bo(1, 1), bo(2, 1)
3160 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3161 deriv_data(i, j, k)*laplace1a(i, j, k)
3162 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3163 deriv_data(i, j, k)*laplace1a(i, j, k)
3169 IF (
ASSOCIATED(deriv_att))
THEN
3173 DO k = bo(1, 3), bo(2, 3)
3174 DO j = bo(1, 2), bo(2, 2)
3175 DO i = bo(1, 1), bo(2, 1)
3176 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3177 deriv_data(i, j, k)*laplace1b(i, j, k)
3178 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3179 deriv_data(i, j, k)*laplace1b(i, j, k)
3186 IF (
ASSOCIATED(deriv_att))
THEN
3190 IF (my_compute_virial)
THEN
3191 CALL virial_drho_drho1(virial_pw, drho, drho1, deriv_data, virial_xc)
3195 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
3196 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
3197 v_drho(2)%array(:, :, :) = v_drho(2)%array(:, :, :) + &
3198 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
3203 IF (
ASSOCIATED(deriv_att))
THEN
3207 DO k = bo(1, 3), bo(2, 3)
3208 DO j = bo(1, 2), bo(2, 2)
3209 DO i = bo(1, 1), bo(2, 1)
3210 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3211 deriv_data(i, j, k)*rho1a(i, j, k)
3217 IF (
ASSOCIATED(deriv_att))
THEN
3221 DO k = bo(1, 3), bo(2, 3)
3222 DO j = bo(1, 2), bo(2, 2)
3223 DO i = bo(1, 1), bo(2, 1)
3224 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3225 deriv_data(i, j, k)*rho1b(i, j, k)
3231 IF (
ASSOCIATED(deriv_att))
THEN
3235 DO k = bo(1, 3), bo(2, 3)
3236 DO j = bo(1, 2), bo(2, 2)
3237 DO i = bo(1, 1), bo(2, 1)
3238 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3239 deriv_data(i, j, k)*dr1dr(i, j, k)
3245 IF (
ASSOCIATED(deriv_att))
THEN
3249 DO k = bo(1, 3), bo(2, 3)
3250 DO j = bo(1, 2), bo(2, 2)
3251 DO i = bo(1, 1), bo(2, 1)
3252 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3253 deriv_data(i, j, k)*dra1dra(i, j, k)
3259 IF (
ASSOCIATED(deriv_att))
THEN
3263 DO k = bo(1, 3), bo(2, 3)
3264 DO j = bo(1, 2), bo(2, 2)
3265 DO i = bo(1, 1), bo(2, 1)
3266 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3267 deriv_data(i, j, k)*drb1drb(i, j, k)
3273 IF (
ASSOCIATED(deriv_att))
THEN
3277 DO k = bo(1, 3), bo(2, 3)
3278 DO j = bo(1, 2), bo(2, 2)
3279 DO i = bo(1, 1), bo(2, 1)
3280 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3281 deriv_data(i, j, k)*tau1a(i, j, k)
3287 IF (
ASSOCIATED(deriv_att))
THEN
3291 DO k = bo(1, 3), bo(2, 3)
3292 DO j = bo(1, 2), bo(2, 2)
3293 DO i = bo(1, 1), bo(2, 1)
3294 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3295 deriv_data(i, j, k)*tau1b(i, j, k)
3301 IF (
ASSOCIATED(deriv_att))
THEN
3305 DO k = bo(1, 3), bo(2, 3)
3306 DO j = bo(1, 2), bo(2, 2)
3307 DO i = bo(1, 1), bo(2, 1)
3308 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3309 deriv_data(i, j, k)*laplace1a(i, j, k)
3315 IF (
ASSOCIATED(deriv_att))
THEN
3319 DO k = bo(1, 3), bo(2, 3)
3320 DO j = bo(1, 2), bo(2, 2)
3321 DO i = bo(1, 1), bo(2, 1)
3322 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3323 deriv_data(i, j, k)*laplace1b(i, j, k)
3330 IF (
ASSOCIATED(deriv_att))
THEN
3334 IF (my_compute_virial)
THEN
3335 CALL virial_drho_drho1(virial_pw, drhoa, drho1a, deriv_data, virial_xc)
3339 v_drhoa(1)%array(:, :, :) = v_drhoa(1)%array(:, :, :) + &
3340 deriv_data(:, :, :)*dra1dra(:, :, :)/max(gradient_cut, norm_drhoa(:, :, :))**2
3345 IF (
ASSOCIATED(deriv_att))
THEN
3349 DO k = bo(1, 3), bo(2, 3)
3350 DO j = bo(1, 2), bo(2, 2)
3351 DO i = bo(1, 1), bo(2, 1)
3352 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3353 deriv_data(i, j, k)*rho1a(i, j, k)
3359 IF (
ASSOCIATED(deriv_att))
THEN
3363 DO k = bo(1, 3), bo(2, 3)
3364 DO j = bo(1, 2), bo(2, 2)
3365 DO i = bo(1, 1), bo(2, 1)
3366 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3367 deriv_data(i, j, k)*rho1b(i, j, k)
3373 IF (
ASSOCIATED(deriv_att))
THEN
3377 DO k = bo(1, 3), bo(2, 3)
3378 DO j = bo(1, 2), bo(2, 2)
3379 DO i = bo(1, 1), bo(2, 1)
3380 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3381 deriv_data(i, j, k)*dr1dr(i, j, k)
3387 IF (
ASSOCIATED(deriv_att))
THEN
3391 DO k = bo(1, 3), bo(2, 3)
3392 DO j = bo(1, 2), bo(2, 2)
3393 DO i = bo(1, 1), bo(2, 1)
3394 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3395 deriv_data(i, j, k)*dra1dra(i, j, k)
3401 IF (
ASSOCIATED(deriv_att))
THEN
3405 DO k = bo(1, 3), bo(2, 3)
3406 DO j = bo(1, 2), bo(2, 2)
3407 DO i = bo(1, 1), bo(2, 1)
3408 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3409 deriv_data(i, j, k)*drb1drb(i, j, k)
3415 IF (
ASSOCIATED(deriv_att))
THEN
3419 DO k = bo(1, 3), bo(2, 3)
3420 DO j = bo(1, 2), bo(2, 2)
3421 DO i = bo(1, 1), bo(2, 1)
3422 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3423 deriv_data(i, j, k)*tau1a(i, j, k)
3429 IF (
ASSOCIATED(deriv_att))
THEN
3433 DO k = bo(1, 3), bo(2, 3)
3434 DO j = bo(1, 2), bo(2, 2)
3435 DO i = bo(1, 1), bo(2, 1)
3436 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3437 deriv_data(i, j, k)*tau1b(i, j, k)
3443 IF (
ASSOCIATED(deriv_att))
THEN
3447 DO k = bo(1, 3), bo(2, 3)
3448 DO j = bo(1, 2), bo(2, 2)
3449 DO i = bo(1, 1), bo(2, 1)
3450 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3451 deriv_data(i, j, k)*laplace1a(i, j, k)
3457 IF (
ASSOCIATED(deriv_att))
THEN
3461 DO k = bo(1, 3), bo(2, 3)
3462 DO j = bo(1, 2), bo(2, 2)
3463 DO i = bo(1, 1), bo(2, 1)
3464 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3465 deriv_data(i, j, k)*laplace1b(i, j, k)
3472 IF (
ASSOCIATED(deriv_att))
THEN
3476 IF (my_compute_virial)
THEN
3477 CALL virial_drho_drho1(virial_pw, drhob, drho1b, deriv_data, virial_xc)
3481 v_drhob(2)%array(:, :, :) = v_drhob(2)%array(:, :, :) + &
3482 deriv_data(:, :, :)*drb1drb(:, :, :)/max(gradient_cut, norm_drhob(:, :, :))**2
3487 IF (
ASSOCIATED(deriv_att))
THEN
3491 DO k = bo(1, 3), bo(2, 3)
3492 DO j = bo(1, 2), bo(2, 2)
3493 DO i = bo(1, 1), bo(2, 1)
3494 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3495 deriv_data(i, j, k)*rho1a(i, j, k)
3501 IF (
ASSOCIATED(deriv_att))
THEN
3505 DO k = bo(1, 3), bo(2, 3)
3506 DO j = bo(1, 2), bo(2, 2)
3507 DO i = bo(1, 1), bo(2, 1)
3508 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3509 deriv_data(i, j, k)*rho1b(i, j, k)
3515 IF (
ASSOCIATED(deriv_att))
THEN
3519 DO k = bo(1, 3), bo(2, 3)
3520 DO j = bo(1, 2), bo(2, 2)
3521 DO i = bo(1, 1), bo(2, 1)
3522 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3523 deriv_data(i, j, k)*dr1dr(i, j, k)
3529 IF (
ASSOCIATED(deriv_att))
THEN
3533 DO k = bo(1, 3), bo(2, 3)
3534 DO j = bo(1, 2), bo(2, 2)
3535 DO i = bo(1, 1), bo(2, 1)
3536 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3537 deriv_data(i, j, k)*dra1dra(i, j, k)
3543 IF (
ASSOCIATED(deriv_att))
THEN
3547 DO k = bo(1, 3), bo(2, 3)
3548 DO j = bo(1, 2), bo(2, 2)
3549 DO i = bo(1, 1), bo(2, 1)
3550 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3551 deriv_data(i, j, k)*drb1drb(i, j, k)
3557 IF (
ASSOCIATED(deriv_att))
THEN
3561 DO k = bo(1, 3), bo(2, 3)
3562 DO j = bo(1, 2), bo(2, 2)
3563 DO i = bo(1, 1), bo(2, 1)
3564 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3565 deriv_data(i, j, k)*tau1a(i, j, k)
3571 IF (
ASSOCIATED(deriv_att))
THEN
3575 DO k = bo(1, 3), bo(2, 3)
3576 DO j = bo(1, 2), bo(2, 2)
3577 DO i = bo(1, 1), bo(2, 1)
3578 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3579 deriv_data(i, j, k)*tau1b(i, j, k)
3585 IF (
ASSOCIATED(deriv_att))
THEN
3589 DO k = bo(1, 3), bo(2, 3)
3590 DO j = bo(1, 2), bo(2, 2)
3591 DO i = bo(1, 1), bo(2, 1)
3592 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3593 deriv_data(i, j, k)*laplace1a(i, j, k)
3599 IF (
ASSOCIATED(deriv_att))
THEN
3603 DO k = bo(1, 3), bo(2, 3)
3604 DO j = bo(1, 2), bo(2, 2)
3605 DO i = bo(1, 1), bo(2, 1)
3606 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3607 deriv_data(i, j, k)*laplace1b(i, j, k)
3615 IF (
ASSOCIATED(deriv_att))
THEN
3619 DO k = bo(1, 3), bo(2, 3)
3620 DO j = bo(1, 2), bo(2, 2)
3621 DO i = bo(1, 1), bo(2, 1)
3622 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3623 deriv_data(i, j, k)*rho1a(i, j, k)
3629 IF (
ASSOCIATED(deriv_att))
THEN
3633 DO k = bo(1, 3), bo(2, 3)
3634 DO j = bo(1, 2), bo(2, 2)
3635 DO i = bo(1, 1), bo(2, 1)
3636 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3637 deriv_data(i, j, k)*rho1b(i, j, k)
3643 IF (
ASSOCIATED(deriv_att))
THEN
3647 DO k = bo(1, 3), bo(2, 3)
3648 DO j = bo(1, 2), bo(2, 2)
3649 DO i = bo(1, 1), bo(2, 1)
3650 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3651 deriv_data(i, j, k)*dr1dr(i, j, k)
3657 IF (
ASSOCIATED(deriv_att))
THEN
3661 DO k = bo(1, 3), bo(2, 3)
3662 DO j = bo(1, 2), bo(2, 2)
3663 DO i = bo(1, 1), bo(2, 1)
3664 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3665 deriv_data(i, j, k)*dra1dra(i, j, k)
3671 IF (
ASSOCIATED(deriv_att))
THEN
3675 DO k = bo(1, 3), bo(2, 3)
3676 DO j = bo(1, 2), bo(2, 2)
3677 DO i = bo(1, 1), bo(2, 1)
3678 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3679 deriv_data(i, j, k)*drb1drb(i, j, k)
3685 IF (
ASSOCIATED(deriv_att))
THEN
3689 DO k = bo(1, 3), bo(2, 3)
3690 DO j = bo(1, 2), bo(2, 2)
3691 DO i = bo(1, 1), bo(2, 1)
3692 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3693 deriv_data(i, j, k)*tau1a(i, j, k)
3699 IF (
ASSOCIATED(deriv_att))
THEN
3703 DO k = bo(1, 3), bo(2, 3)
3704 DO j = bo(1, 2), bo(2, 2)
3705 DO i = bo(1, 1), bo(2, 1)
3706 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3707 deriv_data(i, j, k)*tau1b(i, j, k)
3713 IF (
ASSOCIATED(deriv_att))
THEN
3717 DO k = bo(1, 3), bo(2, 3)
3718 DO j = bo(1, 2), bo(2, 2)
3719 DO i = bo(1, 1), bo(2, 1)
3720 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3721 deriv_data(i, j, k)*laplace1a(i, j, k)
3727 IF (
ASSOCIATED(deriv_att))
THEN
3731 DO k = bo(1, 3), bo(2, 3)
3732 DO j = bo(1, 2), bo(2, 2)
3733 DO i = bo(1, 1), bo(2, 1)
3734 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3735 deriv_data(i, j, k)*laplace1b(i, j, k)
3743 IF (
ASSOCIATED(deriv_att))
THEN
3747 DO k = bo(1, 3), bo(2, 3)
3748 DO j = bo(1, 2), bo(2, 2)
3749 DO i = bo(1, 1), bo(2, 1)
3750 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3751 deriv_data(i, j, k)*rho1a(i, j, k)
3757 IF (
ASSOCIATED(deriv_att))
THEN
3761 DO k = bo(1, 3), bo(2, 3)
3762 DO j = bo(1, 2), bo(2, 2)
3763 DO i = bo(1, 1), bo(2, 1)
3764 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3765 deriv_data(i, j, k)*rho1b(i, j, k)
3771 IF (
ASSOCIATED(deriv_att))
THEN
3775 DO k = bo(1, 3), bo(2, 3)
3776 DO j = bo(1, 2), bo(2, 2)
3777 DO i = bo(1, 1), bo(2, 1)
3778 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3779 deriv_data(i, j, k)*dr1dr(i, j, k)
3785 IF (
ASSOCIATED(deriv_att))
THEN
3789 DO k = bo(1, 3), bo(2, 3)
3790 DO j = bo(1, 2), bo(2, 2)
3791 DO i = bo(1, 1), bo(2, 1)
3792 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3793 deriv_data(i, j, k)*dra1dra(i, j, k)
3799 IF (
ASSOCIATED(deriv_att))
THEN
3803 DO k = bo(1, 3), bo(2, 3)
3804 DO j = bo(1, 2), bo(2, 2)
3805 DO i = bo(1, 1), bo(2, 1)
3806 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3807 deriv_data(i, j, k)*drb1drb(i, j, k)
3813 IF (
ASSOCIATED(deriv_att))
THEN
3817 DO k = bo(1, 3), bo(2, 3)
3818 DO j = bo(1, 2), bo(2, 2)
3819 DO i = bo(1, 1), bo(2, 1)
3820 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3821 deriv_data(i, j, k)*tau1a(i, j, k)
3827 IF (
ASSOCIATED(deriv_att))
THEN
3831 DO k = bo(1, 3), bo(2, 3)
3832 DO j = bo(1, 2), bo(2, 2)
3833 DO i = bo(1, 1), bo(2, 1)
3834 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3835 deriv_data(i, j, k)*tau1b(i, j, k)
3841 IF (
ASSOCIATED(deriv_att))
THEN
3845 DO k = bo(1, 3), bo(2, 3)
3846 DO j = bo(1, 2), bo(2, 2)
3847 DO i = bo(1, 1), bo(2, 1)
3848 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3849 deriv_data(i, j, k)*laplace1a(i, j, k)
3855 IF (
ASSOCIATED(deriv_att))
THEN
3859 DO k = bo(1, 3), bo(2, 3)
3860 DO j = bo(1, 2), bo(2, 2)
3861 DO i = bo(1, 1), bo(2, 1)
3862 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3863 deriv_data(i, j, k)*laplace1b(i, j, k)
3870 IF (my_compute_virial)
THEN
3872 IF (
ASSOCIATED(deriv_att))
THEN
3875 virial_pw%array(:, :, :) = -rho1a(:, :, :)
3876 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
3880 IF (
ASSOCIATED(deriv_att))
THEN
3884 DO k = bo(1, 3), bo(2, 3)
3885 DO j = bo(1, 2), bo(2, 2)
3886 DO i = bo(1, 1), bo(2, 1)
3887 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3888 deriv_data(i, j, k)*rho1a(i, j, k)
3894 IF (
ASSOCIATED(deriv_att))
THEN
3898 DO k = bo(1, 3), bo(2, 3)
3899 DO j = bo(1, 2), bo(2, 2)
3900 DO i = bo(1, 1), bo(2, 1)
3901 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3902 deriv_data(i, j, k)*rho1b(i, j, k)
3908 IF (
ASSOCIATED(deriv_att))
THEN
3912 DO k = bo(1, 3), bo(2, 3)
3913 DO j = bo(1, 2), bo(2, 2)
3914 DO i = bo(1, 1), bo(2, 1)
3915 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3916 deriv_data(i, j, k)*dr1dr(i, j, k)
3922 IF (
ASSOCIATED(deriv_att))
THEN
3926 DO k = bo(1, 3), bo(2, 3)
3927 DO j = bo(1, 2), bo(2, 2)
3928 DO i = bo(1, 1), bo(2, 1)
3929 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3930 deriv_data(i, j, k)*dra1dra(i, j, k)
3936 IF (
ASSOCIATED(deriv_att))
THEN
3940 DO k = bo(1, 3), bo(2, 3)
3941 DO j = bo(1, 2), bo(2, 2)
3942 DO i = bo(1, 1), bo(2, 1)
3943 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3944 deriv_data(i, j, k)*drb1drb(i, j, k)
3950 IF (
ASSOCIATED(deriv_att))
THEN
3954 DO k = bo(1, 3), bo(2, 3)
3955 DO j = bo(1, 2), bo(2, 2)
3956 DO i = bo(1, 1), bo(2, 1)
3957 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3958 deriv_data(i, j, k)*tau1a(i, j, k)
3964 IF (
ASSOCIATED(deriv_att))
THEN
3968 DO k = bo(1, 3), bo(2, 3)
3969 DO j = bo(1, 2), bo(2, 2)
3970 DO i = bo(1, 1), bo(2, 1)
3971 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3972 deriv_data(i, j, k)*tau1b(i, j, k)
3978 IF (
ASSOCIATED(deriv_att))
THEN
3982 DO k = bo(1, 3), bo(2, 3)
3983 DO j = bo(1, 2), bo(2, 2)
3984 DO i = bo(1, 1), bo(2, 1)
3985 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3986 deriv_data(i, j, k)*laplace1a(i, j, k)
3992 IF (
ASSOCIATED(deriv_att))
THEN
3996 DO k = bo(1, 3), bo(2, 3)
3997 DO j = bo(1, 2), bo(2, 2)
3998 DO i = bo(1, 1), bo(2, 1)
3999 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4000 deriv_data(i, j, k)*laplace1b(i, j, k)
4007 IF (my_compute_virial)
THEN
4009 IF (
ASSOCIATED(deriv_att))
THEN
4012 virial_pw%array(:, :, :) = -rho1b(:, :, :)
4013 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
4021 IF (
ASSOCIATED(deriv_att))
THEN
4025 DO k = bo(1, 3), bo(2, 3)
4026 DO j = bo(1, 2), bo(2, 2)
4027 DO i = bo(1, 1), bo(2, 1)
4028 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4029 deriv_data(i, j, k)*rho1a(i, j, k)
4035 IF (
ASSOCIATED(deriv_att))
THEN
4039 DO k = bo(1, 3), bo(2, 3)
4040 DO j = bo(1, 2), bo(2, 2)
4041 DO i = bo(1, 1), bo(2, 1)
4042 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4043 deriv_data(i, j, k)*dr1dr(i, j, k)
4049 IF (
ASSOCIATED(deriv_att))
THEN
4053 DO k = bo(1, 3), bo(2, 3)
4054 DO j = bo(1, 2), bo(2, 2)
4055 DO i = bo(1, 1), bo(2, 1)
4056 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4057 deriv_data(i, j, k)*dra1dra(i, j, k)
4063 IF (
ASSOCIATED(deriv_att))
THEN
4067 DO k = bo(1, 3), bo(2, 3)
4068 DO j = bo(1, 2), bo(2, 2)
4069 DO i = bo(1, 1), bo(2, 1)
4070 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4071 deriv_data(i, j, k)*tau1a(i, j, k)
4077 IF (
ASSOCIATED(deriv_att))
THEN
4081 DO k = bo(1, 3), bo(2, 3)
4082 DO j = bo(1, 2), bo(2, 2)
4083 DO i = bo(1, 1), bo(2, 1)
4084 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4085 deriv_data(i, j, k)*laplace1a(i, j, k)
4091 IF (
ASSOCIATED(deriv_att))
THEN
4095 DO k = bo(1, 3), bo(2, 3)
4096 DO j = bo(1, 2), bo(2, 2)
4097 DO i = bo(1, 1), bo(2, 1)
4098 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4099 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4105 IF (
ASSOCIATED(deriv_att))
THEN
4109 DO k = bo(1, 3), bo(2, 3)
4110 DO j = bo(1, 2), bo(2, 2)
4111 DO i = bo(1, 1), bo(2, 1)
4112 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4113 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4119 IF (
ASSOCIATED(deriv_att))
THEN
4123 DO k = bo(1, 3), bo(2, 3)
4124 DO j = bo(1, 2), bo(2, 2)
4125 DO i = bo(1, 1), bo(2, 1)
4126 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4127 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4133 IF (
ASSOCIATED(deriv_att))
THEN
4137 DO k = bo(1, 3), bo(2, 3)
4138 DO j = bo(1, 2), bo(2, 2)
4139 DO i = bo(1, 1), bo(2, 1)
4140 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4141 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4149 IF (
ASSOCIATED(deriv_att))
THEN
4153 DO k = bo(1, 3), bo(2, 3)
4154 DO j = bo(1, 2), bo(2, 2)
4155 DO i = bo(1, 1), bo(2, 1)
4156 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4157 deriv_data(i, j, k)*rho1a(i, j, k)
4163 IF (
ASSOCIATED(deriv_att))
THEN
4167 DO k = bo(1, 3), bo(2, 3)
4168 DO j = bo(1, 2), bo(2, 2)
4169 DO i = bo(1, 1), bo(2, 1)
4170 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4171 deriv_data(i, j, k)*dr1dr(i, j, k)
4177 IF (
ASSOCIATED(deriv_att))
THEN
4181 DO k = bo(1, 3), bo(2, 3)
4182 DO j = bo(1, 2), bo(2, 2)
4183 DO i = bo(1, 1), bo(2, 1)
4184 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4185 deriv_data(i, j, k)*dra1dra(i, j, k)
4191 IF (
ASSOCIATED(deriv_att))
THEN
4195 DO k = bo(1, 3), bo(2, 3)
4196 DO j = bo(1, 2), bo(2, 2)
4197 DO i = bo(1, 1), bo(2, 1)
4198 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4199 deriv_data(i, j, k)*tau1a(i, j, k)
4205 IF (
ASSOCIATED(deriv_att))
THEN
4209 DO k = bo(1, 3), bo(2, 3)
4210 DO j = bo(1, 2), bo(2, 2)
4211 DO i = bo(1, 1), bo(2, 1)
4212 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4213 deriv_data(i, j, k)*laplace1a(i, j, k)
4219 IF (
ASSOCIATED(deriv_att))
THEN
4223 DO k = bo(1, 3), bo(2, 3)
4224 DO j = bo(1, 2), bo(2, 2)
4225 DO i = bo(1, 1), bo(2, 1)
4226 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4227 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4233 IF (
ASSOCIATED(deriv_att))
THEN
4237 DO k = bo(1, 3), bo(2, 3)
4238 DO j = bo(1, 2), bo(2, 2)
4239 DO i = bo(1, 1), bo(2, 1)
4240 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4241 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4247 IF (
ASSOCIATED(deriv_att))
THEN
4251 DO k = bo(1, 3), bo(2, 3)
4252 DO j = bo(1, 2), bo(2, 2)
4253 DO i = bo(1, 1), bo(2, 1)
4254 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4255 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4261 IF (
ASSOCIATED(deriv_att))
THEN
4265 DO k = bo(1, 3), bo(2, 3)
4266 DO j = bo(1, 2), bo(2, 2)
4267 DO i = bo(1, 1), bo(2, 1)
4268 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4269 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4276 IF (
ASSOCIATED(deriv_att))
THEN
4282 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
4283 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
4288 IF (
ASSOCIATED(deriv_att))
THEN
4292 DO k = bo(1, 3), bo(2, 3)
4293 DO j = bo(1, 2), bo(2, 2)
4294 DO i = bo(1, 1), bo(2, 1)
4295 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4296 deriv_data(i, j, k)*rho1a(i, j, k)
4302 IF (
ASSOCIATED(deriv_att))
THEN
4306 DO k = bo(1, 3), bo(2, 3)
4307 DO j = bo(1, 2), bo(2, 2)
4308 DO i = bo(1, 1), bo(2, 1)
4309 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4310 deriv_data(i, j, k)*dr1dr(i, j, k)
4316 IF (
ASSOCIATED(deriv_att))
THEN
4320 DO k = bo(1, 3), bo(2, 3)
4321 DO j = bo(1, 2), bo(2, 2)
4322 DO i = bo(1, 1), bo(2, 1)
4323 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4324 deriv_data(i, j, k)*dra1dra(i, j, k)
4330 IF (
ASSOCIATED(deriv_att))
THEN
4334 DO k = bo(1, 3), bo(2, 3)
4335 DO j = bo(1, 2), bo(2, 2)
4336 DO i = bo(1, 1), bo(2, 1)
4337 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4338 deriv_data(i, j, k)*tau1a(i, j, k)
4344 IF (
ASSOCIATED(deriv_att))
THEN
4348 DO k = bo(1, 3), bo(2, 3)
4349 DO j = bo(1, 2), bo(2, 2)
4350 DO i = bo(1, 1), bo(2, 1)
4351 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4352 deriv_data(i, j, k)*laplace1a(i, j, k)
4358 IF (
ASSOCIATED(deriv_att))
THEN
4362 DO k = bo(1, 3), bo(2, 3)
4363 DO j = bo(1, 2), bo(2, 2)
4364 DO i = bo(1, 1), bo(2, 1)
4365 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4366 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4372 IF (
ASSOCIATED(deriv_att))
THEN
4376 DO k = bo(1, 3), bo(2, 3)
4377 DO j = bo(1, 2), bo(2, 2)
4378 DO i = bo(1, 1), bo(2, 1)
4379 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4380 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4386 IF (
ASSOCIATED(deriv_att))
THEN
4390 DO k = bo(1, 3), bo(2, 3)
4391 DO j = bo(1, 2), bo(2, 2)
4392 DO i = bo(1, 1), bo(2, 1)
4393 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4394 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4400 IF (
ASSOCIATED(deriv_att))
THEN
4404 DO k = bo(1, 3), bo(2, 3)
4405 DO j = bo(1, 2), bo(2, 2)
4406 DO i = bo(1, 1), bo(2, 1)
4407 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4408 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4415 IF (
ASSOCIATED(deriv_att))
THEN
4421 v_drhoa(1)%array(:, :, :) = v_drhoa(1)%array(:, :, :) + &
4422 deriv_data(:, :, :)*dra1dra(:, :, :)/max(gradient_cut, norm_drhoa(:, :, :))**2
4427 IF (
ASSOCIATED(deriv_att))
THEN
4431 DO k = bo(1, 3), bo(2, 3)
4432 DO j = bo(1, 2), bo(2, 2)
4433 DO i = bo(1, 1), bo(2, 1)
4434 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4435 deriv_data(i, j, k)*rho1a(i, j, k)
4441 IF (
ASSOCIATED(deriv_att))
THEN
4445 DO k = bo(1, 3), bo(2, 3)
4446 DO j = bo(1, 2), bo(2, 2)
4447 DO i = bo(1, 1), bo(2, 1)
4448 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4449 deriv_data(i, j, k)*dr1dr(i, j, k)
4455 IF (
ASSOCIATED(deriv_att))
THEN
4459 DO k = bo(1, 3), bo(2, 3)
4460 DO j = bo(1, 2), bo(2, 2)
4461 DO i = bo(1, 1), bo(2, 1)
4462 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4463 deriv_data(i, j, k)*dra1dra(i, j, k)
4469 IF (
ASSOCIATED(deriv_att))
THEN
4473 DO k = bo(1, 3), bo(2, 3)
4474 DO j = bo(1, 2), bo(2, 2)
4475 DO i = bo(1, 1), bo(2, 1)
4476 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4477 deriv_data(i, j, k)*tau1a(i, j, k)
4483 IF (
ASSOCIATED(deriv_att))
THEN
4487 DO k = bo(1, 3), bo(2, 3)
4488 DO j = bo(1, 2), bo(2, 2)
4489 DO i = bo(1, 1), bo(2, 1)
4490 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4491 deriv_data(i, j, k)*laplace1a(i, j, k)
4497 IF (
ASSOCIATED(deriv_att))
THEN
4501 DO k = bo(1, 3), bo(2, 3)
4502 DO j = bo(1, 2), bo(2, 2)
4503 DO i = bo(1, 1), bo(2, 1)
4504 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4505 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4511 IF (
ASSOCIATED(deriv_att))
THEN
4515 DO k = bo(1, 3), bo(2, 3)
4516 DO j = bo(1, 2), bo(2, 2)
4517 DO i = bo(1, 1), bo(2, 1)
4518 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4519 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4525 IF (
ASSOCIATED(deriv_att))
THEN
4529 DO k = bo(1, 3), bo(2, 3)
4530 DO j = bo(1, 2), bo(2, 2)
4531 DO i = bo(1, 1), bo(2, 1)
4532 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4533 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4539 IF (
ASSOCIATED(deriv_att))
THEN
4543 DO k = bo(1, 3), bo(2, 3)
4544 DO j = bo(1, 2), bo(2, 2)
4545 DO i = bo(1, 1), bo(2, 1)
4546 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4547 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4555 IF (
ASSOCIATED(deriv_att))
THEN
4559 DO k = bo(1, 3), bo(2, 3)
4560 DO j = bo(1, 2), bo(2, 2)
4561 DO i = bo(1, 1), bo(2, 1)
4562 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4563 deriv_data(i, j, k)*rho1a(i, j, k)
4569 IF (
ASSOCIATED(deriv_att))
THEN
4573 DO k = bo(1, 3), bo(2, 3)
4574 DO j = bo(1, 2), bo(2, 2)
4575 DO i = bo(1, 1), bo(2, 1)
4576 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4577 deriv_data(i, j, k)*dr1dr(i, j, k)
4583 IF (
ASSOCIATED(deriv_att))
THEN
4587 DO k = bo(1, 3), bo(2, 3)
4588 DO j = bo(1, 2), bo(2, 2)
4589 DO i = bo(1, 1), bo(2, 1)
4590 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4591 deriv_data(i, j, k)*dra1dra(i, j, k)
4597 IF (
ASSOCIATED(deriv_att))
THEN
4601 DO k = bo(1, 3), bo(2, 3)
4602 DO j = bo(1, 2), bo(2, 2)
4603 DO i = bo(1, 1), bo(2, 1)
4604 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4605 deriv_data(i, j, k)*tau1a(i, j, k)
4611 IF (
ASSOCIATED(deriv_att))
THEN
4615 DO k = bo(1, 3), bo(2, 3)
4616 DO j = bo(1, 2), bo(2, 2)
4617 DO i = bo(1, 1), bo(2, 1)
4618 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4619 deriv_data(i, j, k)*laplace1a(i, j, k)
4625 IF (
ASSOCIATED(deriv_att))
THEN
4629 DO k = bo(1, 3), bo(2, 3)
4630 DO j = bo(1, 2), bo(2, 2)
4631 DO i = bo(1, 1), bo(2, 1)
4632 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4633 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4639 IF (
ASSOCIATED(deriv_att))
THEN
4643 DO k = bo(1, 3), bo(2, 3)
4644 DO j = bo(1, 2), bo(2, 2)
4645 DO i = bo(1, 1), bo(2, 1)
4646 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4647 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4653 IF (
ASSOCIATED(deriv_att))
THEN
4657 DO k = bo(1, 3), bo(2, 3)
4658 DO j = bo(1, 2), bo(2, 2)
4659 DO i = bo(1, 1), bo(2, 1)
4660 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4661 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4667 IF (
ASSOCIATED(deriv_att))
THEN
4671 DO k = bo(1, 3), bo(2, 3)
4672 DO j = bo(1, 2), bo(2, 2)
4673 DO i = bo(1, 1), bo(2, 1)
4674 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4675 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4686 IF (gradient_f)
THEN
4688 IF (my_compute_virial)
THEN
4689 CALL virial_drho_drho(virial_pw, drhoa, v_drhoa(1), virial_xc)
4690 CALL virial_drho_drho(virial_pw, drhob, v_drhob(2), virial_xc)
4693 virial_pw%array(:, :, :) = drho(idir)%array(:, :, :)*(v_drho(1)%array(:, :, :) + v_drho(2)%array(:, :, :))
4697 drho(jdir)%array(:, :, :))
4698 virial_xc(jdir, idir) = virial_xc(jdir, idir) + tmp
4699 virial_xc(idir, jdir) = virial_xc(jdir, idir)
4708 DO ir = bo(1, 2), bo(2, 2)
4709 DO ia = bo(1, 1), bo(2, 1)
4711 DO ispin = 1, nspins
4712 vxg(idir, ia, ir, ispin) = &
4713 -(v_drhoa(ispin)%array(ia, ir, 1)*drhoa(idir)%array(ia, ir, 1) + &
4714 v_drhob(ispin)%array(ia, ir, 1)*drhob(idir)%array(ia, ir, 1) + &
4715 v_drho(ispin)%array(ia, ir, 1)*drho(idir)%array(ia, ir, 1))
4717 IF (
ASSOCIATED(e_drhoa))
THEN
4718 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4719 e_drhoa(ia, ir, 1)*drho1a(idir)%array(ia, ir, 1)
4721 IF (nspins /= 1 .AND.
ASSOCIATED(e_drhob))
THEN
4722 vxg(idir, ia, ir, 2) = vxg(idir, ia, ir, 2) + &
4723 e_drhob(ia, ir, 1)*drho1b(idir)%array(ia, ir, 1)
4725 IF (
ASSOCIATED(e_drho))
THEN
4726 IF (nspins /= 1)
THEN
4727 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4728 e_drho(ia, ir, 1)*drho1(idir)%array(ia, ir, 1)
4729 vxg(idir, ia, ir, 2) = vxg(idir, ia, ir, 2) + &
4730 e_drho(ia, ir, 1)*drho1(idir)%array(ia, ir, 1)
4732 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4733 e_drho(ia, ir, 1)*(drho1a(idir)%array(ia, ir, 1) + &
4734 fac*drho1b(idir)%array(ia, ir, 1))
4745 DO ispin = 1, nspins
4748 v_drho_r(idir, ispin)%array(:, :, :) = &
4749 v_drhoa(ispin)%array(:, :, :)*drhoa(idir)%array(:, :, :) + &
4750 v_drhob(ispin)%array(:, :, :)*drhob(idir)%array(:, :, :) + &
4751 v_drho(ispin)%array(:, :, :)*drho(idir)%array(:, :, :)
4754 IF (
ASSOCIATED(e_drhoa))
THEN
4757 v_drho_r(idir, 1)%array(:, :, :) = v_drho_r(idir, 1)%array(:, :, :) - &
4758 e_drhoa(:, :, :)*drho1a(idir)%array(:, :, :)
4761 IF (nspins /= 1 .AND.
ASSOCIATED(e_drhob))
THEN
4764 v_drho_r(idir, 2)%array(:, :, :) = v_drho_r(idir, 2)%array(:, :, :) - &
4765 e_drhob(:, :, :)*drho1b(idir)%array(:, :, :)
4768 IF (
ASSOCIATED(e_drho))
THEN
4771 DO k = bo(1, 3), bo(2, 3)
4772 DO j = bo(1, 2), bo(2, 2)
4773 DO i = bo(1, 1), bo(2, 1)
4774 IF (nspins /= 1)
THEN
4775 v_drho_r(idir, 1)%array(i, j, k) = v_drho_r(idir, 1)%array(i, j, k) - &
4776 e_drho(i, j, k)*drho1(idir)%array(i, j, k)
4777 v_drho_r(idir, 2)%array(i, j, k) = v_drho_r(idir, 2)%array(i, j, k) - &
4778 e_drho(i, j, k)*drho1(idir)%array(i, j, k)
4780 v_drho_r(idir, 1)%array(i, j, k) = v_drho_r(idir, 1)%array(i, j, k) - &
4781 e_drho(i, j, k)*(drho1a(idir)%array(i, j, k) + &
4782 fac*drho1b(idir)%array(i, j, k))
4790 DO ispin = 1, nspins
4792 CALL xc_pw_divergence(xc_deriv_method_id, v_drho_r(:, ispin), tmp_g, vxc_g, v_xc(ispin))
4798 DEALLOCATE (drho(idir)%array)
4799 DEALLOCATE (drho1(idir)%array)
4802 DO ispin = 1, nspins
4803 CALL deallocate_pw(v_drhoa(ispin), pw_pool)
4804 CALL deallocate_pw(v_drhob(ispin), pw_pool)
4807 DEALLOCATE (v_drhoa, v_drhob)
4811 IF (laplace_f .AND. my_compute_virial)
THEN
4812 virial_pw%array(:, :, :) = -rhoa(:, :, :)
4813 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(1)%array)
4814 virial_pw%array(:, :, :) = -rhob(:, :, :)
4815 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(2)%array)
4826 IF (gradient_f)
THEN
4829 CALL prepare_dr1dr(dr1dr, drho, drho1)
4835 ALLOCATE (v_laplace(nspins))
4836 DO ispin = 1, nspins
4837 CALL allocate_pw(v_laplace(ispin), pw_pool, bo)
4848 IF (
ASSOCIATED(deriv_att))
THEN
4852 DO k = bo(1, 3), bo(2, 3)
4853 DO j = bo(1, 2), bo(2, 2)
4854 DO i = bo(1, 1), bo(2, 1)
4855 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4856 deriv_data(i, j, k)*rho1(i, j, k)
4862 IF (
ASSOCIATED(deriv_att))
THEN
4866 DO k = bo(1, 3), bo(2, 3)
4867 DO j = bo(1, 2), bo(2, 2)
4868 DO i = bo(1, 1), bo(2, 1)
4869 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4870 deriv_data(i, j, k)*dr1dr(i, j, k)
4876 IF (
ASSOCIATED(deriv_att))
THEN
4880 DO k = bo(1, 3), bo(2, 3)
4881 DO j = bo(1, 2), bo(2, 2)
4882 DO i = bo(1, 1), bo(2, 1)
4883 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4884 deriv_data(i, j, k)*tau1(i, j, k)
4890 IF (
ASSOCIATED(deriv_att))
THEN
4894 DO k = bo(1, 3), bo(2, 3)
4895 DO j = bo(1, 2), bo(2, 2)
4896 DO i = bo(1, 1), bo(2, 1)
4897 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4898 deriv_data(i, j, k)*laplace1(i, j, k)
4906 IF (
ASSOCIATED(deriv_att))
THEN
4910 DO k = bo(1, 3), bo(2, 3)
4911 DO j = bo(1, 2), bo(2, 2)
4912 DO i = bo(1, 1), bo(2, 1)
4913 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4914 deriv_data(i, j, k)*rho1(i, j, k)
4920 IF (
ASSOCIATED(deriv_att))
THEN
4924 DO k = bo(1, 3), bo(2, 3)
4925 DO j = bo(1, 2), bo(2, 2)
4926 DO i = bo(1, 1), bo(2, 1)
4927 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4928 deriv_data(i, j, k)*dr1dr(i, j, k)
4934 IF (
ASSOCIATED(deriv_att))
THEN
4938 DO k = bo(1, 3), bo(2, 3)
4939 DO j = bo(1, 2), bo(2, 2)
4940 DO i = bo(1, 1), bo(2, 1)
4941 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4942 deriv_data(i, j, k)*tau1(i, j, k)
4948 IF (
ASSOCIATED(deriv_att))
THEN
4952 DO k = bo(1, 3), bo(2, 3)
4953 DO j = bo(1, 2), bo(2, 2)
4954 DO i = bo(1, 1), bo(2, 1)
4955 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4956 deriv_data(i, j, k)*laplace1(i, j, k)
4963 IF (
ASSOCIATED(deriv_att))
THEN
4967 IF (my_compute_virial)
THEN
4968 CALL virial_drho_drho1(virial_pw, drho, drho1, deriv_data, virial_xc)
4972 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
4973 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
4978 IF (
ASSOCIATED(deriv_att))
THEN
4982 DO k = bo(1, 3), bo(2, 3)
4983 DO j = bo(1, 2), bo(2, 2)
4984 DO i = bo(1, 1), bo(2, 1)
4985 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4986 deriv_data(i, j, k)*rho1(i, j, k)
4992 IF (
ASSOCIATED(deriv_att))
THEN
4996 DO k = bo(1, 3), bo(2, 3)
4997 DO j = bo(1, 2), bo(2, 2)
4998 DO i = bo(1, 1), bo(2, 1)
4999 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5000 deriv_data(i, j, k)*dr1dr(i, j, k)
5006 IF (
ASSOCIATED(deriv_att))
THEN
5010 DO k = bo(1, 3), bo(2, 3)
5011 DO j = bo(1, 2), bo(2, 2)
5012 DO i = bo(1, 1), bo(2, 1)
5013 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5014 deriv_data(i, j, k)*tau1(i, j, k)
5020 IF (
ASSOCIATED(deriv_att))
THEN
5024 DO k = bo(1, 3), bo(2, 3)
5025 DO j = bo(1, 2), bo(2, 2)
5026 DO i = bo(1, 1), bo(2, 1)
5027 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5028 deriv_data(i, j, k)*laplace1(i, j, k)
5036 IF (
ASSOCIATED(deriv_att))
THEN
5040 DO k = bo(1, 3), bo(2, 3)
5041 DO j = bo(1, 2), bo(2, 2)
5042 DO i = bo(1, 1), bo(2, 1)
5043 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5044 deriv_data(i, j, k)*rho1(i, j, k)
5050 IF (
ASSOCIATED(deriv_att))
THEN
5054 DO k = bo(1, 3), bo(2, 3)
5055 DO j = bo(1, 2), bo(2, 2)
5056 DO i = bo(1, 1), bo(2, 1)
5057 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5058 deriv_data(i, j, k)*dr1dr(i, j, k)
5064 IF (
ASSOCIATED(deriv_att))
THEN
5068 DO k = bo(1, 3), bo(2, 3)
5069 DO j = bo(1, 2), bo(2, 2)
5070 DO i = bo(1, 1), bo(2, 1)
5071 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5072 deriv_data(i, j, k)*tau1(i, j, k)
5078 IF (
ASSOCIATED(deriv_att))
THEN
5082 DO k = bo(1, 3), bo(2, 3)
5083 DO j = bo(1, 2), bo(2, 2)
5084 DO i = bo(1, 1), bo(2, 1)
5085 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5086 deriv_data(i, j, k)*laplace1(i, j, k)
5093 IF (my_compute_virial)
THEN
5095 IF (
ASSOCIATED(deriv_att))
THEN
5098 virial_pw%array(:, :, :) = -rho1(:, :, :)
5099 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
5104 IF (gradient_f)
THEN
5106 IF (my_compute_virial)
THEN
5107 CALL virial_drho_drho(virial_pw, drho, v_drho(1), virial_xc)
5115 DO ia = bo(1, 1), bo(2, 1)
5116 DO ir = bo(1, 2), bo(2, 2)
5117 vxg(idir, ia, ir, 1) = -drho(idir)%array(ia, ir, 1)*v_drho(1)%array(ia, ir, 1)
5118 IF (
ASSOCIATED(e_drho))
THEN
5119 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + factor2*drho1(idir)%array(ia, ir, 1)*e_drho(ia, ir, 1)
5130 v_drho_r(idir, 1)%array(:, :, :) = drho(idir)%array(:, :, :)*v_drho(1)%array(:, :, :) - &
5131 drho1(idir)%array(:, :, :)*e_drho(:, :, :)
5135 CALL xc_pw_divergence(xc_deriv_method_id, v_drho_r(:, 1), tmp_g, vxc_g, v_xc(1))
5140 IF (laplace_f .AND. my_compute_virial)
THEN
5141 virial_pw%array(:, :, :) = -rho(:, :, :)
5142 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(1)%array)
5148 DO ispin = 1, nspins
5149 CALL xc_pw_laplace(v_laplace(ispin), pw_pool, xc_deriv_method_id)
5150 CALL pw_axpy(v_laplace(ispin), v_xc(ispin))
5154 IF (gradient_f)
THEN
5156 DO ispin = 1, nspins
5157 CALL deallocate_pw(v_drho(ispin), pw_pool)
5159 CALL deallocate_pw(v_drho_r(idir, ispin), pw_pool)
5162 DEALLOCATE (v_drho, v_drho_r)
5167 DO ispin = 1, nspins
5168 CALL deallocate_pw(v_laplace(ispin), pw_pool)
5170 DEALLOCATE (v_laplace)
5173 IF (
ASSOCIATED(tmp_g%pw_grid) .AND.
ASSOCIATED(pw_pool))
THEN
5174 CALL pw_pool%give_back_pw(tmp_g)
5177 IF (
ASSOCIATED(vxc_g%pw_grid) .AND.
ASSOCIATED(pw_pool))
THEN
5178 CALL pw_pool%give_back_pw(vxc_g)
5181 IF (my_compute_virial .AND. (gradient_f .OR. laplace_f))
THEN
5182 CALL deallocate_pw(virial_pw, pw_pool)
5185 CALL timestop(handle)