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