Next: 11 Integration grids Up: MOLPRO Programming Manual Previous: 9.3 Specifying sorted integral

10 Density Functionals -- User Interface

      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 $K$ and pseudo functional derivative $v$ at integration points ${\bf r}_i,
i=1,\ldots\verb*+npt+$. In the following, $\tilde\rho, \bar\rho$ are the $\alpha,\beta$ spin densities; the total and spin densities are
\begin{displaymath}
\rho=\tilde\rho+\bar\rho\; , \qquad
\hat\rho=\tilde\rho-\bar\rho
\; .
\end{displaymath} (1)

Input parameters:

key specifies code-name of functional
fderiv functional derivative required, else just $K$
npt number of $\bf r$ points; if 0, run in test mode without doing any work.
rhoc $\rho=\tilde\rho+\bar\rho$
rhoo $ \hat\rho=\tilde\rho-\bar\rho$
sigmacc $\sigma = {\bf\nabla}\rho \cdot {\bf\nabla}\rho $
sigmaco $\hat\sigma =
{\bf\nabla}\rho \cdot {\bf\nabla}\hat\rho$
sigmaoo $\hat{\hat\sigma} =
{\bf\nabla}\hat\rho \cdot {\bf\nabla}\hat\rho$
tauc $\tau=\left(\sum_i^\alpha+\sum_i^\beta\right)
\left\vert{\bf\nabla}\phi_i\right\vert^2$
tauo $\hat\tau=\left(\sum_i^\alpha-\sum_i^\beta\right)
\left\vert{\bf\nabla}\phi_i\right\vert^2$
upsilonc $\upsilon=\nabla^2\rho$
upsilono $\hat\upsilon=\nabla^2\hat\rho$

Output parameters:

name full descriptive name of functional
igrad maximum order of density differentiation (0, 1 or 2)
zk $K$
vrhoc $v_{\rho} = \partial K / \partial \rho $
vrhoo $v_{\hat\rho} = \partial K / \partial \hat\rho $
vsigmacc $v_{\sigma} = \partial K / \partial \sigma $
vsigmaco $v_{\hat\sigma} =
\partial K / \partial \hat\sigma $
vsigmaoo $v_{\hat{\hat\sigma}} =
\partial K / \partial \hat{\hat\sigma} $
vtauc $v_{\tau} = \partial K / \partial \tau $
vtauo $v_{\hat\tau} = \partial K / \partial \hat\tau $
vupsilonc $v_{\upsilon} = \partial K / \partial \upsilon $
vupsilono $v_{\hat\upsilon} =
\partial K / \partial \hat\upsilon $

All of the available functionals are of the general form

\begin{displaymath}
F\left[\rho,\hat\rho,
\sigma,\hat\sigma,\hat{\hat\sigma},
\t...
...\hat{\hat\sigma},
\tau,\hat\tau,
\upsilon,\hat\upsilon
\right)
\end{displaymath} (2)

$K$ is always evaluated, and overwrites whatever was in zk. If fderiv, relevant functional derivatives $v_x$ computed, and are added in to the appropriate arrays. If .not.open, $\hat\rho$ and other open-shell entities are ignored. If igrad.lt.2, $\upsilon$ and similar are ignored; if igrad.lt.1, $\sigma, \tau$ 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.


Next: 11 Integration grids Up: MOLPRO Programming Manual Previous: 9.3 Specifying sorted integral

P.J. Knowles and H.-J. Werner
molpro-support@tc.bham.ac.uk
Jan 10, 2000