Documentation for module xc_xbecke_roussel

Calculates the exchange energy based on the Becke-Roussel exchange hole. Takes advantage of an analytical representation of the hole in order to avoid solving a non-linear equation by means of Newton- Raphson algorithm

source: xc_xbecke_roussel.F
Loading...

public Subroutines/Functions:

evaluates the Becke Roussel exchange functional for lda
return various information on the functional
evaluates the Becke Roussel exchange functional for lda
return various information on the functional
Full range evaluation for y > 0
Truncated long range part for y > 0
full range evaluation for y <= 0
Truncated long range part for y <= 0

SUBROUTINExbecke_roussel_lda_eval(rho_set, deriv_set, grad_deriv, br_params)

evaluates the Becke Roussel exchange functional for lda

Arguments:
POINTER
:: rho_set the density where you want to evaluate the functional
POINTER
:: deriv_set place where to store the functional derivatives (they are added to the derivatives)
INTEGER,
INTENT(in)
:: grad_deriv degree of the derivative that should be evalated, if positive all the derivatives up to the given degree are evaluated, if negative only the given degree is calculated
POINTER
:: br_params parameters for the becke roussel functional

SUBROUTINExbecke_roussel_lda_info(reference, shortform, needs, max_deriv)

return various information on the functional

Arguments:
CHARACTER(*),
INTENT(out),
OPTIONAL
:: reference string with the reference of the actual functional
CHARACTER(*),
INTENT(out),
OPTIONAL
:: shortform string with the shortform of the functional name
INTENT(inout),
OPTIONAL
:: needs the components needed by this functional are set to true (does not set the unneeded components to false)
INTEGER,
INTENT(out),
OPTIONAL
:: max_deriv controls the number of derivatives

SUBROUTINExbecke_roussel_lsd_eval(rho_set, deriv_set, grad_deriv, br_params)

evaluates the Becke Roussel exchange functional for lda

Arguments:
POINTER
:: rho_set the density where you want to evaluate the functional
POINTER
:: deriv_set place where to store the functional derivatives (they are added to the derivatives)
INTEGER,
INTENT(in)
:: grad_deriv degree of the derivative that should be evalated, if positive all the derivatives up to the given degree are evaluated, if negative only the given degree is calculated
POINTER
:: br_params parameters for the becke roussel functional

SUBROUTINExbecke_roussel_lsd_info(reference, shortform, needs, max_deriv)

return various information on the functional

Arguments:
CHARACTER(*),
INTENT(out),
OPTIONAL
:: reference string with the reference of the actual functional
CHARACTER(*),
INTENT(out),
OPTIONAL
:: shortform string with the shortform of the functional name
INTENT(inout),
OPTIONAL
:: needs the components needed by this functional are set to true (does not set the unneeded components to false)
INTEGER,
INTENT(out),
OPTIONAL
:: max_deriv ...

SUBROUTINEx_br_lsd_y_gt_0(rho, ndrho, tau, laplace_rho, e_0, e_rho, e_ndrho, e_tau, e_laplace_rho, sx, gamma, grad_deriv)

Full range evaluation for y > 0

Arguments:
REAL(dp),
INTENT(in)
:: rho ...
REAL(dp),
INTENT(in)
:: ndrho ...
REAL(dp),
INTENT(in)
:: tau ...
REAL(dp),
INTENT(in)
:: laplace_rho ...
REAL(dp),
INTENT(inout)
:: e_0 ...
REAL(dp),
INTENT(inout)
:: e_rho ...
REAL(dp),
INTENT(inout)
:: e_ndrho ...
REAL(dp),
INTENT(inout)
:: e_tau ...
REAL(dp),
INTENT(inout)
:: e_laplace_rho ...
REAL(dp),
INTENT(in)
:: sx ...
REAL(dp),
INTENT(in)
:: gamma ...
INTEGER,
INTENT(in)
:: grad_deriv ...

SUBROUTINEx_br_lsd_y_gt_0_cutoff(rho, ndrho, tau, laplace_rho, e_0, e_rho, e_ndrho, e_tau, e_laplace_rho, sx, r, gamma, grad_deriv)

Truncated long range part for y > 0

Arguments:
REAL(dp),
INTENT(in)
:: rho ...
REAL(dp),
INTENT(in)
:: ndrho ...
REAL(dp),
INTENT(in)
:: tau ...
REAL(dp),
INTENT(in)
:: laplace_rho ...
REAL(dp),
INTENT(inout)
:: e_0 ...
REAL(dp),
INTENT(inout)
:: e_rho ...
REAL(dp),
INTENT(inout)
:: e_ndrho ...
REAL(dp),
INTENT(inout)
:: e_tau ...
REAL(dp),
INTENT(inout)
:: e_laplace_rho ...
REAL(dp),
INTENT(in)
:: sx ...
REAL(dp),
INTENT(in)
:: r ...
REAL(dp),
INTENT(in)
:: gamma ...
INTEGER,
INTENT(in)
:: grad_deriv ...

SUBROUTINEx_br_lsd_y_lte_0(rho, ndrho, tau, laplace_rho, e_0, e_rho, e_ndrho, e_tau, e_laplace_rho, sx, gamma, grad_deriv)

full range evaluation for y <= 0

Arguments:
REAL(dp),
INTENT(in)
:: rho ...
REAL(dp),
INTENT(in)
:: ndrho ...
REAL(dp),
INTENT(in)
:: tau ...
REAL(dp),
INTENT(in)
:: laplace_rho ...
REAL(dp),
INTENT(inout)
:: e_0 ...
REAL(dp),
INTENT(inout)
:: e_rho ...
REAL(dp),
INTENT(inout)
:: e_ndrho ...
REAL(dp),
INTENT(inout)
:: e_tau ...
REAL(dp),
INTENT(inout)
:: e_laplace_rho ...
REAL(dp),
INTENT(in)
:: sx ...
REAL(dp),
INTENT(in)
:: gamma ...
INTEGER,
INTENT(in)
:: grad_deriv ...

SUBROUTINEx_br_lsd_y_lte_0_cutoff(rho, ndrho, tau, laplace_rho, e_0, e_rho, e_ndrho, e_tau, e_laplace_rho, sx, r, gamma, grad_deriv)

Truncated long range part for y <= 0

Arguments:
REAL(dp),
INTENT(in)
:: rho ...
REAL(dp),
INTENT(in)
:: ndrho ...
REAL(dp),
INTENT(in)
:: tau ...
REAL(dp),
INTENT(in)
:: laplace_rho ...
REAL(dp),
INTENT(inout)
:: e_0 ...
REAL(dp),
INTENT(inout)
:: e_rho ...
REAL(dp),
INTENT(inout)
:: e_ndrho ...
REAL(dp),
INTENT(inout)
:: e_tau ...
REAL(dp),
INTENT(inout)
:: e_laplace_rho ...
REAL(dp),
INTENT(in)
:: sx ...
REAL(dp),
INTENT(in)
:: r ...
REAL(dp),
INTENT(in)
:: gamma ...
INTEGER,
INTENT(in)
:: grad_deriv ...