00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00032 #if !defined(_GRID_ATOMIC_H_)
00033 #define _GRID_ATOMIC_H_ 1
00034
00035 #include "realtype.h"
00036 #include "matrix_typedefs.h"
00037 #include "basisinfo.h"
00038 #include "grid_interface.h"
00039
00040 typedef ergo_real real;
00041 typedef ergo_long_real long_real;
00042
00043 extern const real BraggRadii[];
00044 extern const unsigned BraggSize;
00045
00046
00048 struct RadialScheme {
00049 const char *name;
00050 int gridSize;
00051 explicit RadialScheme(const char *n) : name(n), gridSize(0) {}
00052 inline int size() const { return gridSize; }
00053 virtual void init(int myNumber, int charge, real threshold) = 0;
00054 virtual void generate(real *r, real *w) = 0;
00055 virtual ~RadialScheme() {}
00056 };
00057
00058 struct RadialSchemeGC2 : public RadialScheme {
00059 void *quadData;
00060 RadialSchemeGC2(): RadialScheme("Gauss-Chebychev scheme of second kind")
00061 {}
00062 virtual void init(int myNumber, int charge, real threshold);
00063 virtual void generate(real *r, real *w);
00064 };
00065
00066 struct RadialSchemeTurbo : public RadialScheme {
00067 real zeta;
00068 RadialSchemeTurbo(): RadialScheme("Chebychev T2 scheme/M4 mapping (Turbo)")
00069 {}
00070 virtual void init(int myNumber, int charge, real threshold);
00071 virtual void generate(real *r, real *w);
00072 };
00073
00074 struct RadialSchemeLMG : public RadialScheme {
00075 explicit RadialSchemeLMG(const GridGenMolInfo& ggmi_);
00076
00077 virtual void init(int myNumber, int charge, real threshold);
00078 virtual void generate(real *r, real *w);
00079 virtual ~RadialSchemeLMG();
00080 private:
00081 const GridGenMolInfo& ggmi;
00082 int *nucorb;
00083 real (*aa)[2];
00084 int maxL;
00085
00086 real rl, grdc, h, eph;
00087 };
00088
00089
00090
00091 #endif