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