1 /* -*-mode:c; c-style:bsd; c-basic-offset:4;indent-tabs-mode:nil; -*- */ 2 #if !defined(GRID_GEN_H) 3 #define GRID_GEN_H 1 4 5 #include "general.h" 6 7 typedef struct GridGenAtom_ GridGenAtom; 8 typedef struct GridGenAtomGrid_ GridGenAtomGrid; 9 typedef struct GridGenMolGrid_ GridGenMolGrid; 10 11 typedef real (*GridGeneratingFunc)(real x, real y, real z, void* arg); 12 13 struct GridGenAtom_ { 14 real x, y, z; /* coordinates of the atom */ 15 integer icent; /* number of atom in dalton common blocks */ 16 integer Z; /* its Z number */ 17 integer mult; /* number of symmetry equivalent atoms of this type * 18 * instead of having separate atoms, we multiply the * 19 * grid weights by this value. */ 20 }; 21 22 typedef enum { 23 GRID_PART_BECKE_CORR, /* with Bragg radii correction */ 24 GRID_PART_BECKE_ORIG, /* w/o Bragg radii correction */ 25 GRID_PART_SSF, 26 GRID_PART_BLOCK 27 } GridGenPartScheme; 28 29 typedef enum { 30 GRID_RAD_GC2, 31 GRID_RAD_LMG 32 } GridGenQuad; 33 34 extern integer dftgrid_adaptive; 35 36 struct RhoEvalData { 37 DftGrid* grid; 38 real* work; 39 integer* lwork; 40 real* dmat; 41 real* dmagao; 42 }; 43 44 real rho_grid_func(real x, real y, real z, void* arg); 45 46 integer grid_gen_save(const char* filename, GridGenMolGrid* mgrid); 47 integer grid_gen_generate(const char* filename, integer atom_cnt, 48 const GridGenAtom* atom_arr, real threshold, 49 GridGeneratingFunc generating_function, void* data, 50 integer minang, integer maxang, real* work, integer *lwork); 51 void grid_gen_set_part_scheme(GridGenPartScheme scheme); 52 53 typedef struct DftGridReader_ DftGridReader; 54 55 DftGridReader* grid_open(integer nbast, real *dmat, real *work, integer *lwork, integer iprint); 56 DftGridReader* grid_open_cmo(integer nbast, const real *cmo, 57 real *work, integer *lwork, integer iprint); 58 59 integer 60 grid_getchunk_blocked(DftGridReader* rawgrid, integer maxlen, 61 integer *nblocks, integer (*shlblocks)[2], 62 real (*coor)[3], real *weight); 63 64 #define grid_getchunk_plain(r,m,coor,w) \ 65 (grid_getchunk_blocked((r),(m),NULL,NULL,(coor),(w))) 66 void grid_close(DftGridReader *rawgrid); 67 68 /* CARTESIAN GRID ROUTINES */ 69 void do_cartesian_grid(integer nbast, const real* dmat, DftGridReader* res); 70 71 #endif /* !defined(GRID_GEN_H) */ 72 73 74