| [a0bcf1] | 1 | #ifndef pseudo_h
 | 
|---|
 | 2 | #define pseudo_h
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | /** \file pseudo.h
 | 
|---|
 | 5 |  * Header file for \ref pseudo.c
 | 
|---|
 | 6 |  * 
 | 
|---|
 | 7 |  * Contains declarations of the functions implemented in \ref pseudo.c and
 | 
|---|
 | 8 |  * the PseudoPot'ential structure.
 | 
|---|
 | 9 |  * 
 | 
|---|
 | 10 |   Project: ParallelCarParrinello
 | 
|---|
 | 11 |   Jan Hamaekers
 | 
|---|
 | 12 |   2000
 | 
|---|
 | 13 |   
 | 
|---|
 | 14 |   File: pseudo.h
 | 
|---|
 | 15 |   $Id: pseudo.h,v 1.19 2007/02/05 16:04:23 foo Exp $
 | 
|---|
 | 16 | */
 | 
|---|
 | 17 | 
 | 
|---|
 | 18 | 
 | 
|---|
 | 19 | // use double precision fft when we have it
 | 
|---|
 | 20 | #ifdef HAVE_CONFIG_H
 | 
|---|
 | 21 | #include <config.h>
 | 
|---|
 | 22 | #endif
 | 
|---|
 | 23 | 
 | 
|---|
 | 24 | #ifdef HAVE_DFFTW_H
 | 
|---|
 | 25 | #include "dfftw.h"
 | 
|---|
 | 26 | #else
 | 
|---|
 | 27 | #include "fftw.h"
 | 
|---|
 | 28 | #endif
 | 
|---|
 | 29 | 
 | 
|---|
 | 30 | struct Problem;
 | 
|---|
 | 31 | 
 | 
|---|
 | 32 | /** Pseudopotential structure.
 | 
|---|
 | 33 |  * Contains paramaters, form factors, positions of the for the plane waves
 | 
|---|
 | 34 |  * needed Pseudopotentials which merge fixed core electron with the core itself.
 | 
|---|
 | 35 |  */
 | 
|---|
 | 36 | struct PseudoPot {
 | 
|---|
 | 37 |   double *zval;
 | 
|---|
 | 38 |   int *nang;
 | 
|---|
 | 39 |   /* Potential Parameters */
 | 
|---|
 | 40 |   double **r;                                           //!< radial mesh for ion type
 | 
|---|
 | 41 |   double ***v;                                          //!< Potential
 | 
|---|
 | 42 |   double ***R;                                          //!< Radial density \f$R_{I_s,l} (r)\f$
 | 
|---|
 | 43 |   double ***v_loc;                 //!< Pseudo potentials \f$\nu^{ps}_{I_s} \f$, read from file in InitPseudoRead()
 | 
|---|
 | 44 |   double *clog;                 //!< Integration width in Simpson formula, see Simps()
 | 
|---|
 | 45 |   int *mmax;                                                    //!< array of number of mesh points (array size of \a **r and others) over ion type
 | 
|---|
 | 46 |   /* Gaussian */
 | 
|---|
 | 47 |   double **core;
 | 
|---|
 | 48 |   double **rc;
 | 
|---|
 | 49 |   double ***rcl;
 | 
|---|
 | 50 |   double ***al;
 | 
|---|
 | 51 |   double ***bl;
 | 
|---|
 | 52 |   double **FacGauss;                          //!< Gaussian form factor \f$\phi_{I_s}^{Gauss} (G)\f$
 | 
|---|
 | 53 |   /* formfacLocPot */
 | 
|---|
 | 54 |   int Mmax;                     //!< maximum number of mesh points of all ion types
 | 
|---|
 | 55 |   double **integrand2;              //!< temporary array containing integrand in evaluating form factor **vpsloc
 | 
|---|
 | 56 |   double *integrand;                //!< temporary array containing integrand in evaluating form factor **vpsloc
 | 
|---|
 | 57 |   double *integrand1;               //!< temporary array containing partial integrand in evaluating form factor **vpsloc
 | 
|---|
 | 58 |   double ***phi_ps_nl;                //!< non-local pseudopotential form factor for certain ion type, l and m (2l+1 ones per l!) value \f$\phi^{ps,nl}_{I_s,l,m}\f$, \sa FormFacNonLocPot()
 | 
|---|
 | 59 |   //double ***phi_ps_nl_a;               //!< sort of backup array for PseudoPot::pkg
 | 
|---|
 | 60 |   double **phi_ps_loc;                                //!< local pseudo potential form factor for certain ion type on reciprocal mesh \f$\phi^{ps,loc}_{I_s}\f$, \sa FormFacLocPot()
 | 
|---|
 | 61 |   double **wNonLoc;                                   //!< non-local pseudopotential weight \f$w^{nl}_{I_s,l}\f$, \sa FormFacNonLocPot()
 | 
|---|
 | 62 |   fftw_complex ****fnl;         //!< factors of non-local pseudopotential energy, array containing \f$f^{nl}_{i,I_s,I_a,l,m}\f$ for a certain wave function i, ion of type, ion of type \f$I_s \f$and lm value, \sa CalculateNonLocalEnergyNoRT()
 | 
|---|
 | 63 |   fftw_complex ***CDfnl;        //!< factors of non-local pseudopotential energy for conjugate direction (CD), array for a certain ion type, ion of type and lm value
 | 
|---|
 | 64 |   fftw_complex *dfnl;           //!< temporary array containing part (of one process) of non-local factors \f$f^{nl}_{i,I_s,I_a,l,m}\f$ for a certain ion of type, , \sa CalculateNonLocalEnergyNoRT()
 | 
|---|
 | 65 |   fftw_complex *VCoulombc;      //!< Coulomb or Hartree potential and local pseudopotenial \f$\frac{4\pi}{V|G|^2} |\hat{\widetilde{n}}(G)|^2 + \sum_{I_s} S_{I_s} (G) \phi^{ps,loc}_{I_s} (G) \hat{n}^\ast (G)\f$
 | 
|---|
 | 66 |   fftw_complex ***ei;           //!< topmost (zeroth) level: \f$\exp(i R_{I_s,I_a}\cdot G)\f$, three-dimensional array over ion type, ion of type and grid vector in LatticeLevel::GArray
 | 
|---|
 | 67 |   fftw_complex ***expiGR;       //!< standard level: \f$\exp(i(G \cdot R))\f$ for each ion type, ion of type and grid vector, \sa CalcExpiGR()
 | 
|---|
 | 68 |   int *lm_end;                  //!< array of over ion type \f$I_S\f$ containing its topmost m eigenvalue
 | 
|---|
 | 69 |   int lm_endmax;                //!< maximum m eigenvalue of all ion types
 | 
|---|
 | 70 |   double *rr;
 | 
|---|
 | 71 |   fftw_complex *t;
 | 
|---|
 | 72 |   struct Plans *P;
 | 
|---|
 | 73 |   double fac1sqrt2PI;           //!< factor: \f$\frac{1}{\sqrt{2\pi}}\f$
 | 
|---|
 | 74 |   double fac1sqrtPI;            //!< factor: \f$\frac{1}{\sqrt{\pi}}\f$
 | 
|---|
 | 75 |   double **corewave;
 | 
|---|
 | 76 |   double **formfCore;           //!< partial core form factor, \f$\phi^{pc}_{I_s}(G)\f$
 | 
|---|
 | 77 |   enum CoreCorrType corecorr;
 | 
|---|
 | 78 | };
 | 
|---|
 | 79 | 
 | 
|---|
 | 80 | 
 | 
|---|
 | 81 | void InitPseudoRead(struct Problem *P, char *mainname);
 | 
|---|
 | 82 | void ChangePseudoToLevUp(struct Problem *P);
 | 
|---|
 | 83 | void UpdatePseudoToNewWaves(struct Problem *P);
 | 
|---|
 | 84 | void RemovePseudoRead(struct Problem *P);
 | 
|---|
 | 85 | void CalculateNonLocalEnergyNoRT(struct Problem *P, const int i);
 | 
|---|
 | 86 | void CalculateNonLocalEnergyUseRT(struct Problem *P, const int i);
 | 
|---|
 | 87 | 
 | 
|---|
 | 88 | void CalculateGaussSelfEnergyNoRT(struct Problem *P, struct PseudoPot *PP, struct Ions *I);
 | 
|---|
 | 89 | void CalculateSomeEnergyAndHGNoRT(struct Problem *P);
 | 
|---|
 | 90 | 
 | 
|---|
 | 91 | void CalculateAddNLPot(struct Problem *P, fftw_complex *HNL, fftw_complex ***fnl, double PsiFactor);
 | 
|---|
 | 92 | void CalculateCDfnl(struct Problem *P, fftw_complex *ConDir, fftw_complex ***CDfnl);
 | 
|---|
 | 93 | void CalculateIonLocalForce(struct Problem *P);
 | 
|---|
 | 94 | void CalculateIonNonLocalForce(struct Problem *P);
 | 
|---|
 | 95 | #endif
 | 
|---|