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