1651 pw_pool, xc_section, &
1652 do_triplet, calc_virial, virial_xc, deriv_set)
1654 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: v_xc, v_tau
1656 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: rho1_r, tau1_r
1657 TYPE(
pw_c1d_gs_type),
DIMENSION(:),
INTENT(IN),
POINTER :: rho1_g
1660 LOGICAL,
INTENT(IN) :: do_triplet
1661 LOGICAL,
INTENT(IN),
OPTIONAL :: calc_virial
1662 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(INOUT), &
1663 OPTIONAL :: virial_xc
1666 CHARACTER(len=*),
PARAMETER :: routinen =
'xc_calc_2nd_deriv_numerical'
1667 REAL(kind=
dp),
DIMENSION(-4:4, 4),
PARAMETER :: &
1668 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, &
1669 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, &
1670 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, &
1671 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])
1673 INTEGER :: handle, idir, ispin, nspins, istep, nsteps
1674 INTEGER,
DIMENSION(2, 3) :: bo
1675 LOGICAL :: gradient_f, lsd, my_calc_virial, tau_f, laplace_f, rho_f
1676 REAL(kind=
dp) :: exc, gradient_cut, h, weight, step, rho_cutoff
1677 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: dr1dr, dra1dra, drb1drb
1678 REAL(kind=
dp),
DIMENSION(3, 3) :: virial_dummy
1679 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: norm_drho, norm_drho2, norm_drho2a, &
1680 norm_drho2b, norm_drhoa, norm_drhob, &
1681 rho, rho1, rho1a, rho1b, rhoa, rhob, &
1682 tau_a, tau_b, tau, tau1, tau1a, tau1b, laplace, laplace1, &
1683 laplacea, laplaceb, laplace1a, laplace1b, &
1684 laplace2, laplace2a, laplace2b, deriv_data
1685 TYPE(
cp_3d_r_cp_type),
DIMENSION(3) :: drho, drho1, drho1a, drho1b, drhoa, drhob
1690 TYPE(
pw_r3d_rs_type) :: virial_pw, v_laplace, v_laplacea, v_laplaceb
1696 CALL timeset(routinen, handle)
1698 my_calc_virial = .false.
1699 IF (
PRESENT(calc_virial) .AND.
PRESENT(virial_xc)) my_calc_virial = calc_virial
1703 NULLIFY (tau, tau_r, tau_a, tau_b)
1707 IF (nsteps < lbound(weights, 2) .OR. nspins > ubound(weights, 2))
THEN
1708 cpabort(
"The number of steps must be a value from 1 to 4.")
1711 IF (nspins == 2)
THEN
1712 NULLIFY (vxc_rho, rho_g, vxc_tau)
1714 DO ispin = 1, nspins
1715 CALL pw_pool%create_pw(rho_r(ispin))
1717 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1719 DO ispin = 1, nspins
1720 CALL pw_pool%create_pw(tau_r(ispin))
1723 CALL xc_rho_set_get(rho_set, can_return_null=.true., rhoa=rhoa, rhob=rhob, tau_a=tau_a, tau_b=tau_b)
1724 DO istep = -nsteps, nsteps
1725 IF (istep == 0) cycle
1726 weight = weights(istep, nsteps)/h
1727 step = real(istep,
dp)*h
1728 CALL calc_resp_potential_numer_ab(rho_r, rho_g, rho1_r, rhoa, rhob, vxc_rho, &
1729 tau_r, tau1_r, tau_a, tau_b, vxc_tau, xc_section, pw_pool, step)
1730 DO ispin = 1, nspins
1731 CALL pw_axpy(vxc_rho(ispin), v_xc(ispin), weight)
1732 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1733 CALL pw_axpy(vxc_tau(ispin), v_tau(ispin), weight)
1736 DO ispin = 1, nspins
1737 CALL vxc_rho(ispin)%release()
1739 DEALLOCATE (vxc_rho)
1740 IF (
ASSOCIATED(vxc_tau))
THEN
1741 DO ispin = 1, nspins
1742 CALL vxc_tau(ispin)%release()
1744 DEALLOCATE (vxc_tau)
1747 ELSE IF (nspins == 1 .AND. do_triplet)
THEN
1748 NULLIFY (vxc_rho, vxc_tau, rho_g)
1751 CALL pw_pool%create_pw(rho_r(ispin))
1753 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1755 DO ispin = 1, nspins
1756 CALL pw_pool%create_pw(tau_r(ispin))
1759 CALL xc_rho_set_get(rho_set, can_return_null=.true., rhoa=rhoa, rhob=rhob, tau_a=tau_a, tau_b=tau_b)
1760 DO istep = -nsteps, nsteps
1761 IF (istep == 0) cycle
1762 weight = weights(istep, nsteps)/h
1763 step = real(istep,
dp)*h
1767 rho_r(1)%array(:, :, :) = rhoa(:, :, :) + step*rho1_r(1)%array(:, :, :)
1770 rho_r(2)%array(:, :, :) = rhob(:, :, :)
1772 IF (
ASSOCIATED(tau1_r))
THEN
1774 tau_r(1)%array(:, :, :) = tau_a(:, :, :) + step*tau1_r(1)%array(:, :, :)
1777 tau_r(2)%array(:, :, :) = tau_b(:, :, :)
1781 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1782 pw_pool, .false., virial_dummy)
1783 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1784 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1785 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1788 CALL vxc_rho(ispin)%release()
1790 DEALLOCATE (vxc_rho)
1791 IF (
ASSOCIATED(vxc_tau))
THEN
1793 CALL vxc_tau(ispin)%release()
1795 DEALLOCATE (vxc_tau)
1800 rho_r(1)%array(:, :, :) = rhoa(:, :, :)
1803 rho_r(2)%array(:, :, :) = rhob(:, :, :) + step*rho1_r(1)%array(:, :, :)
1805 IF (
ASSOCIATED(tau1_r))
THEN
1807 tau_r(1)%array(:, :, :) = tau_a(:, :, :)
1810 tau_r(2)%array(:, :, :) = tau_b(:, :, :) + step*tau1_r(1)%array(:, :, :)
1814 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1815 pw_pool, .false., virial_dummy)
1816 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1817 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1818 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1821 CALL vxc_rho(ispin)%release()
1823 DEALLOCATE (vxc_rho)
1824 IF (
ASSOCIATED(vxc_tau))
THEN
1826 CALL vxc_tau(ispin)%release()
1828 DEALLOCATE (vxc_tau)
1832 NULLIFY (vxc_rho, rho_r, rho_g, vxc_tau, tau_r, tau)
1834 CALL pw_pool%create_pw(rho_r(1))
1835 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(v_tau))
THEN
1837 CALL pw_pool%create_pw(tau_r(1))
1839 CALL xc_rho_set_get(rho_set, can_return_null=.true., rho=rho, tau=tau)
1840 DO istep = -nsteps, nsteps
1841 IF (istep == 0) cycle
1842 weight = weights(istep, nsteps)/h
1843 step = real(istep,
dp)*h
1846 rho_r(1)%array(:, :, :) = rho(:, :, :) + step*rho1_r(1)%array(:, :, :)
1848 IF (
ASSOCIATED(tau1_r) .AND.
ASSOCIATED(tau) .AND.
ASSOCIATED(tau1_r))
THEN
1850 tau_r(1)%array(:, :, :) = tau(:, :, :) + step*tau1_r(1)%array(:, :, :)
1854 CALL xc_vxc_pw_create(vxc_rho, vxc_tau, exc, rho_r, rho_g, tau_r, xc_section, &
1855 pw_pool, .false., virial_dummy)
1856 CALL pw_axpy(vxc_rho(1), v_xc(1), weight)
1857 IF (
ASSOCIATED(vxc_tau) .AND.
ASSOCIATED(v_tau))
THEN
1858 CALL pw_axpy(vxc_tau(1), v_tau(1), weight)
1860 CALL vxc_rho(1)%release()
1861 DEALLOCATE (vxc_rho)
1862 IF (
ASSOCIATED(vxc_tau))
THEN
1863 CALL vxc_tau(1)%release()
1864 DEALLOCATE (vxc_tau)
1869 IF (my_calc_virial)
THEN
1871 IF (nspins == 1 .AND. do_triplet)
THEN
1875 CALL check_for_derivatives(deriv_set, (nspins == 2), rho_f, gradient_f, tau_f, laplace_f)
1881 IF (gradient_f)
THEN
1882 bo = rho_set%local_bounds
1885 CALL allocate_pw(virial_pw, pw_pool, bo)
1892 drho_cutoff=gradient_cut, &
1905 CALL xc_rho_set_get(rho_set, drhoa=drhoa, drhob=drhob, norm_drho=norm_drho, &
1906 norm_drhoa=norm_drhoa, norm_drhob=norm_drhob, tau_a=tau_a, tau_b=tau_b, &
1907 laplace_rhoa=laplacea, laplace_rhob=laplaceb, can_return_null=.true.)
1908 CALL xc_rho_set_get(rho1_set, rhoa=rho1a, rhob=rho1b, drhoa=drho1a, drhob=drho1b, laplace_rhoa=laplace1a, &
1909 laplace_rhob=laplace1b, can_return_null=.true.)
1911 CALL calc_drho_from_ab(drho, drhoa, drhob)
1912 CALL calc_drho_from_ab(drho1, drho1a, drho1b)
1914 CALL xc_rho_set_get(rho_set, drho=drho, norm_drho=norm_drho, tau=tau, laplace_rho=laplace, can_return_null=.true.)
1915 CALL xc_rho_set_get(rho1_set, rho=rho1, drho=drho1, laplace_rho=laplace1, can_return_null=.true.)
1918 CALL prepare_dr1dr(dr1dr, drho, drho1)
1921 CALL prepare_dr1dr(dra1dra, drhoa, drho1a)
1922 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
1924 CALL allocate_pw(v_drho, pw_pool, bo)
1925 CALL allocate_pw(v_drhoa, pw_pool, bo)
1926 CALL allocate_pw(v_drhob, pw_pool, bo)
1928 IF (
ASSOCIATED(norm_drhoa))
CALL apply_drho(deriv_set, [
deriv_norm_drhoa], virial_pw, drhoa, drho1a, virial_xc, &
1929 norm_drhoa, gradient_cut, dra1dra, v_drhoa%array)
1930 IF (
ASSOCIATED(norm_drhob))
CALL apply_drho(deriv_set, [
deriv_norm_drhob], virial_pw, drhob, drho1b, virial_xc, &
1931 norm_drhob, gradient_cut, drb1drb, v_drhob%array)
1932 IF (
ASSOCIATED(norm_drho))
CALL apply_drho(deriv_set, [
deriv_norm_drho], virial_pw, drho, drho1, virial_xc, &
1933 norm_drho, gradient_cut, dr1dr, v_drho%array)
1936 cpassert(
ASSOCIATED(deriv_data))
1937 virial_pw%array(:, :, :) = -rho1a(:, :, :)
1938 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1940 CALL allocate_pw(v_laplacea, pw_pool, bo)
1943 cpassert(
ASSOCIATED(deriv_data))
1944 virial_pw%array(:, :, :) = -rho1b(:, :, :)
1945 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1947 CALL allocate_pw(v_laplaceb, pw_pool, bo)
1953 CALL allocate_pw(v_drho, pw_pool, bo)
1955 CALL apply_drho(deriv_set, [
deriv_norm_drho], virial_pw, drho, drho1, virial_xc, &
1956 norm_drho, gradient_cut, dr1dr, v_drho%array)
1959 cpassert(
ASSOCIATED(deriv_data))
1960 virial_pw%array(:, :, :) = -rho1(:, :, :)
1961 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
1963 CALL allocate_pw(v_laplace, pw_pool, bo)
1969 rho_r(1)%array = rhoa
1970 rho_r(2)%array = rhob
1972 rho_r(1)%array = rho
1974 IF (
ASSOCIATED(tau1_r))
THEN
1976 tau_r(1)%array = tau_a
1977 tau_r(2)%array = tau_b
1979 tau_r(1)%array = tau
1990 rho_cutoff=rho_cutoff, &
2001 CALL xc_rho_set_get(rho1_set, rhoa=rho1a, rhob=rho1b, tau_a=tau1a, tau_b=tau1b, &
2002 laplace_rhoa=laplace1a, laplace_rhob=laplace1b, can_return_null=.true.)
2003 CALL xc_rho_set_get(rho2_set, norm_drhoa=norm_drho2a, norm_drhob=norm_drho2b, &
2004 norm_drho=norm_drho2, laplace_rhoa=laplace2a, laplace_rhob=laplace2b, can_return_null=.true.)
2006 DO istep = -nsteps, nsteps
2007 IF (istep == 0) cycle
2008 weight = weights(istep, nsteps)/h
2009 step = real(istep,
dp)*h
2010 IF (
ASSOCIATED(norm_drhoa))
THEN
2011 CALL get_derivs_rho(norm_drho2a, norm_drhoa, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2012 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2013 norm_drhoa, gradient_cut, weight, rho1a, v_drhoa%array)
2014 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2015 norm_drhoa, gradient_cut, weight, rho1b, v_drhoa%array)
2017 norm_drhoa, gradient_cut, weight, dra1dra, v_drhoa%array)
2019 norm_drhoa, gradient_cut, weight, dra1dra, drb1drb, v_drhoa%array, v_drhob%array)
2021 norm_drhoa, gradient_cut, weight, dra1dra, dr1dr, v_drhoa%array, v_drho%array)
2023 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2024 norm_drhoa, gradient_cut, weight, tau1a, v_drhoa%array)
2025 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2026 norm_drhoa, gradient_cut, weight, tau1b, v_drhoa%array)
2030 norm_drhoa, gradient_cut, weight, laplace1a, v_drhoa%array)
2032 norm_drhoa, gradient_cut, weight, laplace1b, v_drhoa%array)
2036 IF (
ASSOCIATED(norm_drhob))
THEN
2037 CALL get_derivs_rho(norm_drho2b, norm_drhob, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2038 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2039 norm_drhob, gradient_cut, weight, rho1a, v_drhob%array)
2040 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2041 norm_drhob, gradient_cut, weight, rho1b, v_drhob%array)
2043 norm_drhob, gradient_cut, weight, drb1drb, v_drhob%array)
2045 norm_drhob, gradient_cut, weight, drb1drb, dra1dra, v_drhob%array, v_drhoa%array)
2047 norm_drhob, gradient_cut, weight, drb1drb, dr1dr, v_drhob%array, v_drho%array)
2049 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2050 norm_drhob, gradient_cut, weight, tau1a, v_drhob%array)
2051 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2052 norm_drhob, gradient_cut, weight, tau1b, v_drhob%array)
2056 norm_drhob, gradient_cut, weight, laplace1a, v_drhob%array)
2058 norm_drhob, gradient_cut, weight, laplace1b, v_drhob%array)
2062 IF (
ASSOCIATED(norm_drho))
THEN
2063 CALL get_derivs_rho(norm_drho2, norm_drho, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2064 CALL update_deriv_rho(deriv_set1, [
deriv_rhoa], bo, &
2065 norm_drho, gradient_cut, weight, rho1a, v_drho%array)
2066 CALL update_deriv_rho(deriv_set1, [
deriv_rhob], bo, &
2067 norm_drho, gradient_cut, weight, rho1b, v_drho%array)
2069 norm_drho, gradient_cut, weight, dr1dr, v_drho%array)
2071 norm_drho, gradient_cut, weight, dr1dr, dra1dra, v_drho%array, v_drhoa%array)
2073 norm_drho, gradient_cut, weight, dr1dr, drb1drb, v_drho%array, v_drhob%array)
2075 CALL update_deriv_rho(deriv_set1, [
deriv_tau_a], bo, &
2076 norm_drho, gradient_cut, weight, tau1a, v_drho%array)
2077 CALL update_deriv_rho(deriv_set1, [
deriv_tau_b], bo, &
2078 norm_drho, gradient_cut, weight, tau1b, v_drho%array)
2082 norm_drho, gradient_cut, weight, laplace1a, v_drho%array)
2084 norm_drho, gradient_cut, weight, laplace1b, v_drho%array)
2090 CALL get_derivs_rho(laplace2a, laplacea, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2093 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_rhoa], bo, &
2094 weight, rho1a, v_laplacea%array)
2095 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_rhob], bo, &
2096 weight, rho1b, v_laplacea%array)
2097 IF (
ASSOCIATED(norm_drho))
THEN
2098 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drho], bo, &
2099 weight, dr1dr, v_laplacea%array)
2101 IF (
ASSOCIATED(norm_drhoa))
THEN
2102 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drhoa], bo, &
2103 weight, dra1dra, v_laplacea%array)
2105 IF (
ASSOCIATED(norm_drhob))
THEN
2106 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_norm_drhob], bo, &
2107 weight, drb1drb, v_laplacea%array)
2110 IF (
ASSOCIATED(tau1a))
THEN
2111 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_tau_a], bo, &
2112 weight, tau1a, v_laplacea%array)
2114 IF (
ASSOCIATED(tau1b))
THEN
2115 CALL update_deriv(deriv_set1, laplacea, rho_cutoff, [
deriv_tau_b], bo, &
2116 weight, tau1b, v_laplacea%array)
2120 weight, laplace1a, v_laplacea%array)
2123 weight, laplace1b, v_laplacea%array)
2126 CALL get_derivs_rho(laplace2b, laplaceb, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2129 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_rhoa], bo, &
2130 weight, rho1a, v_laplaceb%array)
2131 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_rhob], bo, &
2132 weight, rho1b, v_laplaceb%array)
2133 IF (
ASSOCIATED(norm_drho))
THEN
2134 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drho], bo, &
2135 weight, dr1dr, v_laplaceb%array)
2137 IF (
ASSOCIATED(norm_drhoa))
THEN
2138 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drhoa], bo, &
2139 weight, dra1dra, v_laplaceb%array)
2141 IF (
ASSOCIATED(norm_drhob))
THEN
2142 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_norm_drhob], bo, &
2143 weight, drb1drb, v_laplaceb%array)
2147 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_tau_a], bo, &
2148 weight, tau1a, v_laplaceb%array)
2149 CALL update_deriv(deriv_set1, laplaceb, rho_cutoff, [
deriv_tau_b], bo, &
2150 weight, tau1b, v_laplaceb%array)
2154 weight, laplace1a, v_laplaceb%array)
2157 weight, laplace1b, v_laplaceb%array)
2161 CALL virial_drho_drho(virial_pw, drhoa, v_drhoa, virial_xc)
2162 CALL virial_drho_drho(virial_pw, drhob, v_drhob, virial_xc)
2163 CALL virial_drho_drho(virial_pw, drho, v_drho, virial_xc)
2165 CALL deallocate_pw(v_drho, pw_pool)
2166 CALL deallocate_pw(v_drhoa, pw_pool)
2167 CALL deallocate_pw(v_drhob, pw_pool)
2170 virial_pw%array(:, :, :) = -rhoa(:, :, :)
2171 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplacea%array)
2172 CALL deallocate_pw(v_laplacea, pw_pool)
2174 virial_pw%array(:, :, :) = -rhob(:, :, :)
2175 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplaceb%array)
2176 CALL deallocate_pw(v_laplaceb, pw_pool)
2179 CALL deallocate_pw(virial_pw, pw_pool)
2182 DEALLOCATE (drho(idir)%array)
2183 DEALLOCATE (drho1(idir)%array)
2185 DEALLOCATE (dra1dra, drb1drb)
2188 CALL xc_rho_set_get(rho1_set, rho=rho1, tau=tau1, laplace_rho=laplace1, can_return_null=.true.)
2189 CALL xc_rho_set_get(rho2_set, norm_drho=norm_drho2, laplace_rho=laplace2, can_return_null=.true.)
2191 DO istep = -nsteps, nsteps
2192 IF (istep == 0) cycle
2193 weight = weights(istep, nsteps)/h
2194 step = real(istep,
dp)*h
2195 CALL get_derivs_rho(norm_drho2, norm_drho, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2198 CALL update_deriv_rho(deriv_set1, [
deriv_rho], bo, &
2199 norm_drho, gradient_cut, weight, rho1, v_drho%array)
2201 norm_drho, gradient_cut, weight, dr1dr, v_drho%array)
2204 CALL update_deriv_rho(deriv_set1, [
deriv_tau], bo, &
2205 norm_drho, gradient_cut, weight, tau1, v_drho%array)
2209 norm_drho, gradient_cut, weight, laplace1, v_drho%array)
2211 CALL get_derivs_rho(laplace2, laplace, step, xc_fun_section, lsd, rho2_set, deriv_set1)
2214 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_rho], bo, &
2215 weight, rho1, v_laplace%array)
2216 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_norm_drho], bo, &
2217 weight, dr1dr, v_laplace%array)
2220 CALL update_deriv(deriv_set1, laplace, rho_cutoff, [
deriv_tau], bo, &
2221 weight, tau1, v_laplace%array)
2225 weight, laplace1, v_laplace%array)
2230 CALL virial_drho_drho(virial_pw, drho, v_drho, virial_xc)
2232 CALL deallocate_pw(v_drho, pw_pool)
2235 virial_pw%array(:, :, :) = -rho(:, :, :)
2236 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace%array)
2237 CALL deallocate_pw(v_laplace, pw_pool)
2240 CALL deallocate_pw(virial_pw, pw_pool)
2253 DO ispin = 1,
SIZE(rho_r)
2254 CALL pw_pool%give_back_pw(rho_r(ispin))
2258 IF (
ASSOCIATED(tau_r))
THEN
2259 DO ispin = 1,
SIZE(tau_r)
2260 CALL pw_pool%give_back_pw(tau_r(ispin))
2265 CALL timestop(handle)
2638 LOGICAL,
INTENT(IN),
OPTIONAL :: gapw
2639 REAL(kind=
dp),
DIMENSION(:, :, :, :),
OPTIONAL, &
2641 REAL(kind=
dp),
INTENT(in),
OPTIONAL :: tddfpt_fac
2642 LOGICAL,
INTENT(IN),
OPTIONAL :: compute_virial
2643 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(INOUT), &
2644 OPTIONAL :: virial_xc
2646 CHARACTER(len=*),
PARAMETER :: routinen =
'xc_calc_2nd_deriv_analytical'
2648 INTEGER :: handle, i, ia, idir, ir, ispin, j, jdir, &
2649 k, nspins, xc_deriv_method_id
2650 INTEGER,
DIMENSION(2, 3) :: bo
2651 LOGICAL :: gradient_f, lsd, my_compute_virial, &
2652 my_gapw, tau_f, laplace_f, rho_f
2653 REAL(kind=
dp) ::
fac, gradient_cut, tmp, factor2
2654 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: dr1dr, dra1dra, drb1drb
2655 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: deriv_data, e_drhoa, e_drhob, &
2656 e_drho, norm_drho, norm_drhoa, &
2657 norm_drhob, rho1, rho1a, rho1b, &
2658 tau1, tau1a, tau1b, laplace1, laplace1a, laplace1b, &
2660 TYPE(
cp_3d_r_cp_type),
DIMENSION(3) :: drho, drho1, drho1a, drho1b, drhoa, drhob
2661 TYPE(
pw_r3d_rs_type),
DIMENSION(:),
ALLOCATABLE :: v_drhoa, v_drhob, v_drho, v_laplace
2667 CALL timeset(routinen, handle)
2669 NULLIFY (e_drhoa, e_drhob, e_drho)
2672 IF (
PRESENT(gapw)) my_gapw = gapw
2674 my_compute_virial = .false.
2675 IF (
PRESENT(compute_virial)) my_compute_virial = compute_virial
2677 cpassert(
ASSOCIATED(v_xc))
2678 cpassert(
ASSOCIATED(xc_section))
2680 cpassert(
PRESENT(vxg))
2682 IF (my_compute_virial)
THEN
2683 cpassert(
PRESENT(virial_xc))
2687 i_val=xc_deriv_method_id)
2690 lsd =
ASSOCIATED(rho_set%rhoa)
2693 IF (
PRESENT(tddfpt_fac))
fac = tddfpt_fac
2694 IF (
PRESENT(tddfpt_fac)) factor2 = tddfpt_fac
2696 bo = rho_set%local_bounds
2698 CALL check_for_derivatives(deriv_set, lsd, rho_f, gradient_f, tau_f, laplace_f)
2701 cpassert(
ASSOCIATED(v_xc_tau))
2704 IF (gradient_f)
THEN
2705 ALLOCATE (v_drho_r(3, nspins), v_drho(nspins))
2706 DO ispin = 1, nspins
2708 CALL allocate_pw(v_drho_r(idir, ispin), pw_pool, bo)
2710 CALL allocate_pw(v_drho(ispin), pw_pool, bo)
2714 IF (
ASSOCIATED(pw_pool))
THEN
2715 CALL pw_pool%create_pw(tmp_g)
2716 CALL pw_pool%create_pw(vxc_g)
2719 cpabort(
"XC_DERIV method is not implemented in GAPW")
2724 DO ispin = 1, nspins
2725 v_xc(ispin)%array = 0.0_dp
2729 DO ispin = 1, nspins
2730 v_xc_tau(ispin)%array = 0.0_dp
2734 IF (laplace_f .AND. my_gapw) &
2735 cpabort(
"Laplace-dependent functional not implemented with GAPW!")
2737 IF (my_compute_virial .AND. (gradient_f .OR. laplace_f))
CALL allocate_pw(virial_pw, pw_pool, bo)
2747 IF (gradient_f)
THEN
2749 norm_drho=norm_drho, norm_drhoa=norm_drhoa, norm_drhob=norm_drhob)
2752 CALL calc_drho_from_ab(drho, drhoa, drhob)
2753 CALL calc_drho_from_ab(drho1, drho1a, drho1b)
2755 CALL prepare_dr1dr(dra1dra, drhoa, drho1a)
2756 IF (nspins /= 1)
THEN
2757 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
2758 CALL prepare_dr1dr(dr1dr, drho, drho1)
2760 CALL prepare_dr1dr(drb1drb, drhob, drho1b)
2761 CALL prepare_dr1dr_ab(dr1dr, drhoa, drhob, drho1a, drho1b,
fac)
2764 ALLOCATE (v_drhoa(nspins), v_drhob(nspins))
2765 DO ispin = 1, nspins
2766 CALL allocate_pw(v_drhoa(ispin), pw_pool, bo)
2767 CALL allocate_pw(v_drhob(ispin), pw_pool, bo)
2773 CALL xc_rho_set_get(rho1_set, laplace_rhoa=laplace1a, laplace_rhob=laplace1b)
2775 ALLOCATE (v_laplace(nspins))
2776 DO ispin = 1, nspins
2777 CALL allocate_pw(v_laplace(ispin), pw_pool, bo)
2780 IF (my_compute_virial)
CALL xc_rho_set_get(rho_set, rhoa=rhoa, rhob=rhob)
2787 IF (nspins /= 1)
THEN
2790 IF (
ASSOCIATED(deriv_att))
THEN
2794 DO k = bo(1, 3), bo(2, 3)
2795 DO j = bo(1, 2), bo(2, 2)
2796 DO i = bo(1, 1), bo(2, 1)
2797 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2798 deriv_data(i, j, k)*rho1a(i, j, k)
2804 IF (
ASSOCIATED(deriv_att))
THEN
2808 DO k = bo(1, 3), bo(2, 3)
2809 DO j = bo(1, 2), bo(2, 2)
2810 DO i = bo(1, 1), bo(2, 1)
2811 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2812 deriv_data(i, j, k)*rho1b(i, j, k)
2818 IF (
ASSOCIATED(deriv_att))
THEN
2822 DO k = bo(1, 3), bo(2, 3)
2823 DO j = bo(1, 2), bo(2, 2)
2824 DO i = bo(1, 1), bo(2, 1)
2825 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2826 deriv_data(i, j, k)*dr1dr(i, j, k)
2832 IF (
ASSOCIATED(deriv_att))
THEN
2836 DO k = bo(1, 3), bo(2, 3)
2837 DO j = bo(1, 2), bo(2, 2)
2838 DO i = bo(1, 1), bo(2, 1)
2839 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2840 deriv_data(i, j, k)*dra1dra(i, j, k)
2846 IF (
ASSOCIATED(deriv_att))
THEN
2850 DO k = bo(1, 3), bo(2, 3)
2851 DO j = bo(1, 2), bo(2, 2)
2852 DO i = bo(1, 1), bo(2, 1)
2853 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2854 deriv_data(i, j, k)*drb1drb(i, j, k)
2860 IF (
ASSOCIATED(deriv_att))
THEN
2864 DO k = bo(1, 3), bo(2, 3)
2865 DO j = bo(1, 2), bo(2, 2)
2866 DO i = bo(1, 1), bo(2, 1)
2867 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2868 deriv_data(i, j, k)*tau1a(i, j, k)
2874 IF (
ASSOCIATED(deriv_att))
THEN
2878 DO k = bo(1, 3), bo(2, 3)
2879 DO j = bo(1, 2), bo(2, 2)
2880 DO i = bo(1, 1), bo(2, 1)
2881 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2882 deriv_data(i, j, k)*tau1b(i, j, k)
2888 IF (
ASSOCIATED(deriv_att))
THEN
2892 DO k = bo(1, 3), bo(2, 3)
2893 DO j = bo(1, 2), bo(2, 2)
2894 DO i = bo(1, 1), bo(2, 1)
2895 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2896 deriv_data(i, j, k)*laplace1a(i, j, k)
2902 IF (
ASSOCIATED(deriv_att))
THEN
2906 DO k = bo(1, 3), bo(2, 3)
2907 DO j = bo(1, 2), bo(2, 2)
2908 DO i = bo(1, 1), bo(2, 1)
2909 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
2910 deriv_data(i, j, k)*laplace1b(i, j, k)
2918 IF (
ASSOCIATED(deriv_att))
THEN
2922 DO k = bo(1, 3), bo(2, 3)
2923 DO j = bo(1, 2), bo(2, 2)
2924 DO i = bo(1, 1), bo(2, 1)
2925 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2926 deriv_data(i, j, k)*rho1a(i, j, k)
2932 IF (
ASSOCIATED(deriv_att))
THEN
2936 DO k = bo(1, 3), bo(2, 3)
2937 DO j = bo(1, 2), bo(2, 2)
2938 DO i = bo(1, 1), bo(2, 1)
2939 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2940 deriv_data(i, j, k)*rho1b(i, j, k)
2946 IF (
ASSOCIATED(deriv_att))
THEN
2950 DO k = bo(1, 3), bo(2, 3)
2951 DO j = bo(1, 2), bo(2, 2)
2952 DO i = bo(1, 1), bo(2, 1)
2953 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2954 deriv_data(i, j, k)*dr1dr(i, j, k)
2960 IF (
ASSOCIATED(deriv_att))
THEN
2964 DO k = bo(1, 3), bo(2, 3)
2965 DO j = bo(1, 2), bo(2, 2)
2966 DO i = bo(1, 1), bo(2, 1)
2967 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2968 deriv_data(i, j, k)*dra1dra(i, j, k)
2974 IF (
ASSOCIATED(deriv_att))
THEN
2978 DO k = bo(1, 3), bo(2, 3)
2979 DO j = bo(1, 2), bo(2, 2)
2980 DO i = bo(1, 1), bo(2, 1)
2981 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2982 deriv_data(i, j, k)*drb1drb(i, j, k)
2988 IF (
ASSOCIATED(deriv_att))
THEN
2992 DO k = bo(1, 3), bo(2, 3)
2993 DO j = bo(1, 2), bo(2, 2)
2994 DO i = bo(1, 1), bo(2, 1)
2995 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
2996 deriv_data(i, j, k)*tau1a(i, j, k)
3002 IF (
ASSOCIATED(deriv_att))
THEN
3006 DO k = bo(1, 3), bo(2, 3)
3007 DO j = bo(1, 2), bo(2, 2)
3008 DO i = bo(1, 1), bo(2, 1)
3009 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3010 deriv_data(i, j, k)*tau1b(i, j, k)
3016 IF (
ASSOCIATED(deriv_att))
THEN
3020 DO k = bo(1, 3), bo(2, 3)
3021 DO j = bo(1, 2), bo(2, 2)
3022 DO i = bo(1, 1), bo(2, 1)
3023 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3024 deriv_data(i, j, k)*laplace1a(i, j, k)
3030 IF (
ASSOCIATED(deriv_att))
THEN
3034 DO k = bo(1, 3), bo(2, 3)
3035 DO j = bo(1, 2), bo(2, 2)
3036 DO i = bo(1, 1), bo(2, 1)
3037 v_xc(2)%array(i, j, k) = v_xc(2)%array(i, j, k) + &
3038 deriv_data(i, j, k)*laplace1b(i, j, k)
3046 IF (
ASSOCIATED(deriv_att))
THEN
3050 DO k = bo(1, 3), bo(2, 3)
3051 DO j = bo(1, 2), bo(2, 2)
3052 DO i = bo(1, 1), bo(2, 1)
3053 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3054 deriv_data(i, j, k)*rho1a(i, j, k)
3055 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3056 deriv_data(i, j, k)*rho1a(i, j, k)
3062 IF (
ASSOCIATED(deriv_att))
THEN
3066 DO k = bo(1, 3), bo(2, 3)
3067 DO j = bo(1, 2), bo(2, 2)
3068 DO i = bo(1, 1), bo(2, 1)
3069 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3070 deriv_data(i, j, k)*rho1b(i, j, k)
3071 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3072 deriv_data(i, j, k)*rho1b(i, j, k)
3078 IF (
ASSOCIATED(deriv_att))
THEN
3082 DO k = bo(1, 3), bo(2, 3)
3083 DO j = bo(1, 2), bo(2, 2)
3084 DO i = bo(1, 1), bo(2, 1)
3085 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3086 deriv_data(i, j, k)*dr1dr(i, j, k)
3087 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3088 deriv_data(i, j, k)*dr1dr(i, j, k)
3094 IF (
ASSOCIATED(deriv_att))
THEN
3098 DO k = bo(1, 3), bo(2, 3)
3099 DO j = bo(1, 2), bo(2, 2)
3100 DO i = bo(1, 1), bo(2, 1)
3101 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3102 deriv_data(i, j, k)*dra1dra(i, j, k)
3103 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3104 deriv_data(i, j, k)*dra1dra(i, j, k)
3110 IF (
ASSOCIATED(deriv_att))
THEN
3114 DO k = bo(1, 3), bo(2, 3)
3115 DO j = bo(1, 2), bo(2, 2)
3116 DO i = bo(1, 1), bo(2, 1)
3117 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3118 deriv_data(i, j, k)*drb1drb(i, j, k)
3119 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3120 deriv_data(i, j, k)*drb1drb(i, j, k)
3126 IF (
ASSOCIATED(deriv_att))
THEN
3130 DO k = bo(1, 3), bo(2, 3)
3131 DO j = bo(1, 2), bo(2, 2)
3132 DO i = bo(1, 1), bo(2, 1)
3133 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3134 deriv_data(i, j, k)*tau1a(i, j, k)
3135 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3136 deriv_data(i, j, k)*tau1a(i, j, k)
3142 IF (
ASSOCIATED(deriv_att))
THEN
3146 DO k = bo(1, 3), bo(2, 3)
3147 DO j = bo(1, 2), bo(2, 2)
3148 DO i = bo(1, 1), bo(2, 1)
3149 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3150 deriv_data(i, j, k)*tau1b(i, j, k)
3151 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3152 deriv_data(i, j, k)*tau1b(i, j, k)
3158 IF (
ASSOCIATED(deriv_att))
THEN
3162 DO k = bo(1, 3), bo(2, 3)
3163 DO j = bo(1, 2), bo(2, 2)
3164 DO i = bo(1, 1), bo(2, 1)
3165 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3166 deriv_data(i, j, k)*laplace1a(i, j, k)
3167 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3168 deriv_data(i, j, k)*laplace1a(i, j, k)
3174 IF (
ASSOCIATED(deriv_att))
THEN
3178 DO k = bo(1, 3), bo(2, 3)
3179 DO j = bo(1, 2), bo(2, 2)
3180 DO i = bo(1, 1), bo(2, 1)
3181 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
3182 deriv_data(i, j, k)*laplace1b(i, j, k)
3183 v_drho(2)%array(i, j, k) = v_drho(2)%array(i, j, k) - &
3184 deriv_data(i, j, k)*laplace1b(i, j, k)
3191 IF (
ASSOCIATED(deriv_att))
THEN
3195 IF (my_compute_virial)
THEN
3196 CALL virial_drho_drho1(virial_pw, drho, drho1, deriv_data, virial_xc)
3200 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
3201 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
3202 v_drho(2)%array(:, :, :) = v_drho(2)%array(:, :, :) + &
3203 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
3208 IF (
ASSOCIATED(deriv_att))
THEN
3212 DO k = bo(1, 3), bo(2, 3)
3213 DO j = bo(1, 2), bo(2, 2)
3214 DO i = bo(1, 1), bo(2, 1)
3215 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3216 deriv_data(i, j, k)*rho1a(i, j, k)
3222 IF (
ASSOCIATED(deriv_att))
THEN
3226 DO k = bo(1, 3), bo(2, 3)
3227 DO j = bo(1, 2), bo(2, 2)
3228 DO i = bo(1, 1), bo(2, 1)
3229 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3230 deriv_data(i, j, k)*rho1b(i, j, k)
3236 IF (
ASSOCIATED(deriv_att))
THEN
3240 DO k = bo(1, 3), bo(2, 3)
3241 DO j = bo(1, 2), bo(2, 2)
3242 DO i = bo(1, 1), bo(2, 1)
3243 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3244 deriv_data(i, j, k)*dr1dr(i, j, k)
3250 IF (
ASSOCIATED(deriv_att))
THEN
3254 DO k = bo(1, 3), bo(2, 3)
3255 DO j = bo(1, 2), bo(2, 2)
3256 DO i = bo(1, 1), bo(2, 1)
3257 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3258 deriv_data(i, j, k)*dra1dra(i, j, k)
3264 IF (
ASSOCIATED(deriv_att))
THEN
3268 DO k = bo(1, 3), bo(2, 3)
3269 DO j = bo(1, 2), bo(2, 2)
3270 DO i = bo(1, 1), bo(2, 1)
3271 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3272 deriv_data(i, j, k)*drb1drb(i, j, k)
3278 IF (
ASSOCIATED(deriv_att))
THEN
3282 DO k = bo(1, 3), bo(2, 3)
3283 DO j = bo(1, 2), bo(2, 2)
3284 DO i = bo(1, 1), bo(2, 1)
3285 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3286 deriv_data(i, j, k)*tau1a(i, j, k)
3292 IF (
ASSOCIATED(deriv_att))
THEN
3296 DO k = bo(1, 3), bo(2, 3)
3297 DO j = bo(1, 2), bo(2, 2)
3298 DO i = bo(1, 1), bo(2, 1)
3299 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3300 deriv_data(i, j, k)*tau1b(i, j, k)
3306 IF (
ASSOCIATED(deriv_att))
THEN
3310 DO k = bo(1, 3), bo(2, 3)
3311 DO j = bo(1, 2), bo(2, 2)
3312 DO i = bo(1, 1), bo(2, 1)
3313 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3314 deriv_data(i, j, k)*laplace1a(i, j, k)
3320 IF (
ASSOCIATED(deriv_att))
THEN
3324 DO k = bo(1, 3), bo(2, 3)
3325 DO j = bo(1, 2), bo(2, 2)
3326 DO i = bo(1, 1), bo(2, 1)
3327 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
3328 deriv_data(i, j, k)*laplace1b(i, j, k)
3335 IF (
ASSOCIATED(deriv_att))
THEN
3339 IF (my_compute_virial)
THEN
3340 CALL virial_drho_drho1(virial_pw, drhoa, drho1a, deriv_data, virial_xc)
3344 v_drhoa(1)%array(:, :, :) = v_drhoa(1)%array(:, :, :) + &
3345 deriv_data(:, :, :)*dra1dra(:, :, :)/max(gradient_cut, norm_drhoa(:, :, :))**2
3350 IF (
ASSOCIATED(deriv_att))
THEN
3354 DO k = bo(1, 3), bo(2, 3)
3355 DO j = bo(1, 2), bo(2, 2)
3356 DO i = bo(1, 1), bo(2, 1)
3357 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3358 deriv_data(i, j, k)*rho1a(i, j, k)
3364 IF (
ASSOCIATED(deriv_att))
THEN
3368 DO k = bo(1, 3), bo(2, 3)
3369 DO j = bo(1, 2), bo(2, 2)
3370 DO i = bo(1, 1), bo(2, 1)
3371 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3372 deriv_data(i, j, k)*rho1b(i, j, k)
3378 IF (
ASSOCIATED(deriv_att))
THEN
3382 DO k = bo(1, 3), bo(2, 3)
3383 DO j = bo(1, 2), bo(2, 2)
3384 DO i = bo(1, 1), bo(2, 1)
3385 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3386 deriv_data(i, j, k)*dr1dr(i, j, k)
3392 IF (
ASSOCIATED(deriv_att))
THEN
3396 DO k = bo(1, 3), bo(2, 3)
3397 DO j = bo(1, 2), bo(2, 2)
3398 DO i = bo(1, 1), bo(2, 1)
3399 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3400 deriv_data(i, j, k)*dra1dra(i, j, k)
3406 IF (
ASSOCIATED(deriv_att))
THEN
3410 DO k = bo(1, 3), bo(2, 3)
3411 DO j = bo(1, 2), bo(2, 2)
3412 DO i = bo(1, 1), bo(2, 1)
3413 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3414 deriv_data(i, j, k)*drb1drb(i, j, k)
3420 IF (
ASSOCIATED(deriv_att))
THEN
3424 DO k = bo(1, 3), bo(2, 3)
3425 DO j = bo(1, 2), bo(2, 2)
3426 DO i = bo(1, 1), bo(2, 1)
3427 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3428 deriv_data(i, j, k)*tau1a(i, j, k)
3434 IF (
ASSOCIATED(deriv_att))
THEN
3438 DO k = bo(1, 3), bo(2, 3)
3439 DO j = bo(1, 2), bo(2, 2)
3440 DO i = bo(1, 1), bo(2, 1)
3441 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3442 deriv_data(i, j, k)*tau1b(i, j, k)
3448 IF (
ASSOCIATED(deriv_att))
THEN
3452 DO k = bo(1, 3), bo(2, 3)
3453 DO j = bo(1, 2), bo(2, 2)
3454 DO i = bo(1, 1), bo(2, 1)
3455 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3456 deriv_data(i, j, k)*laplace1a(i, j, k)
3462 IF (
ASSOCIATED(deriv_att))
THEN
3466 DO k = bo(1, 3), bo(2, 3)
3467 DO j = bo(1, 2), bo(2, 2)
3468 DO i = bo(1, 1), bo(2, 1)
3469 v_drhob(2)%array(i, j, k) = v_drhob(2)%array(i, j, k) - &
3470 deriv_data(i, j, k)*laplace1b(i, j, k)
3477 IF (
ASSOCIATED(deriv_att))
THEN
3481 IF (my_compute_virial)
THEN
3482 CALL virial_drho_drho1(virial_pw, drhob, drho1b, deriv_data, virial_xc)
3486 v_drhob(2)%array(:, :, :) = v_drhob(2)%array(:, :, :) + &
3487 deriv_data(:, :, :)*drb1drb(:, :, :)/max(gradient_cut, norm_drhob(:, :, :))**2
3492 IF (
ASSOCIATED(deriv_att))
THEN
3496 DO k = bo(1, 3), bo(2, 3)
3497 DO j = bo(1, 2), bo(2, 2)
3498 DO i = bo(1, 1), bo(2, 1)
3499 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3500 deriv_data(i, j, k)*rho1a(i, j, k)
3506 IF (
ASSOCIATED(deriv_att))
THEN
3510 DO k = bo(1, 3), bo(2, 3)
3511 DO j = bo(1, 2), bo(2, 2)
3512 DO i = bo(1, 1), bo(2, 1)
3513 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3514 deriv_data(i, j, k)*rho1b(i, j, k)
3520 IF (
ASSOCIATED(deriv_att))
THEN
3524 DO k = bo(1, 3), bo(2, 3)
3525 DO j = bo(1, 2), bo(2, 2)
3526 DO i = bo(1, 1), bo(2, 1)
3527 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3528 deriv_data(i, j, k)*dr1dr(i, j, k)
3534 IF (
ASSOCIATED(deriv_att))
THEN
3538 DO k = bo(1, 3), bo(2, 3)
3539 DO j = bo(1, 2), bo(2, 2)
3540 DO i = bo(1, 1), bo(2, 1)
3541 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3542 deriv_data(i, j, k)*dra1dra(i, j, k)
3548 IF (
ASSOCIATED(deriv_att))
THEN
3552 DO k = bo(1, 3), bo(2, 3)
3553 DO j = bo(1, 2), bo(2, 2)
3554 DO i = bo(1, 1), bo(2, 1)
3555 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3556 deriv_data(i, j, k)*drb1drb(i, j, k)
3562 IF (
ASSOCIATED(deriv_att))
THEN
3566 DO k = bo(1, 3), bo(2, 3)
3567 DO j = bo(1, 2), bo(2, 2)
3568 DO i = bo(1, 1), bo(2, 1)
3569 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3570 deriv_data(i, j, k)*tau1a(i, j, k)
3576 IF (
ASSOCIATED(deriv_att))
THEN
3580 DO k = bo(1, 3), bo(2, 3)
3581 DO j = bo(1, 2), bo(2, 2)
3582 DO i = bo(1, 1), bo(2, 1)
3583 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3584 deriv_data(i, j, k)*tau1b(i, j, k)
3590 IF (
ASSOCIATED(deriv_att))
THEN
3594 DO k = bo(1, 3), bo(2, 3)
3595 DO j = bo(1, 2), bo(2, 2)
3596 DO i = bo(1, 1), bo(2, 1)
3597 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3598 deriv_data(i, j, k)*laplace1a(i, j, k)
3604 IF (
ASSOCIATED(deriv_att))
THEN
3608 DO k = bo(1, 3), bo(2, 3)
3609 DO j = bo(1, 2), bo(2, 2)
3610 DO i = bo(1, 1), bo(2, 1)
3611 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
3612 deriv_data(i, j, k)*laplace1b(i, j, k)
3620 IF (
ASSOCIATED(deriv_att))
THEN
3624 DO k = bo(1, 3), bo(2, 3)
3625 DO j = bo(1, 2), bo(2, 2)
3626 DO i = bo(1, 1), bo(2, 1)
3627 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3628 deriv_data(i, j, k)*rho1a(i, j, k)
3634 IF (
ASSOCIATED(deriv_att))
THEN
3638 DO k = bo(1, 3), bo(2, 3)
3639 DO j = bo(1, 2), bo(2, 2)
3640 DO i = bo(1, 1), bo(2, 1)
3641 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3642 deriv_data(i, j, k)*rho1b(i, j, k)
3648 IF (
ASSOCIATED(deriv_att))
THEN
3652 DO k = bo(1, 3), bo(2, 3)
3653 DO j = bo(1, 2), bo(2, 2)
3654 DO i = bo(1, 1), bo(2, 1)
3655 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3656 deriv_data(i, j, k)*dr1dr(i, j, k)
3662 IF (
ASSOCIATED(deriv_att))
THEN
3666 DO k = bo(1, 3), bo(2, 3)
3667 DO j = bo(1, 2), bo(2, 2)
3668 DO i = bo(1, 1), bo(2, 1)
3669 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3670 deriv_data(i, j, k)*dra1dra(i, j, k)
3676 IF (
ASSOCIATED(deriv_att))
THEN
3680 DO k = bo(1, 3), bo(2, 3)
3681 DO j = bo(1, 2), bo(2, 2)
3682 DO i = bo(1, 1), bo(2, 1)
3683 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3684 deriv_data(i, j, k)*drb1drb(i, j, k)
3690 IF (
ASSOCIATED(deriv_att))
THEN
3694 DO k = bo(1, 3), bo(2, 3)
3695 DO j = bo(1, 2), bo(2, 2)
3696 DO i = bo(1, 1), bo(2, 1)
3697 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3698 deriv_data(i, j, k)*tau1a(i, j, k)
3704 IF (
ASSOCIATED(deriv_att))
THEN
3708 DO k = bo(1, 3), bo(2, 3)
3709 DO j = bo(1, 2), bo(2, 2)
3710 DO i = bo(1, 1), bo(2, 1)
3711 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3712 deriv_data(i, j, k)*tau1b(i, j, k)
3718 IF (
ASSOCIATED(deriv_att))
THEN
3722 DO k = bo(1, 3), bo(2, 3)
3723 DO j = bo(1, 2), bo(2, 2)
3724 DO i = bo(1, 1), bo(2, 1)
3725 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3726 deriv_data(i, j, k)*laplace1a(i, j, k)
3732 IF (
ASSOCIATED(deriv_att))
THEN
3736 DO k = bo(1, 3), bo(2, 3)
3737 DO j = bo(1, 2), bo(2, 2)
3738 DO i = bo(1, 1), bo(2, 1)
3739 v_xc_tau(2)%array(i, j, k) = v_xc_tau(2)%array(i, j, k) + &
3740 deriv_data(i, j, k)*laplace1b(i, j, k)
3748 IF (
ASSOCIATED(deriv_att))
THEN
3752 DO k = bo(1, 3), bo(2, 3)
3753 DO j = bo(1, 2), bo(2, 2)
3754 DO i = bo(1, 1), bo(2, 1)
3755 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3756 deriv_data(i, j, k)*rho1a(i, j, k)
3762 IF (
ASSOCIATED(deriv_att))
THEN
3766 DO k = bo(1, 3), bo(2, 3)
3767 DO j = bo(1, 2), bo(2, 2)
3768 DO i = bo(1, 1), bo(2, 1)
3769 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3770 deriv_data(i, j, k)*rho1b(i, j, k)
3776 IF (
ASSOCIATED(deriv_att))
THEN
3780 DO k = bo(1, 3), bo(2, 3)
3781 DO j = bo(1, 2), bo(2, 2)
3782 DO i = bo(1, 1), bo(2, 1)
3783 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3784 deriv_data(i, j, k)*dr1dr(i, j, k)
3790 IF (
ASSOCIATED(deriv_att))
THEN
3794 DO k = bo(1, 3), bo(2, 3)
3795 DO j = bo(1, 2), bo(2, 2)
3796 DO i = bo(1, 1), bo(2, 1)
3797 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3798 deriv_data(i, j, k)*dra1dra(i, j, k)
3804 IF (
ASSOCIATED(deriv_att))
THEN
3808 DO k = bo(1, 3), bo(2, 3)
3809 DO j = bo(1, 2), bo(2, 2)
3810 DO i = bo(1, 1), bo(2, 1)
3811 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3812 deriv_data(i, j, k)*drb1drb(i, j, k)
3818 IF (
ASSOCIATED(deriv_att))
THEN
3822 DO k = bo(1, 3), bo(2, 3)
3823 DO j = bo(1, 2), bo(2, 2)
3824 DO i = bo(1, 1), bo(2, 1)
3825 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3826 deriv_data(i, j, k)*tau1a(i, j, k)
3832 IF (
ASSOCIATED(deriv_att))
THEN
3836 DO k = bo(1, 3), bo(2, 3)
3837 DO j = bo(1, 2), bo(2, 2)
3838 DO i = bo(1, 1), bo(2, 1)
3839 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3840 deriv_data(i, j, k)*tau1b(i, j, k)
3846 IF (
ASSOCIATED(deriv_att))
THEN
3850 DO k = bo(1, 3), bo(2, 3)
3851 DO j = bo(1, 2), bo(2, 2)
3852 DO i = bo(1, 1), bo(2, 1)
3853 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3854 deriv_data(i, j, k)*laplace1a(i, j, k)
3860 IF (
ASSOCIATED(deriv_att))
THEN
3864 DO k = bo(1, 3), bo(2, 3)
3865 DO j = bo(1, 2), bo(2, 2)
3866 DO i = bo(1, 1), bo(2, 1)
3867 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
3868 deriv_data(i, j, k)*laplace1b(i, j, k)
3875 IF (my_compute_virial)
THEN
3877 IF (
ASSOCIATED(deriv_att))
THEN
3880 virial_pw%array(:, :, :) = -rho1a(:, :, :)
3881 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
3885 IF (
ASSOCIATED(deriv_att))
THEN
3889 DO k = bo(1, 3), bo(2, 3)
3890 DO j = bo(1, 2), bo(2, 2)
3891 DO i = bo(1, 1), bo(2, 1)
3892 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3893 deriv_data(i, j, k)*rho1a(i, j, k)
3899 IF (
ASSOCIATED(deriv_att))
THEN
3903 DO k = bo(1, 3), bo(2, 3)
3904 DO j = bo(1, 2), bo(2, 2)
3905 DO i = bo(1, 1), bo(2, 1)
3906 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3907 deriv_data(i, j, k)*rho1b(i, j, k)
3913 IF (
ASSOCIATED(deriv_att))
THEN
3917 DO k = bo(1, 3), bo(2, 3)
3918 DO j = bo(1, 2), bo(2, 2)
3919 DO i = bo(1, 1), bo(2, 1)
3920 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3921 deriv_data(i, j, k)*dr1dr(i, j, k)
3927 IF (
ASSOCIATED(deriv_att))
THEN
3931 DO k = bo(1, 3), bo(2, 3)
3932 DO j = bo(1, 2), bo(2, 2)
3933 DO i = bo(1, 1), bo(2, 1)
3934 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3935 deriv_data(i, j, k)*dra1dra(i, j, k)
3941 IF (
ASSOCIATED(deriv_att))
THEN
3945 DO k = bo(1, 3), bo(2, 3)
3946 DO j = bo(1, 2), bo(2, 2)
3947 DO i = bo(1, 1), bo(2, 1)
3948 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3949 deriv_data(i, j, k)*drb1drb(i, j, k)
3955 IF (
ASSOCIATED(deriv_att))
THEN
3959 DO k = bo(1, 3), bo(2, 3)
3960 DO j = bo(1, 2), bo(2, 2)
3961 DO i = bo(1, 1), bo(2, 1)
3962 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3963 deriv_data(i, j, k)*tau1a(i, j, k)
3969 IF (
ASSOCIATED(deriv_att))
THEN
3973 DO k = bo(1, 3), bo(2, 3)
3974 DO j = bo(1, 2), bo(2, 2)
3975 DO i = bo(1, 1), bo(2, 1)
3976 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3977 deriv_data(i, j, k)*tau1b(i, j, k)
3983 IF (
ASSOCIATED(deriv_att))
THEN
3987 DO k = bo(1, 3), bo(2, 3)
3988 DO j = bo(1, 2), bo(2, 2)
3989 DO i = bo(1, 1), bo(2, 1)
3990 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
3991 deriv_data(i, j, k)*laplace1a(i, j, k)
3997 IF (
ASSOCIATED(deriv_att))
THEN
4001 DO k = bo(1, 3), bo(2, 3)
4002 DO j = bo(1, 2), bo(2, 2)
4003 DO i = bo(1, 1), bo(2, 1)
4004 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4005 deriv_data(i, j, k)*laplace1b(i, j, k)
4012 IF (my_compute_virial)
THEN
4014 IF (
ASSOCIATED(deriv_att))
THEN
4017 virial_pw%array(:, :, :) = -rho1b(:, :, :)
4018 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
4026 IF (
ASSOCIATED(deriv_att))
THEN
4030 DO k = bo(1, 3), bo(2, 3)
4031 DO j = bo(1, 2), bo(2, 2)
4032 DO i = bo(1, 1), bo(2, 1)
4033 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4034 deriv_data(i, j, k)*rho1a(i, j, k)
4040 IF (
ASSOCIATED(deriv_att))
THEN
4044 DO k = bo(1, 3), bo(2, 3)
4045 DO j = bo(1, 2), bo(2, 2)
4046 DO i = bo(1, 1), bo(2, 1)
4047 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4048 deriv_data(i, j, k)*dr1dr(i, j, k)
4054 IF (
ASSOCIATED(deriv_att))
THEN
4058 DO k = bo(1, 3), bo(2, 3)
4059 DO j = bo(1, 2), bo(2, 2)
4060 DO i = bo(1, 1), bo(2, 1)
4061 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4062 deriv_data(i, j, k)*dra1dra(i, j, k)
4068 IF (
ASSOCIATED(deriv_att))
THEN
4072 DO k = bo(1, 3), bo(2, 3)
4073 DO j = bo(1, 2), bo(2, 2)
4074 DO i = bo(1, 1), bo(2, 1)
4075 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4076 deriv_data(i, j, k)*tau1a(i, j, k)
4082 IF (
ASSOCIATED(deriv_att))
THEN
4086 DO k = bo(1, 3), bo(2, 3)
4087 DO j = bo(1, 2), bo(2, 2)
4088 DO i = bo(1, 1), bo(2, 1)
4089 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4090 deriv_data(i, j, k)*laplace1a(i, j, k)
4096 IF (
ASSOCIATED(deriv_att))
THEN
4100 DO k = bo(1, 3), bo(2, 3)
4101 DO j = bo(1, 2), bo(2, 2)
4102 DO i = bo(1, 1), bo(2, 1)
4103 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4104 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4110 IF (
ASSOCIATED(deriv_att))
THEN
4114 DO k = bo(1, 3), bo(2, 3)
4115 DO j = bo(1, 2), bo(2, 2)
4116 DO i = bo(1, 1), bo(2, 1)
4117 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4118 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4124 IF (
ASSOCIATED(deriv_att))
THEN
4128 DO k = bo(1, 3), bo(2, 3)
4129 DO j = bo(1, 2), bo(2, 2)
4130 DO i = bo(1, 1), bo(2, 1)
4131 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4132 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4138 IF (
ASSOCIATED(deriv_att))
THEN
4142 DO k = bo(1, 3), bo(2, 3)
4143 DO j = bo(1, 2), bo(2, 2)
4144 DO i = bo(1, 1), bo(2, 1)
4145 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4146 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4154 IF (
ASSOCIATED(deriv_att))
THEN
4158 DO k = bo(1, 3), bo(2, 3)
4159 DO j = bo(1, 2), bo(2, 2)
4160 DO i = bo(1, 1), bo(2, 1)
4161 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4162 deriv_data(i, j, k)*rho1a(i, j, k)
4168 IF (
ASSOCIATED(deriv_att))
THEN
4172 DO k = bo(1, 3), bo(2, 3)
4173 DO j = bo(1, 2), bo(2, 2)
4174 DO i = bo(1, 1), bo(2, 1)
4175 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4176 deriv_data(i, j, k)*dr1dr(i, j, k)
4182 IF (
ASSOCIATED(deriv_att))
THEN
4186 DO k = bo(1, 3), bo(2, 3)
4187 DO j = bo(1, 2), bo(2, 2)
4188 DO i = bo(1, 1), bo(2, 1)
4189 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4190 deriv_data(i, j, k)*dra1dra(i, j, k)
4196 IF (
ASSOCIATED(deriv_att))
THEN
4200 DO k = bo(1, 3), bo(2, 3)
4201 DO j = bo(1, 2), bo(2, 2)
4202 DO i = bo(1, 1), bo(2, 1)
4203 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4204 deriv_data(i, j, k)*tau1a(i, j, k)
4210 IF (
ASSOCIATED(deriv_att))
THEN
4214 DO k = bo(1, 3), bo(2, 3)
4215 DO j = bo(1, 2), bo(2, 2)
4216 DO i = bo(1, 1), bo(2, 1)
4217 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4218 deriv_data(i, j, k)*laplace1a(i, j, k)
4224 IF (
ASSOCIATED(deriv_att))
THEN
4228 DO k = bo(1, 3), bo(2, 3)
4229 DO j = bo(1, 2), bo(2, 2)
4230 DO i = bo(1, 1), bo(2, 1)
4231 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4232 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4238 IF (
ASSOCIATED(deriv_att))
THEN
4242 DO k = bo(1, 3), bo(2, 3)
4243 DO j = bo(1, 2), bo(2, 2)
4244 DO i = bo(1, 1), bo(2, 1)
4245 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4246 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4252 IF (
ASSOCIATED(deriv_att))
THEN
4256 DO k = bo(1, 3), bo(2, 3)
4257 DO j = bo(1, 2), bo(2, 2)
4258 DO i = bo(1, 1), bo(2, 1)
4259 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4260 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4266 IF (
ASSOCIATED(deriv_att))
THEN
4270 DO k = bo(1, 3), bo(2, 3)
4271 DO j = bo(1, 2), bo(2, 2)
4272 DO i = bo(1, 1), bo(2, 1)
4273 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4274 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4281 IF (
ASSOCIATED(deriv_att))
THEN
4287 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
4288 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
4293 IF (
ASSOCIATED(deriv_att))
THEN
4297 DO k = bo(1, 3), bo(2, 3)
4298 DO j = bo(1, 2), bo(2, 2)
4299 DO i = bo(1, 1), bo(2, 1)
4300 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4301 deriv_data(i, j, k)*rho1a(i, j, k)
4307 IF (
ASSOCIATED(deriv_att))
THEN
4311 DO k = bo(1, 3), bo(2, 3)
4312 DO j = bo(1, 2), bo(2, 2)
4313 DO i = bo(1, 1), bo(2, 1)
4314 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4315 deriv_data(i, j, k)*dr1dr(i, j, k)
4321 IF (
ASSOCIATED(deriv_att))
THEN
4325 DO k = bo(1, 3), bo(2, 3)
4326 DO j = bo(1, 2), bo(2, 2)
4327 DO i = bo(1, 1), bo(2, 1)
4328 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4329 deriv_data(i, j, k)*dra1dra(i, j, k)
4335 IF (
ASSOCIATED(deriv_att))
THEN
4339 DO k = bo(1, 3), bo(2, 3)
4340 DO j = bo(1, 2), bo(2, 2)
4341 DO i = bo(1, 1), bo(2, 1)
4342 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4343 deriv_data(i, j, k)*tau1a(i, j, k)
4349 IF (
ASSOCIATED(deriv_att))
THEN
4353 DO k = bo(1, 3), bo(2, 3)
4354 DO j = bo(1, 2), bo(2, 2)
4355 DO i = bo(1, 1), bo(2, 1)
4356 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4357 deriv_data(i, j, k)*laplace1a(i, j, k)
4363 IF (
ASSOCIATED(deriv_att))
THEN
4367 DO k = bo(1, 3), bo(2, 3)
4368 DO j = bo(1, 2), bo(2, 2)
4369 DO i = bo(1, 1), bo(2, 1)
4370 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4371 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4377 IF (
ASSOCIATED(deriv_att))
THEN
4381 DO k = bo(1, 3), bo(2, 3)
4382 DO j = bo(1, 2), bo(2, 2)
4383 DO i = bo(1, 1), bo(2, 1)
4384 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4385 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4391 IF (
ASSOCIATED(deriv_att))
THEN
4395 DO k = bo(1, 3), bo(2, 3)
4396 DO j = bo(1, 2), bo(2, 2)
4397 DO i = bo(1, 1), bo(2, 1)
4398 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4399 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4405 IF (
ASSOCIATED(deriv_att))
THEN
4409 DO k = bo(1, 3), bo(2, 3)
4410 DO j = bo(1, 2), bo(2, 2)
4411 DO i = bo(1, 1), bo(2, 1)
4412 v_drhoa(1)%array(i, j, k) = v_drhoa(1)%array(i, j, k) - &
4413 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4420 IF (
ASSOCIATED(deriv_att))
THEN
4426 v_drhoa(1)%array(:, :, :) = v_drhoa(1)%array(:, :, :) + &
4427 deriv_data(:, :, :)*dra1dra(:, :, :)/max(gradient_cut, norm_drhoa(:, :, :))**2
4432 IF (
ASSOCIATED(deriv_att))
THEN
4436 DO k = bo(1, 3), bo(2, 3)
4437 DO j = bo(1, 2), bo(2, 2)
4438 DO i = bo(1, 1), bo(2, 1)
4439 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4440 deriv_data(i, j, k)*rho1a(i, j, k)
4446 IF (
ASSOCIATED(deriv_att))
THEN
4450 DO k = bo(1, 3), bo(2, 3)
4451 DO j = bo(1, 2), bo(2, 2)
4452 DO i = bo(1, 1), bo(2, 1)
4453 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4454 deriv_data(i, j, k)*dr1dr(i, j, k)
4460 IF (
ASSOCIATED(deriv_att))
THEN
4464 DO k = bo(1, 3), bo(2, 3)
4465 DO j = bo(1, 2), bo(2, 2)
4466 DO i = bo(1, 1), bo(2, 1)
4467 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4468 deriv_data(i, j, k)*dra1dra(i, j, k)
4474 IF (
ASSOCIATED(deriv_att))
THEN
4478 DO k = bo(1, 3), bo(2, 3)
4479 DO j = bo(1, 2), bo(2, 2)
4480 DO i = bo(1, 1), bo(2, 1)
4481 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4482 deriv_data(i, j, k)*tau1a(i, j, k)
4488 IF (
ASSOCIATED(deriv_att))
THEN
4492 DO k = bo(1, 3), bo(2, 3)
4493 DO j = bo(1, 2), bo(2, 2)
4494 DO i = bo(1, 1), bo(2, 1)
4495 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4496 deriv_data(i, j, k)*laplace1a(i, j, k)
4502 IF (
ASSOCIATED(deriv_att))
THEN
4506 DO k = bo(1, 3), bo(2, 3)
4507 DO j = bo(1, 2), bo(2, 2)
4508 DO i = bo(1, 1), bo(2, 1)
4509 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4510 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4516 IF (
ASSOCIATED(deriv_att))
THEN
4520 DO k = bo(1, 3), bo(2, 3)
4521 DO j = bo(1, 2), bo(2, 2)
4522 DO i = bo(1, 1), bo(2, 1)
4523 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4524 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4530 IF (
ASSOCIATED(deriv_att))
THEN
4534 DO k = bo(1, 3), bo(2, 3)
4535 DO j = bo(1, 2), bo(2, 2)
4536 DO i = bo(1, 1), bo(2, 1)
4537 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4538 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4544 IF (
ASSOCIATED(deriv_att))
THEN
4548 DO k = bo(1, 3), bo(2, 3)
4549 DO j = bo(1, 2), bo(2, 2)
4550 DO i = bo(1, 1), bo(2, 1)
4551 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4552 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4560 IF (
ASSOCIATED(deriv_att))
THEN
4564 DO k = bo(1, 3), bo(2, 3)
4565 DO j = bo(1, 2), bo(2, 2)
4566 DO i = bo(1, 1), bo(2, 1)
4567 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4568 deriv_data(i, j, k)*rho1a(i, j, k)
4574 IF (
ASSOCIATED(deriv_att))
THEN
4578 DO k = bo(1, 3), bo(2, 3)
4579 DO j = bo(1, 2), bo(2, 2)
4580 DO i = bo(1, 1), bo(2, 1)
4581 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4582 deriv_data(i, j, k)*dr1dr(i, j, k)
4588 IF (
ASSOCIATED(deriv_att))
THEN
4592 DO k = bo(1, 3), bo(2, 3)
4593 DO j = bo(1, 2), bo(2, 2)
4594 DO i = bo(1, 1), bo(2, 1)
4595 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4596 deriv_data(i, j, k)*dra1dra(i, j, k)
4602 IF (
ASSOCIATED(deriv_att))
THEN
4606 DO k = bo(1, 3), bo(2, 3)
4607 DO j = bo(1, 2), bo(2, 2)
4608 DO i = bo(1, 1), bo(2, 1)
4609 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4610 deriv_data(i, j, k)*tau1a(i, j, k)
4616 IF (
ASSOCIATED(deriv_att))
THEN
4620 DO k = bo(1, 3), bo(2, 3)
4621 DO j = bo(1, 2), bo(2, 2)
4622 DO i = bo(1, 1), bo(2, 1)
4623 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4624 deriv_data(i, j, k)*laplace1a(i, j, k)
4630 IF (
ASSOCIATED(deriv_att))
THEN
4634 DO k = bo(1, 3), bo(2, 3)
4635 DO j = bo(1, 2), bo(2, 2)
4636 DO i = bo(1, 1), bo(2, 1)
4637 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4638 fac*deriv_data(i, j, k)*rho1b(i, j, k)
4644 IF (
ASSOCIATED(deriv_att))
THEN
4648 DO k = bo(1, 3), bo(2, 3)
4649 DO j = bo(1, 2), bo(2, 2)
4650 DO i = bo(1, 1), bo(2, 1)
4651 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4652 fac*deriv_data(i, j, k)*drb1drb(i, j, k)
4658 IF (
ASSOCIATED(deriv_att))
THEN
4662 DO k = bo(1, 3), bo(2, 3)
4663 DO j = bo(1, 2), bo(2, 2)
4664 DO i = bo(1, 1), bo(2, 1)
4665 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4666 fac*deriv_data(i, j, k)*tau1b(i, j, k)
4672 IF (
ASSOCIATED(deriv_att))
THEN
4676 DO k = bo(1, 3), bo(2, 3)
4677 DO j = bo(1, 2), bo(2, 2)
4678 DO i = bo(1, 1), bo(2, 1)
4679 v_laplace(2)%array(i, j, k) = v_laplace(2)%array(i, j, k) + &
4680 fac*deriv_data(i, j, k)*laplace1b(i, j, k)
4691 IF (gradient_f)
THEN
4693 IF (my_compute_virial)
THEN
4694 CALL virial_drho_drho(virial_pw, drhoa, v_drhoa(1), virial_xc)
4695 CALL virial_drho_drho(virial_pw, drhob, v_drhob(2), virial_xc)
4698 virial_pw%array(:, :, :) = drho(idir)%array(:, :, :)*(v_drho(1)%array(:, :, :) + v_drho(2)%array(:, :, :))
4702 drho(jdir)%array(:, :, :))
4703 virial_xc(jdir, idir) = virial_xc(jdir, idir) + tmp
4704 virial_xc(idir, jdir) = virial_xc(jdir, idir)
4715 DO ir = bo(1, 2), bo(2, 2)
4716 DO ia = bo(1, 1), bo(2, 1)
4718 DO ispin = 1, nspins
4719 vxg(idir, ia, ir, ispin) = &
4720 -(v_drhoa(ispin)%array(ia, ir, 1)*drhoa(idir)%array(ia, ir, 1) + &
4721 v_drhob(ispin)%array(ia, ir, 1)*drhob(idir)%array(ia, ir, 1) + &
4722 v_drho(ispin)%array(ia, ir, 1)*drho(idir)%array(ia, ir, 1))
4724 IF (
ASSOCIATED(e_drhoa))
THEN
4725 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4726 e_drhoa(ia, ir, 1)*drho1a(idir)%array(ia, ir, 1)
4728 IF (nspins /= 1 .AND.
ASSOCIATED(e_drhob))
THEN
4729 vxg(idir, ia, ir, 2) = vxg(idir, ia, ir, 2) + &
4730 e_drhob(ia, ir, 1)*drho1b(idir)%array(ia, ir, 1)
4732 IF (
ASSOCIATED(e_drho))
THEN
4733 IF (nspins /= 1)
THEN
4734 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4735 e_drho(ia, ir, 1)*drho1(idir)%array(ia, ir, 1)
4736 vxg(idir, ia, ir, 2) = vxg(idir, ia, ir, 2) + &
4737 e_drho(ia, ir, 1)*drho1(idir)%array(ia, ir, 1)
4739 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + &
4740 e_drho(ia, ir, 1)*(drho1a(idir)%array(ia, ir, 1) + &
4741 fac*drho1b(idir)%array(ia, ir, 1))
4753 DO ispin = 1, nspins
4755 v_drho_r(idir, ispin)%array(:, :, :) = &
4756 v_drhoa(ispin)%array(:, :, :)*drhoa(idir)%array(:, :, :) + &
4757 v_drhob(ispin)%array(:, :, :)*drhob(idir)%array(:, :, :) + &
4758 v_drho(ispin)%array(:, :, :)*drho(idir)%array(:, :, :)
4761 IF (
ASSOCIATED(e_drhoa))
THEN
4763 v_drho_r(idir, 1)%array(:, :, :) = v_drho_r(idir, 1)%array(:, :, :) - &
4764 e_drhoa(:, :, :)*drho1a(idir)%array(:, :, :)
4767 IF (nspins /= 1 .AND.
ASSOCIATED(e_drhob))
THEN
4769 v_drho_r(idir, 2)%array(:, :, :) = v_drho_r(idir, 2)%array(:, :, :) - &
4770 e_drhob(:, :, :)*drho1b(idir)%array(:, :, :)
4773 IF (
ASSOCIATED(e_drho))
THEN
4778 DO k = bo(1, 3), bo(2, 3)
4779 DO j = bo(1, 2), bo(2, 2)
4780 DO i = bo(1, 1), bo(2, 1)
4781 IF (nspins /= 1)
THEN
4782 v_drho_r(idir, 1)%array(i, j, k) = v_drho_r(idir, 1)%array(i, j, k) - &
4783 e_drho(i, j, k)*drho1(idir)%array(i, j, k)
4784 v_drho_r(idir, 2)%array(i, j, k) = v_drho_r(idir, 2)%array(i, j, k) - &
4785 e_drho(i, j, k)*drho1(idir)%array(i, j, k)
4787 v_drho_r(idir, 1)%array(i, j, k) = v_drho_r(idir, 1)%array(i, j, k) - &
4788 e_drho(i, j, k)*(drho1a(idir)%array(i, j, k) + &
4789 fac*drho1b(idir)%array(i, j, k))
4798 DO ispin = 1, nspins
4800 CALL xc_pw_divergence(xc_deriv_method_id, v_drho_r(:, ispin), tmp_g, vxc_g, v_xc(ispin))
4806 DEALLOCATE (drho(idir)%array)
4807 DEALLOCATE (drho1(idir)%array)
4810 DO ispin = 1, nspins
4811 CALL deallocate_pw(v_drhoa(ispin), pw_pool)
4812 CALL deallocate_pw(v_drhob(ispin), pw_pool)
4815 DEALLOCATE (v_drhoa, v_drhob)
4819 IF (laplace_f .AND. my_compute_virial)
THEN
4820 virial_pw%array(:, :, :) = -rhoa(:, :, :)
4821 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(1)%array)
4822 virial_pw%array(:, :, :) = -rhob(:, :, :)
4823 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(2)%array)
4834 IF (gradient_f)
THEN
4837 CALL prepare_dr1dr(dr1dr, drho, drho1)
4843 ALLOCATE (v_laplace(nspins))
4844 DO ispin = 1, nspins
4845 CALL allocate_pw(v_laplace(ispin), pw_pool, bo)
4856 IF (
ASSOCIATED(deriv_att))
THEN
4860 DO k = bo(1, 3), bo(2, 3)
4861 DO j = bo(1, 2), bo(2, 2)
4862 DO i = bo(1, 1), bo(2, 1)
4863 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4864 deriv_data(i, j, k)*rho1(i, j, k)
4870 IF (
ASSOCIATED(deriv_att))
THEN
4874 DO k = bo(1, 3), bo(2, 3)
4875 DO j = bo(1, 2), bo(2, 2)
4876 DO i = bo(1, 1), bo(2, 1)
4877 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4878 deriv_data(i, j, k)*dr1dr(i, j, k)
4884 IF (
ASSOCIATED(deriv_att))
THEN
4888 DO k = bo(1, 3), bo(2, 3)
4889 DO j = bo(1, 2), bo(2, 2)
4890 DO i = bo(1, 1), bo(2, 1)
4891 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4892 deriv_data(i, j, k)*tau1(i, j, k)
4898 IF (
ASSOCIATED(deriv_att))
THEN
4902 DO k = bo(1, 3), bo(2, 3)
4903 DO j = bo(1, 2), bo(2, 2)
4904 DO i = bo(1, 1), bo(2, 1)
4905 v_xc(1)%array(i, j, k) = v_xc(1)%array(i, j, k) + &
4906 deriv_data(i, j, k)*laplace1(i, j, k)
4914 IF (
ASSOCIATED(deriv_att))
THEN
4918 DO k = bo(1, 3), bo(2, 3)
4919 DO j = bo(1, 2), bo(2, 2)
4920 DO i = bo(1, 1), bo(2, 1)
4921 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4922 deriv_data(i, j, k)*rho1(i, j, k)
4928 IF (
ASSOCIATED(deriv_att))
THEN
4932 DO k = bo(1, 3), bo(2, 3)
4933 DO j = bo(1, 2), bo(2, 2)
4934 DO i = bo(1, 1), bo(2, 1)
4935 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4936 deriv_data(i, j, k)*dr1dr(i, j, k)
4942 IF (
ASSOCIATED(deriv_att))
THEN
4946 DO k = bo(1, 3), bo(2, 3)
4947 DO j = bo(1, 2), bo(2, 2)
4948 DO i = bo(1, 1), bo(2, 1)
4949 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4950 deriv_data(i, j, k)*tau1(i, j, k)
4956 IF (
ASSOCIATED(deriv_att))
THEN
4960 DO k = bo(1, 3), bo(2, 3)
4961 DO j = bo(1, 2), bo(2, 2)
4962 DO i = bo(1, 1), bo(2, 1)
4963 v_drho(1)%array(i, j, k) = v_drho(1)%array(i, j, k) - &
4964 deriv_data(i, j, k)*laplace1(i, j, k)
4971 IF (
ASSOCIATED(deriv_att))
THEN
4975 IF (my_compute_virial)
THEN
4976 CALL virial_drho_drho1(virial_pw, drho, drho1, deriv_data, virial_xc)
4980 v_drho(1)%array(:, :, :) = v_drho(1)%array(:, :, :) + &
4981 deriv_data(:, :, :)*dr1dr(:, :, :)/max(gradient_cut, norm_drho(:, :, :))**2
4986 IF (
ASSOCIATED(deriv_att))
THEN
4990 DO k = bo(1, 3), bo(2, 3)
4991 DO j = bo(1, 2), bo(2, 2)
4992 DO i = bo(1, 1), bo(2, 1)
4993 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
4994 deriv_data(i, j, k)*rho1(i, j, k)
5000 IF (
ASSOCIATED(deriv_att))
THEN
5004 DO k = bo(1, 3), bo(2, 3)
5005 DO j = bo(1, 2), bo(2, 2)
5006 DO i = bo(1, 1), bo(2, 1)
5007 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5008 deriv_data(i, j, k)*dr1dr(i, j, k)
5014 IF (
ASSOCIATED(deriv_att))
THEN
5018 DO k = bo(1, 3), bo(2, 3)
5019 DO j = bo(1, 2), bo(2, 2)
5020 DO i = bo(1, 1), bo(2, 1)
5021 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5022 deriv_data(i, j, k)*tau1(i, j, k)
5028 IF (
ASSOCIATED(deriv_att))
THEN
5032 DO k = bo(1, 3), bo(2, 3)
5033 DO j = bo(1, 2), bo(2, 2)
5034 DO i = bo(1, 1), bo(2, 1)
5035 v_xc_tau(1)%array(i, j, k) = v_xc_tau(1)%array(i, j, k) + &
5036 deriv_data(i, j, k)*laplace1(i, j, k)
5044 IF (
ASSOCIATED(deriv_att))
THEN
5048 DO k = bo(1, 3), bo(2, 3)
5049 DO j = bo(1, 2), bo(2, 2)
5050 DO i = bo(1, 1), bo(2, 1)
5051 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5052 deriv_data(i, j, k)*rho1(i, j, k)
5058 IF (
ASSOCIATED(deriv_att))
THEN
5062 DO k = bo(1, 3), bo(2, 3)
5063 DO j = bo(1, 2), bo(2, 2)
5064 DO i = bo(1, 1), bo(2, 1)
5065 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5066 deriv_data(i, j, k)*dr1dr(i, j, k)
5072 IF (
ASSOCIATED(deriv_att))
THEN
5076 DO k = bo(1, 3), bo(2, 3)
5077 DO j = bo(1, 2), bo(2, 2)
5078 DO i = bo(1, 1), bo(2, 1)
5079 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5080 deriv_data(i, j, k)*tau1(i, j, k)
5086 IF (
ASSOCIATED(deriv_att))
THEN
5090 DO k = bo(1, 3), bo(2, 3)
5091 DO j = bo(1, 2), bo(2, 2)
5092 DO i = bo(1, 1), bo(2, 1)
5093 v_laplace(1)%array(i, j, k) = v_laplace(1)%array(i, j, k) + &
5094 deriv_data(i, j, k)*laplace1(i, j, k)
5101 IF (my_compute_virial)
THEN
5103 IF (
ASSOCIATED(deriv_att))
THEN
5106 virial_pw%array(:, :, :) = -rho1(:, :, :)
5107 CALL virial_laplace(virial_pw, pw_pool, virial_xc, deriv_data)
5112 IF (gradient_f)
THEN
5114 IF (my_compute_virial)
THEN
5115 CALL virial_drho_drho(virial_pw, drho, v_drho(1), virial_xc)
5125 DO ia = bo(1, 1), bo(2, 1)
5126 DO ir = bo(1, 2), bo(2, 2)
5127 vxg(idir, ia, ir, 1) = -drho(idir)%array(ia, ir, 1)*v_drho(1)%array(ia, ir, 1)
5128 IF (
ASSOCIATED(e_drho))
THEN
5129 vxg(idir, ia, ir, 1) = vxg(idir, ia, ir, 1) + factor2*drho1(idir)%array(ia, ir, 1)*e_drho(ia, ir, 1)
5140 v_drho_r(idir, 1)%array(:, :, :) = drho(idir)%array(:, :, :)*v_drho(1)%array(:, :, :) - &
5141 drho1(idir)%array(:, :, :)*e_drho(:, :, :)
5145 CALL xc_pw_divergence(xc_deriv_method_id, v_drho_r(:, 1), tmp_g, vxc_g, v_xc(1))
5150 IF (laplace_f .AND. my_compute_virial)
THEN
5151 virial_pw%array(:, :, :) = -rho(:, :, :)
5152 CALL virial_laplace(virial_pw, pw_pool, virial_xc, v_laplace(1)%array)
5158 DO ispin = 1, nspins
5159 CALL xc_pw_laplace(v_laplace(ispin), pw_pool, xc_deriv_method_id)
5160 CALL pw_axpy(v_laplace(ispin), v_xc(ispin))
5164 IF (gradient_f)
THEN
5166 DO ispin = 1, nspins
5167 CALL deallocate_pw(v_drho(ispin), pw_pool)
5169 CALL deallocate_pw(v_drho_r(idir, ispin), pw_pool)
5172 DEALLOCATE (v_drho, v_drho_r)
5177 DO ispin = 1, nspins
5178 CALL deallocate_pw(v_laplace(ispin), pw_pool)
5180 DEALLOCATE (v_laplace)
5183 IF (
ASSOCIATED(tmp_g%pw_grid) .AND.
ASSOCIATED(pw_pool))
THEN
5184 CALL pw_pool%give_back_pw(tmp_g)
5187 IF (
ASSOCIATED(vxc_g%pw_grid) .AND.
ASSOCIATED(pw_pool))
THEN
5188 CALL pw_pool%give_back_pw(vxc_g)
5191 IF (my_compute_virial .AND. (gradient_f .OR. laplace_f))
THEN
5192 CALL deallocate_pw(virial_pw, pw_pool)
5195 CALL timestop(handle)