dft_utils_in_r

This module contains most of the fundamental quantities (AOs, MOs or density derivatives) evaluated in real-space representation that are needed for the various DFT modules.

As these quantities might be used and re-used, the values at each point of the grid are stored (see becke_numerical_grid for more information on the grid).

The main providers for this module are:

  • aos_in_r_array: values of the AO basis on the grid point.

  • mos_in_r_array: values of the MO basis on the grid point.

  • one_e_dm_and_grad_alpha_in_r: values of the density and its gradienst on the grid points.

Providers

alpha_dens_kin_in_r

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: alpha_dens_kin_in_r  (n_points_final_grid)
double precision, allocatable   :: beta_dens_kin_in_r   (n_points_final_grid)

Needs:

  • elec_alpha_num

  • elec_beta_num

  • mos_grad_in_r_array_tranp

  • n_points_final_grid

ao_abs_int_grid

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_abs_int_grid      (ao_num)

ao_abs_int_grid(i) = int dr |phi_i(r) |

Needs:

  • ao_num

  • aos_in_r_array

  • final_grid_points

  • n_points_final_grid

ao_overlap_abs_grid

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_overlap_abs_grid  (ao_num,ao_num)

ao_overlap_abs_grid(j,i) = int dr |phi_i(r) phi_j(r)|

Needs:

  • ao_num

  • aos_in_r_array

  • final_grid_points

  • n_points_final_grid

Needed by:

  • ao_prod_center

  • ao_prod_sigma

ao_prod_abs_r

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_prod_abs_r        (ao_num,ao_num)

ao_prod_abs_r(i,j) = int |phi_i(r) phi_j(r)| dsqrt((x - <|i|x|j|>)^2 + (y - <|i|y|j|>)^2 +(z - <|i|z|j|>)^2) / int |phi_i(r) phi_j(r)|

Needs:

  • ao_num

  • ao_prod_center

  • aos_in_r_array

  • final_grid_points

  • n_points_final_grid

Needed by:

  • ao_prod_sigma

ao_prod_center

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_prod_center       (3,ao_num,ao_num)

ao_prod_center(1:3,j,i) = int dr |phi_i(r) phi_j(r)| x/y/z / int |phi_i(r) phi_j(r)|

if int |phi_i(r) phi_j(r)| < 1.d-10 then ao_prod_center = 10000.

Needs:

  • ao_num

  • ao_overlap_abs_grid

  • aos_in_r_array

  • final_grid_points

  • n_points_final_grid

Needed by:

  • ao_prod_abs_r

  • ao_prod_dist_grid

ao_prod_dist_grid

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_prod_dist_grid    (ao_num,ao_num,n_points_final_grid)

ao_prod_dist_grid(j,i,ipoint) = distance between the center of |phi_i(r) phi_j(r)| and the grid point r(ipoint)

Needs:

  • ao_num

  • ao_prod_center

  • final_grid_points

  • n_points_final_grid

ao_prod_sigma

File : dft_utils_in_r/ao_prod_mlti_pl.irp.f

double precision, allocatable   :: ao_prod_sigma        (ao_num,ao_num)

Gaussian exponent reproducing the product |chi_i(r) chi_j(r)|

Therefore |chi_i(r) chi_j(r)| approx e^{-ao_prod_sigma(j,i) (r - ao_prod_center(1:3,j,i))**2}

Needs:

  • ao_num

  • ao_overlap_abs_grid

  • ao_prod_abs_r

aos_grad_in_r_array

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_grad_in_r_array  (ao_num,n_points_final_grid,3)

aos_grad_in_r_array(i,j,k) = value of the kth component of the gradient of ith ao on the jth grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • ao_coef_normalized_ordered_transp_per_nucl

  • ao_expo_ordered_transp_per_nucl

  • ao_num

  • ao_power_ordered_transp_per_nucl

  • ao_prim_num

  • final_grid_points

  • n_points_final_grid

  • nucl_aos_transposed

  • nucl_coord

  • nucl_n_aos

  • nucl_num

Needed by:

  • aos_grad_in_r_array_transp

  • aos_grad_in_r_array_transp_3

  • aos_grad_in_r_array_transp_bis

  • mos_grad_in_r_array

aos_grad_in_r_array_extra

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_grad_in_r_array_extra    (ao_num,n_points_extra_final_grid,3)

Needs:

  • ao_coef_normalized_ordered_transp_per_nucl

  • ao_expo_ordered_transp_per_nucl

  • ao_num

  • ao_power_ordered_transp_per_nucl

  • ao_prim_num

  • final_grid_points_extra

  • n_points_extra_final_grid

  • nucl_aos_transposed

  • nucl_coord

  • nucl_n_aos

  • nucl_num

aos_grad_in_r_array_transp

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_grad_in_r_array_transp   (3,ao_num,n_points_final_grid)

aos_grad_in_r_array_transp(k,i,j) = value of the kth component of the gradient of jth ao on the ith grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • ao_num

  • aos_grad_in_r_array

  • n_points_final_grid

Needed by:

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

aos_grad_in_r_array_transp_3

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_grad_in_r_array_transp_3 (3,n_points_final_grid,ao_num)

Transposed gradients

Needs:

  • ao_num

  • aos_grad_in_r_array

  • n_points_final_grid

aos_grad_in_r_array_transp_bis

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_grad_in_r_array_transp_bis       (n_points_final_grid,ao_num,3)

Transposed gradients

Needs:

  • ao_num

  • aos_grad_in_r_array

  • n_points_final_grid

aos_in_r_array

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_in_r_array       (ao_num,n_points_final_grid)

aos_in_r_array(i,j) = value of the ith ao on the jth grid point

Needs:

  • ao_coef_normalized_ordered_transp_per_nucl

  • ao_expo_ordered_transp_per_nucl

  • ao_num

  • ao_power_ordered_transp_per_nucl

  • ao_prim_num

  • final_grid_points

  • n_points_final_grid

  • nucl_aos_transposed

  • nucl_coord

  • nucl_n_aos

  • nucl_num

Needed by:

  • ao_abs_int_grid

  • ao_overlap_abs_grid

  • ao_prod_abs_r

  • ao_prod_center

  • aos_in_r_array_transp

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • f_hf_cholesky_sparse_bis

  • pot_scal_x_alpha_ao_pbe

  • pot_scal_x_alpha_ao_sr_pbe

  • pot_scal_xc_alpha_ao_pbe

  • pot_scal_xc_alpha_ao_sr_pbe

  • potential_c_alpha_ao_lda

  • potential_c_alpha_ao_sr_lda

  • potential_x_alpha_ao_lda

  • potential_x_alpha_ao_sr_lda

  • potential_xc_alpha_ao_lda

  • potential_xc_alpha_ao_sr_lda

aos_in_r_array_extra

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_in_r_array_extra (ao_num,n_points_extra_final_grid)

aos_in_r_array_extra(i,j) = value of the ith ao on the jth grid point

Needs:

  • ao_coef_normalized_ordered_transp_per_nucl

  • ao_expo_ordered_transp_per_nucl

  • ao_num

  • ao_power_ordered_transp_per_nucl

  • ao_prim_num

  • final_grid_points_extra

  • n_points_extra_final_grid

  • nucl_aos_transposed

  • nucl_coord

  • nucl_n_aos

  • nucl_num

Needed by:

  • aos_in_r_array_extra_transp

aos_in_r_array_extra_transp

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_in_r_array_extra_transp  (n_points_extra_final_grid,ao_num)

aos_in_r_array_extra_transp(i,j) = value of the jth ao on the ith grid point

Needs:

  • ao_num

  • aos_in_r_array_extra

  • n_points_extra_final_grid

aos_in_r_array_transp

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_in_r_array_transp        (n_points_final_grid,ao_num)

aos_in_r_array_transp(i,j) = value of the jth ao on the ith grid point

Needs:

  • ao_num

  • aos_in_r_array

  • n_points_final_grid

Needed by:

  • pot_grad_x_alpha_ao_pbe

  • pot_grad_x_alpha_ao_sr_pbe

  • pot_grad_xc_alpha_ao_pbe

  • pot_grad_xc_alpha_ao_sr_pbe

aos_lapl_in_r_array

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_lapl_in_r_array  (3,ao_num,n_points_final_grid)

aos_lapl_in_r_array(i,j,k) = value of the kth component of the laplacian of jth ao on the ith grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • ao_coef_normalized_ordered_transp_per_nucl

  • ao_expo_ordered_transp_per_nucl

  • ao_num

  • ao_power_ordered_transp_per_nucl

  • ao_prim_num

  • final_grid_points

  • n_points_final_grid

  • nucl_aos_transposed

  • nucl_coord

  • nucl_n_aos

  • nucl_num

Needed by:

  • aos_lapl_in_r_array_transp

aos_lapl_in_r_array_transp

File : dft_utils_in_r/ao_in_r.irp.f

double precision, allocatable   :: aos_lapl_in_r_array_transp   (ao_num,n_points_final_grid,3)

Needs:

  • ao_num

  • aos_lapl_in_r_array

  • n_points_final_grid

Needed by:

  • mos_lapl_in_r_array

beta_dens_kin_in_r

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: alpha_dens_kin_in_r  (n_points_final_grid)
double precision, allocatable   :: beta_dens_kin_in_r   (n_points_final_grid)

Needs:

  • elec_alpha_num

  • elec_beta_num

  • mos_grad_in_r_array_tranp

  • n_points_final_grid

elec_alpha_num_grid_becke

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: elec_beta_num_grid_becke     (N_states)
double precision, allocatable   :: elec_alpha_num_grid_becke    (N_states)
double precision, allocatable   :: elec_num_grid_becke  (N_states)

number of electrons when the one-e alpha/beta densities are numerically integrated on the DFT grid

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_and_grad_alpha_in_r

Needed by:

  • mu_average_prov

elec_beta_num_grid_becke

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: elec_beta_num_grid_becke     (N_states)
double precision, allocatable   :: elec_alpha_num_grid_becke    (N_states)
double precision, allocatable   :: elec_num_grid_becke  (N_states)

number of electrons when the one-e alpha/beta densities are numerically integrated on the DFT grid

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_and_grad_alpha_in_r

Needed by:

  • mu_average_prov

elec_num_grid_becke

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: elec_beta_num_grid_becke     (N_states)
double precision, allocatable   :: elec_alpha_num_grid_becke    (N_states)
double precision, allocatable   :: elec_num_grid_becke  (N_states)

number of electrons when the one-e alpha/beta densities are numerically integrated on the DFT grid

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_and_grad_alpha_in_r

Needed by:

  • mu_average_prov

kinetic_density_generalized

File : dft_utils_in_r/kin_dens.irp.f

double precision, allocatable   :: kinetic_density_generalized  (n_points_final_grid)

Needs:

  • mo_num

  • mos_grad_in_r_array_tranp

  • n_points_final_grid

  • one_e_dm_mo_for_dft

mo_grad_ints

File : dft_utils_in_r/ints_grad.irp.f

double precision, allocatable   :: mo_grad_ints (mo_num,mo_num,3)

mo_grad_ints(i,j,m) = <phi_i^MO | d/dx | phi_j^MO>

Needs:

  • final_grid_points

  • mo_num

  • mos_grad_in_r_array

  • mos_in_r_array

  • n_points_final_grid

Needed by:

  • mo_grad_ints_transp

mo_grad_ints_transp

File : dft_utils_in_r/ints_grad.irp.f

double precision, allocatable   :: mo_grad_ints_transp  (3,mo_num,mo_num)

mo_grad_ints(i,j,m) = <phi_i^MO | d/dx | phi_j^MO>

Needs:

  • mo_grad_ints

  • mo_num

mos_grad_in_r_array

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_grad_in_r_array  (mo_num,n_points_final_grid,3)

mos_grad_in_r_array(i,j,k) = value of the kth component of the gradient of ith mo on the jth grid point

mos_grad_in_r_array_transp(i,j,k) = value of the kth component of the gradient of jth mo on the ith grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • ao_num

  • aos_grad_in_r_array

  • mo_coef_transp

  • mo_num

  • n_points_final_grid

Needed by:

  • core_inact_act_mos_grad_in_r_array

  • mo_grad_ints

  • mos_grad_in_r_array_tranp

  • mos_grad_in_r_array_transp_3

  • mos_grad_in_r_array_transp_bis

mos_grad_in_r_array_tranp

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_grad_in_r_array_tranp    (3,mo_num,n_points_final_grid)

mos_grad_in_r_array_transp(i,j,k) = value of the kth component of the gradient of jth mo on the ith grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • mo_num

  • mos_grad_in_r_array

  • n_points_final_grid

Needed by:

  • alpha_dens_kin_in_r

  • kinetic_density_generalized

mos_grad_in_r_array_transp_3

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_grad_in_r_array_transp_3 (3,n_points_final_grid,mo_num)

Transposed gradients

Needs:

  • mo_num

  • mos_grad_in_r_array

  • n_points_final_grid

mos_grad_in_r_array_transp_bis

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_grad_in_r_array_transp_bis       (n_points_final_grid,mo_num,3)

Transposed gradients

Needs:

  • mo_num

  • mos_grad_in_r_array

  • n_points_final_grid

mos_in_r_array

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_in_r_array       (mo_num,n_points_final_grid)

mos_in_r_array(i,j) = value of the ith mo on the jth grid point

Needs:

  • ao_num

  • final_grid_points

  • mo_coef_transp

  • mo_num

  • n_points_final_grid

Needed by:

  • basis_mos_in_r_array

  • mo_grad_ints

mos_in_r_array_omp

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_in_r_array_omp   (mo_num,n_points_final_grid)

mos_in_r_array(i,j) = value of the ith mo on the jth grid point

Needs:

  • ao_num

  • final_grid_points

  • mo_coef_transp

  • mo_num

  • n_points_final_grid

Needed by:

  • f_hf_cholesky_sparse

  • f_hf_cholesky_sparse_bis

  • mos_in_r_array_transp

  • mos_times_cholesky_r1

  • mos_times_cholesky_r2

  • on_top_hf_grid

mos_in_r_array_transp

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_in_r_array_transp        (n_points_final_grid,mo_num)

mos_in_r_array_transp(i,j) = value of the jth mo on the ith grid point

Needs:

  • mo_num

  • mos_in_r_array_omp

  • n_points_final_grid

Needed by:

  • act_mos_in_r_array

  • core_inact_act_mos_in_r_array

  • core_mos_in_r_array

  • inact_mos_in_r_array

  • virt_mos_in_r_array

mos_lapl_in_r_array

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_lapl_in_r_array  (mo_num,n_points_final_grid,3)

mos_lapl_in_r_array(i,j,k) = value of the kth component of the laplacian of ith mo on the jth grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • ao_num

  • aos_lapl_in_r_array_transp

  • mo_coef_transp

  • mo_num

  • n_points_final_grid

Needed by:

  • mos_lapl_in_r_array_tranp

mos_lapl_in_r_array_tranp

File : dft_utils_in_r/mo_in_r.irp.f

double precision, allocatable   :: mos_lapl_in_r_array_tranp    (3,mo_num,n_points_final_grid)

mos_lapl_in_r_array_transp(i,j,k) = value of the kth component of the laplient of jth mo on the ith grid point

k = 1 : x, k= 2, y, k 3, z

Needs:

  • mo_num

  • mos_lapl_in_r_array

  • n_points_final_grid

one_e_dm_and_grad_alpha_in_r

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

one_e_dm_and_grad_beta_in_r

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

one_e_grad_2_dm_alpha_at_r

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

one_e_grad_2_dm_beta_at_r

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

one_e_stuff_for_pbe

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

scal_prod_grad_one_e_dm_ab

File : dft_utils_in_r/dm_in_r.irp.f

double precision, allocatable   :: one_e_dm_and_grad_alpha_in_r (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_dm_and_grad_beta_in_r  (4,n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_alpha_at_r   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_grad_2_dm_beta_at_r    (n_points_final_grid,N_states)
double precision, allocatable   :: scal_prod_grad_one_e_dm_ab   (n_points_final_grid,N_states)
double precision, allocatable   :: one_e_stuff_for_pbe  (3,n_points_final_grid,N_states)

one_e_dm_and_grad_alpha_in_r(1,i,i_state) = ddx n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(2,i,i_state) = ddy n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(3,i,i_state) = ddz n_alpha(r_i,istate)

one_e_dm_and_grad_alpha_in_r(4,i,i_state) = n_alpha(r_i,istate)

one_e_grad_2_dm_alpha_at_r(i,istate) = (ddx n_alpha(r_i,istate))^2 + (ddy n_alpha(r_i,istate))^2 + (ddz n_alpha(r_i,istate))^2

scal_prod_grad_one_e_dm_ab(i,istate) = grad n_alpha(r_i) . grad n_beta(r_i)

where r_i is the ith point of the grid and istate is the state number

!!!!! WARNING !!!! if no_core_density = .True. then all core electrons are removed

Needs:

  • ao_num

  • final_grid_points

  • n_points_final_grid

  • n_states

  • one_e_dm_alpha_ao_for_dft

Needed by:

  • aos_sr_vc_alpha_lda_w

  • aos_sr_vxc_alpha_lda_w

  • aos_vc_alpha_lda_w

  • aos_vc_alpha_pbe_w

  • aos_vc_alpha_sr_pbe_w

  • aos_vxc_alpha_lda_w

  • aos_vxc_alpha_pbe_w

  • aos_vxc_alpha_sr_pbe_w

  • effective_alpha_dm

  • effective_spin_dm

  • elec_beta_num_grid_becke

  • energy_c_lda

  • energy_c_sr_lda

  • energy_x_lda

  • energy_x_pbe

  • energy_x_sr_lda

  • energy_x_sr_pbe

  • mu_average_prov

Subroutines / functions

dens_grad_a_b_no_core_and_aos_grad_aos_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine dens_grad_a_b_no_core_and_aos_grad_aos_at_r(r,dm_a,dm_b, grad_dm_a, grad_dm_b, aos_array, grad_aos_array)

input:

  • r(1) ==> r(1) = x, r(2) = y, r(3) = z

output:

  • dm_a = alpha density evaluated at r without the core orbitals

  • dm_b = beta density evaluated at r without the core orbitals

  • aos_array(i) = ao(i) evaluated at r without the core orbitals

  • grad_dm_a(1) = X gradient of the alpha density evaluated in r without the core orbitals

  • grad_dm_a(1) = X gradient of the beta density evaluated in r without the core orbitals

  • grad_aos_array(1) = X gradient of the aos(i) evaluated at r

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft_no_core

Calls:

  • dsymv()

  • give_all_aos_and_grad_at_r()

density_and_grad_alpha_beta:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine density_and_grad_alpha_beta(r,dm_a,dm_b, grad_dm_a, grad_dm_b)

input:

  • r(1) ==> r(1) = x, r(2) = y, r(3) = z

output:

  • dm_a = alpha density evaluated at r

  • dm_b = beta density evaluated at r

  • grad_dm_a(1) = X gradient of the alpha density evaluated in r

  • grad_dm_a(1) = X gradient of the beta density evaluated in r

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft

Called by:

  • mu_grad_rho_func()

Calls:

  • dsymv()

  • give_all_aos_and_grad_at_r()

density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r(r,dm_a,dm_b, grad_dm_a, grad_dm_b, aos_array, grad_aos_array)

input:

  • r(1) ==> r(1) = x, r(2) = y, r(3) = z

output:

  • dm_a = alpha density evaluated at r

  • dm_b = beta density evaluated at r

  • aos_array(i) = ao(i) evaluated at r

  • grad_dm_a(1) = X gradient of the alpha density evaluated in r

  • grad_dm_a(1) = X gradient of the beta density evaluated in r

  • grad_aos_array(1) = X gradient of the aos(i) evaluated at r

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft

Called by:

  • ec_md_on_top_pbe_mu_corrected()

  • ecmd_pbe_ueg_at_r()

  • give_all_stuffs_in_r_for_lyp_88()

  • one_e_dm_and_grad_alpha_in_r

Calls:

  • dsymv()

  • give_all_aos_and_grad_at_r()

density_and_grad_lapl_alpha_beta_and_all_aos_and_grad_aos_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine density_and_grad_lapl_alpha_beta_and_all_aos_and_grad_aos_at_r(r,dm_a,dm_b, grad_dm_a, grad_dm_b, lapl_dm_a, lapl_dm_b, aos_array, grad_aos_array, lapl_aos_array)

input:

  • r(1) ==> r(1) = x, r(2) = y, r(3) = z

output:

  • dm_a = alpha density evaluated at r

  • dm_b = beta density evaluated at r

  • aos_array(i) = ao(i) evaluated at r

  • grad_dm_a(1) = X gradient of the alpha density evaluated in r

  • grad_dm_a(1) = X gradient of the beta density evaluated in r

  • grad_aos_array(1) = X gradient of the aos(i) evaluated at r

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft

Calls:

  • dsymv()

  • give_all_aos_and_grad_and_lapl_at_r()

dm_dft_alpha_beta_and_all_aos_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine dm_dft_alpha_beta_and_all_aos_at_r(r,dm_a,dm_b,aos_array)

input: r(1) ==> r(1) = x, r(2) = y, r(3) = z output : dm_a = alpha density evaluated at r output : dm_b = beta density evaluated at r output : aos_array(i) = ao(i) evaluated at r

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft

Calls:

  • dsymv()

  • give_all_aos_at_r()

dm_dft_alpha_beta_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine dm_dft_alpha_beta_at_r(r,dm_a,dm_b)

input: r(1) ==> r(1) = x, r(2) = y, r(3) = z output : dm_a = alpha density evaluated at r(3) output : dm_b = beta density evaluated at r(3)

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft

Called by:

  • correction_to_on_top_from_ueg()

  • mu_of_r_dft_average

  • mu_rsc_of_r

  • print_mos()

Calls:

  • dgemv()

  • give_all_aos_at_r()

dm_dft_alpha_beta_no_core_at_r:

File : dft_utils_in_r/dm_in_r_routines.irp.f

subroutine dm_dft_alpha_beta_no_core_at_r(r,dm_a,dm_b)

input: r(1) ==> r(1) = x, r(2) = y, r(3) = z output : dm_a = alpha density evaluated at r(3) without the core orbitals output : dm_b = beta density evaluated at r(3) without the core orbitals

Needs:

  • ao_num

  • n_states

  • one_e_dm_alpha_ao_for_dft_no_core

Calls:

  • dgemv()

  • give_all_aos_at_r()