subroutine dftfun_user (key,name,fderiv,open,igrad,npt,rhoc,rhoo,
> sigmacc,sigmaco,sigmaoo,
> tauc,tauo,upsilonc,upsilono,
> zk,vrhoc,vrhoo,
> vsigmacc,vsigmaco,vsigmaoo,
> vtauc,vtauo,vupsilonc,vupsilono)
implicit double precision (a-h,o-z)
logical fderiv,open
integer igrad,npt
character*(*) key,name
double precision rhoc(*),rhoo(*)
double precision sigmacc(*),sigmaco(*),sigmaoo(*)
double precision tauc(*),tauo(*)
double precision upsilonc(*),upsilono(*)
double precision zk(*),vrhoc(*),vrhoo(*)
double precision vsigmacc(*),vsigmaco(*),vsigmaoo(*)
double precision vtauc(*),vtauo(*)
double precision vupsilonc(*),vupsilono(*)
evaluates density-functional integrand | (1) |
Input parameters:
key |
specifies code-name of functional |
fderiv |
functional derivative required, else just |
npt |
number of |
rhoc |
|
rhoo |
|
sigmacc |
|
sigmaco |
|
sigmaoo |
|
tauc |
|
tauo |
|
upsilonc |
|
upsilono |
|
Output parameters:
name |
full descriptive name of functional |
igrad |
maximum order of density differentiation (0, 1 or 2) |
zk |
|
vrhoc |
|
vrhoo |
|
vsigmacc |
|
vsigmaco |
|
vsigmaoo |
|
vtauc |
|
vtauo |
|
vupsilonc |
|
vupsilono |
|
All of the available functionals are of the general form
| (2) |
is always evaluated, and overwrites whatever was in zk.
If fderiv, relevant functional derivatives
computed,
and are added in to the appropriate arrays.
If .not.open,
and other open-shell entities are
ignored.
If igrad.lt.2,
and similar are ignored;
if igrad.lt.1,
and similar are ignored.
Additional functionals can go in like this:
else if (key.eq.'MINE') then
call dftfun_mine(name,fderiv,open,igrad,npt,rhoc,rhoo,
> sigmacc,sigmaco,sigmaoo,tauc,tauo,
> upsilonc,upsilono,
> zk,vrhoc,vrhoo,
> vsigmacc,vsigmaco,vsigmaoo,vtauc,vtauo,
> vupsilonc,vupsilono)
Or simply inline as you like;
see src/dft/dftfun.f for examples.
P.J. Knowles and H.-J. Werner