chiark / gitweb /
compiles and most output facets are right; needs debugging
[moebius2.git] / common.h
1 /*
2  * Generally useful stuff.
3  */
4
5 #ifndef COMMON_H
6 #define COMMON_H
7
8 #ifndef _GNU_SOURCE
9 #define _GNU_SOURCE
10 #endif
11
12 #include <sys/types.h>
13 #include <sys/stat.h>
14
15 #include <math.h>
16 #include <float.h>
17 #include <limits.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <assert.h>
21 #include <errno.h>
22 #include <string.h>
23 #include <unistd.h>
24 #include <stdint.h>
25
26 #include <gsl/gsl_vector.h>
27 #include <gsl/gsl_matrix.h>
28 #include <gsl/gsl_blas.h>
29 #include <gsl/gsl_linalg.h>
30 #include <gsl/gsl_interp.h>
31
32 #define D3 3
33
34 double hypotD(const double p[D3], const double q[D3]);
35 double hypotD2(const double p[D3], const double q[D3]);
36 double hypotD2plus(const double p[D3], const double q[D3], double add);
37
38 double magnD(const double pq[D3]);
39 void xprod(double r[D3], const double a[D3], const double b[D3]);
40 double dotprod(const double a[D3], const double b[D3]);
41
42 void flushoutput(void);
43 void diee(const char *what);
44 void fail(const char *emsg);
45
46 void libdie(const char *lib, int l, const char *str);
47 #define XA(w) ((w) ? (void)0 : libdie("X", __LINE__, #w))
48
49 void gsldie(int l, const char *what, int status);
50 #define GA(w) ({int _ga_r= (w); if (w) gsldie(__LINE__,#w,_ga_r);})
51
52 #define FOR_COORD(k) \
53   for ((k)=0; (k)<D3; (k)++)
54
55 #define K FOR_COORD(k)
56
57 #define GSL_VECTOR(x) gsl_vector x##_gsl= { D3,1,&x[0] };
58 #define GSL_MATRIX(x) gsl_matrix x##_gsl= { D3,D3,D3,&x[0][0] };
59
60 #define MIN(a,b) ((a) <= (b) ? (a) : (b))
61 #define MAX(a,b) ((a) >= (b) ? (a) : (b))
62
63 #ifdef FP_FAST_FMA
64 # define fma_fast fma
65 #else
66 # define fma_fast(f1,f2,t) ((f1)*(f2)+(t))
67 #endif
68 #define ffsqa(factor,term) fma_fast((factor),(factor),(term))
69
70 #endif /*COMMON_H*/