1 /*
2  * Copyright (C) 2013  Qiming Sun <osirpt.sun@gmail.com>
3  *
4  * basic functions
5  */
6 
7 #include <stdint.h>
8 #include "config.h"
9 #include "fblas.h"
10 
11 #define MIN(X,Y) ((X)<(Y)?(X):(Y))
12 #define MAX(X,Y) ((X)>(Y)?(X):(Y))
13 #define SQUARE(r)       ((r)[0]*(r)[0] + (r)[1]*(r)[1] + (r)[2]*(r)[2])
14 
15 void CINTdcmplx_re(const FINT n, double complex *z, const double *re);
16 void CINTdcmplx_im(const FINT n, double complex *z, const double *im);
17 void CINTdcmplx_pp(const FINT n, double complex *z, const double *re, const double *im);
18 void CINTdcmplx_pn(const FINT n, double complex *z, const double *re, const double *im);
19 void CINTdcmplx_np(const FINT n, double complex *z, const double *re, const double *im);
20 void CINTdcmplx_nn(const FINT n, double complex *z, const double *re, const double *im);
21 
22 double CINTsquare_dist(const double *r1, const double *r2);
23 
24 double CINTgto_norm(FINT n, double a);
25 
26 #define MALLOC_INSTACK(var, n) \
27         var = (void *)(((uintptr_t)cache + 7) & (-(uintptr_t)8)); \
28         cache = (double *)(var + (n));
29 
30 #define MALLOC_ALIGN8_INSTACK(var, n) \
31         var = (void *)(((uintptr_t)cache + 63) & (-(uintptr_t)64)); \
32         cache = (double *)(var + (n));
33 
34 #ifdef WITH_CINT2_INTERFACE
35 #define ALL_CINT(NAME) \
36 FINT c##NAME##_cart(double *out, FINT *shls, FINT *atm, FINT natm, \
37             FINT *bas, FINT nbas, double *env, CINTOpt *opt) { \
38         return NAME##_cart(out, NULL, shls, atm, natm, bas, nbas, env, opt, NULL); \
39 } \
40 void c##NAME##_cart_optimizer(CINTOpt **opt, FINT *atm, FINT natm, \
41                          FINT *bas, FINT nbas, double *env) { \
42         NAME##_optimizer(opt, atm, natm, bas, nbas, env); \
43 } \
44 FINT c##NAME##_sph(double *out, FINT *shls, FINT *atm, FINT natm, \
45             FINT *bas, FINT nbas, double *env, CINTOpt *opt) { \
46         return NAME##_sph(out, NULL, shls, atm, natm, bas, nbas, env, opt, NULL); \
47 } \
48 void c##NAME##_sph_optimizer(CINTOpt **opt, FINT *atm, FINT natm, \
49                          FINT *bas, FINT nbas, double *env) { \
50         NAME##_optimizer(opt, atm, natm, bas, nbas, env); \
51 } \
52 FINT c##NAME(double *out, FINT *shls, FINT *atm, FINT natm, \
53             FINT *bas, FINT nbas, double *env, CINTOpt *opt) { \
54         return NAME##_spinor((double complex *)out, NULL, shls, \
55                              atm, natm, bas, nbas, env, opt, NULL); \
56 } \
57 void c##NAME##_optimizer(CINTOpt **opt, FINT *atm, FINT natm, \
58                          FINT *bas, FINT nbas, double *env) { \
59         NAME##_optimizer(opt, atm, natm, bas, nbas, env); \
60 }
61 
62 
63 #define ALL_CINT1E(NAME) \
64 FINT c##NAME##_cart(double *out, FINT *shls, FINT *atm, FINT natm, \
65             FINT *bas, FINT nbas, double *env) { \
66         return NAME##_cart(out, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); \
67 } \
68 FINT c##NAME##_sph(double *out, FINT *shls, FINT *atm, FINT natm, \
69             FINT *bas, FINT nbas, double *env) { \
70         return NAME##_sph(out, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL); \
71 } \
72 FINT c##NAME(double *out, FINT *shls, FINT *atm, FINT natm, \
73             FINT *bas, FINT nbas, double *env) { \
74         return NAME##_spinor((double complex *)out, NULL, shls, \
75                              atm, natm, bas, nbas, env, NULL, NULL); \
76 }
77 
78 #else
79 
80 #define ALL_CINT(NAME)
81 #define ALL_CINT1E(NAME)
82 
83 #endif  // WITH_CINT2_INTERFACE
84