| 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 | 
|---|