#ifndef excor_h #define excor_h /** \file excor.h * Header file for \ref excor.c * * Contains declarations of the functions implemented in \ref excor.c, * enumeration if density polarised or not UnPolarised and ExCor parameter * structure. * Project: ParallelCarParrinello Jan Hamaekers 2000 File: excor.h $Id: excor.h,v 1.14 2006/05/23 14:22:05 foo Exp $ */ //! exchange and correlation energy for the polarised or unpolarised one. enum UnPolarised {unpolarised, //!< energy in SpinType#SpinDouble case (no polarisation) polarised //!< energy in SpinType#SpinUp/SpinType#SpinDown case (polarisation) }; /** Exchange correlation structure. * Contains simply all the parameters to evaluate the energy. */ struct ExCor { double gamma[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s \geq 1\f$ double beta_1[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s \geq 1\f$ double beta_2[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s \geq 1\f$ double A[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s < 1\f$ double B[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s < 1\f$ double C[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s < 1\f$ double D[2]; //!< un-/polarised parametrization value for \f${\cal E}_c \f$, \f$r_s < 1\f$ double fac34pi; //!< factor: \f$-\frac{3}{4\pi}\f$ double facexrs; //!< factor: \f$-\frac{3}{4\pi} (\frac{9\pi}{4})^{1/3}\f$ double epsilon0; //!< set to MYEPSILON double fac6PI23; //!< factor: \f$(\frac{6}{\pi})^{2/3}\f$ double facPI213; //!< factor: \f$(\frac{\pi}{2})^{1/3}\f$ double fac3PI23; //!< factor: \f$(3\pi)^{2/3}\f$ double fac6PIPI23; //!< factor: \f$(6\pi^2)^{2/3}\f$ double fac243; //!< factor: \f$(2)^{4/3}\f$ double fac1213; //!< factor: \f$(\frac{1}{2})^{1/3}\f$ }; double Calcrs(struct ExCor *EC, double p); double CalcZeta(struct ExCor *EC, double pUp, double pDown); double CalcSEXr(struct ExCor *EC, double rsUp, double rsDown, double pUp, double pDown); double CalcSE_GC(struct ExCor *EC, double p, double Dp); double CalcSVVXr(struct ExCor *EC, double rs, enum SpinType ST); double CalcSVVVXr(struct ExCor *EC, double rs, enum SpinType ST); double CalcSECr(struct ExCor *EC, double rs, double zeta, double p); double CalcSVVCr(struct ExCor *EC, double rs, double zeta, enum SpinType ST, double pUp, double pDown); double CalcSVVVCr(struct ExCor *EC, double rs, double zeta, enum SpinType ST, double pUp, double pDown); void InitExchangeCorrelationEnergy(struct Problem *P, struct ExCor *EC); void CalculateXCEnergyNoRT(struct Problem *P); void CalculateXCEnergyUseRT(struct Problem *P); void CalculateXCPotentialNoRT(struct Problem *P, fftw_real *HGR); double CalculateXCddEddt0NoRT(struct Problem *P, fftw_real *PsiCD); double DensityGradient(fftw_real *density, int i, struct LatticeLevel *Lev, struct Lattice *Lat); #endif