2 * Generally useful stuff.
12 #define _XOPEN_SOURCE 1000
15 #include <sys/types.h>
29 #include <gsl/gsl_vector.h>
30 #include <gsl/gsl_matrix.h>
31 #include <gsl/gsl_blas.h>
32 #include <gsl/gsl_linalg.h>
33 #include <gsl/gsl_interp.h>
37 double hypotD(const double p[D3], const double q[D3]);
38 double hypotD2(const double p[D3], const double q[D3]);
39 double hypotD2plus(const double p[D3], const double q[D3], double add);
41 double magnD(const double pq[D3]);
42 double magnD2(const double pq[D3]);
43 void xprod(double r[D3], const double a[D3], const double b[D3]);
44 double dotprod(const double a[D3], const double b[D3]);
45 void xprod_norm(double r[D3], const double a[D3], const double b[D3],
46 double one, double absepsilon);
47 void normalise(double v[D3], double one, double absepsilon);
49 void flushoutput(void);
50 void diee(const char *what);
51 void fail(const char *emsg);
53 void libdie(const char *lib, int l, const char *str);
54 #define XA(w) ((w) ? (void)0 : libdie("X", __LINE__, #w))
56 void gsldie(int l, const char *what, int status);
57 #define GA(w) ({int _ga_r= (w); if (w) gsldie(__LINE__,#w,_ga_r);})
59 #define FOR_COORD(k) \
60 for ((k)=0; (k)<D3; (k)++)
62 #define K FOR_COORD(k)
64 #define GSL_VECTOR(x) gsl_vector x##_gsl= { D3,1,&x[0] };
65 #define GSL_MATRIX(x) gsl_matrix x##_gsl= { D3,D3,D3,&x[0][0] };
67 #define MIN(a,b) ((a) <= (b) ? (a) : (b))
68 #define MAX(a,b) ((a) >= (b) ? (a) : (b))
73 # define fma_fast(f1,f2,t) ((f1)*(f2)+(t))
75 #define ffsqa(factor,term) fma_fast((factor),(factor),(term))