| [a0bcf1] | 1 | #ifndef WANNIER_H_ | 
|---|
|  | 2 | #define WANNIER_H_ | 
|---|
|  | 3 |  | 
|---|
|  | 4 | /** \file wannier.h | 
|---|
|  | 5 | * Header file for \ref wannier.c | 
|---|
|  | 6 | * | 
|---|
|  | 7 | * Contains declarations of functions which reside in \ref wannier.c | 
|---|
|  | 8 | * | 
|---|
|  | 9 | Project: ParallelCarParrinello | 
|---|
|  | 10 | \author Frederik Heber | 
|---|
|  | 11 | \date 2006 | 
|---|
|  | 12 |  | 
|---|
|  | 13 | File: wannier.h | 
|---|
| [4f1369] | 14 | $Id: wannier.h,v 1.3 2007-10-08 15:43:29 heber Exp $ | 
|---|
| [a0bcf1] | 15 | */ | 
|---|
|  | 16 |  | 
|---|
|  | 17 | #include <gsl/gsl_complex.h> | 
|---|
|  | 18 |  | 
|---|
| [4f1369] | 19 | /** Structure contains all variables needed for diagonalization of a matrix with | 
|---|
|  | 20 | * SerialDiagonalization() or ParallelDiagonalization() | 
|---|
|  | 21 | */ | 
|---|
|  | 22 | struct DiagonalizationData { | 
|---|
|  | 23 | int Num;        //!< Number of rows/columns | 
|---|
|  | 24 | int AllocNum;   //!< even number of rows/columns | 
|---|
|  | 25 | int NumMatrices;//!< number of matrices to be simultaneously "actively" diagonalized | 
|---|
|  | 26 | int extra;      //!< number of additional matrices that are also, yet "passively" diagonalized (not considered in rotation angle evaluation) | 
|---|
|  | 27 | gsl_matrix *U;   //!< transformation matrix | 
|---|
|  | 28 | gsl_matrix **A;  //!< matrix to be diagonlized | 
|---|
|  | 29 | int *top;       //!< merry-go-round top row of indices | 
|---|
|  | 30 | int *bot;       //!< merry-go-round bottom row of indices | 
|---|
|  | 31 | MPI_Comm *comm; //!< MPI communicator for ParallelDiagonalization() | 
|---|
|  | 32 | int ProcRank;   //!< Rank of this process, used in ParallelDiagonalization() | 
|---|
|  | 33 | int ProcNum;    //!< Number of process in communicator, used in ParallelDiagonalization() | 
|---|
|  | 34 | }; | 
|---|
|  | 35 |  | 
|---|
|  | 36 | void PrintGSLMatrix(struct Problem *P, gsl_matrix *U, int Num, const char *msg); | 
|---|
| [a0bcf1] | 37 | void ComputeMLWF(struct Problem *P); | 
|---|
| [4f1369] | 38 | void WriteWannierFile(struct Problem *P, double spread, double old_spread, double **WannierCentre, double *WannierSpread); | 
|---|
| [a0bcf1] | 39 | int ParseWannierFile(struct Problem *P); | 
|---|
| [4f1369] | 40 | void SerialDiagonalization(struct Problem *P, struct DiagonalizationData *DiagData); | 
|---|
|  | 41 | void ParallelDiagonalization(struct Problem *P, struct DiagonalizationData *DiagData); | 
|---|
| [a0bcf1] | 42 | double CalculateSpread(struct Problem *P, int i); | 
|---|
|  | 43 | gsl_complex convertComplex (fftw_complex a); | 
|---|
| [4f1369] | 44 | void InitDiagonalization(struct Problem *P, struct DiagonalizationData *DiagData, int Num, int NumMatrices, int extra); | 
|---|
|  | 45 | void FreeDiagonalization(struct DiagonalizationData *DiagData); | 
|---|
|  | 46 | void OrthogonalizePsis(struct Problem *P); | 
|---|
|  | 47 | void StrongOrthogonalizePsis(struct Problem *P); | 
|---|
|  | 48 | void Diagonalize(struct Problem *P, struct DiagonalizationData *DiagData); | 
|---|
|  | 49 |  | 
|---|
|  | 50 | void CalculateSecondOrderReciprocalMoment(struct Problem *P); | 
|---|
| [a0bcf1] | 51 |  | 
|---|
|  | 52 | #endif /*WANNIER_H_*/ | 
|---|