VMN forms for exchange correlation

double exc(double rs)
{
  /* constants */
  const double
    pi = 4.*atan(1.),
    X1 = 0.75*pow(3.0/(2.0*pi),2.0/3.0),  /* Exchange energy coeff */
    A  =  0.0310907,
    x0 = -0.10498,
    b  = 3.72744,
    c  = 12.9352,
    Q  = sqrt(4*c-b*b),
    X0 = x0*x0+b*x0+c;

  double x=sqrt(rs),X=x*x+b*x+c;

  return -X1/rs
    + A*( 
        +log(x*x/X)+2*b/Q*atan(Q/(2*x+b))
        -(b*x0)/X0*(
                    log((x-x0)*(x-x0)/X)+2*(2*x0+b)/Q*atan(Q/(2*x+b))
                    )
        );
}

double excp(double rs)
{
  /* constants */
  const double
    pi = 4.*atan(1.),
    X1 = 0.75*pow(3.0/(2.0*pi),2.0/3.0),  /* Exchange energy coeff */
    A  =  0.0310907,
    x0 = -0.10498,
    b  = 3.72744,
    c  = 12.9352,
    Q  = sqrt(4*c-b*b),
    X0 = x0*x0+b*x0+c;

  double x=sqrt(rs),X=x*x+b*x+c;

  double dx=0.5/x; /* Chain rule needs dx/drho! */

  return dx*(
             2*X1/(rs*x)+A*( 
                            2./x-(2*x+b)/X-4*b/(Q*Q+(2*x+b)*(2*x+b))
                            -(b*x0)/X0*(2/(x-x0)-(2*x+b)/X-4*(2*x0+b)/
                                                    (Q*Q+(2*x+b)*(2*x+b)) )
                            )
             );
}


Tomas Arias 2007-03-07