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
00028
00029
00034 #if !defined(_GRID_ATOMIC_H_)
00035 #define _GRID_ATOMIC_H_ 1
00036
00037 #include "realtype.h"
00038 #include "matrix_typedefs.h"
00039 #include "basisinfo.h"
00040 #include "grid_interface.h"
00041
00042 typedef ergo_real real;
00043 typedef ergo_long_real long_real;
00044
00045 extern const real BraggRadii[];
00046 extern const unsigned BraggSize;
00047
00048
00050 struct RadialScheme {
00051 const char *name;
00052 int gridSize;
00053 explicit RadialScheme(const char *n) : name(n), gridSize(0) {}
00054 inline int size() const { return gridSize; }
00055 virtual void init(int myNumber, int charge, real threshold) = 0;
00056 virtual void generate(real *r, real *w) = 0;
00057 virtual ~RadialScheme() {}
00058 };
00059
00060 struct RadialSchemeGC2 : public RadialScheme {
00061 void *quadData;
00062 RadialSchemeGC2(): RadialScheme("Gauss-Chebychev scheme of second kind")
00063 {}
00064 virtual void init(int myNumber, int charge, real threshold);
00065 virtual void generate(real *r, real *w);
00066 };
00067
00068 struct RadialSchemeTurbo : public RadialScheme {
00069 real zeta;
00070 RadialSchemeTurbo(): RadialScheme("Chebychev T2 scheme/M4 mapping (Turbo)")
00071 {}
00072 virtual void init(int myNumber, int charge, real threshold);
00073 virtual void generate(real *r, real *w);
00074 };
00075
00076 struct RadialSchemeLMG : public RadialScheme {
00077 explicit RadialSchemeLMG(const GridGenMolInfo& ggmi_);
00078
00079 virtual void init(int myNumber, int charge, real threshold);
00080 virtual void generate(real *r, real *w);
00081 virtual ~RadialSchemeLMG();
00082 private:
00083 const GridGenMolInfo& ggmi;
00084 int *nucorb;
00085 real (*aa)[2];
00086 int maxL;
00087
00088 real rl, grdc, h, eph;
00089 };
00090
00091
00092
00093 #endif