2 * Generally useful stuff.
7 double magnD(const double pq[D3]) {
13 /* owner and block ought not to be used */
15 return gsl_blas_dnrm2(&v);
18 double magnD2(const double pq[D3]) {
22 K d2= ffsqa(pq[k], d2);
26 double hypotD(const double p[D3], const double q[D3]) {
34 double hypotD2(const double p[D3], const double q[D3]) {
38 K d2= ffsqa(p[k] - q[k], d2);
42 double hypotD2plus(const double p[D3], const double q[D3], double d2) {
44 K d2= ffsqa(p[k] - q[k], d2);
48 void xprod(double r[D3], const double a[D3], const double b[D3]) {
49 r[0]= a[1]*b[2] - a[2]*b[1];
50 r[1]= a[2]*b[0] - a[0]*b[2];
51 r[2]= a[0]*b[1] - a[1]*b[0];
54 void normalise(double v[D3], double one, double absepsilon) {
56 double multby= one/(magnD(v) + absepsilon);
60 void xprod_norm(double r[D3], const double a[D3], const double b[D3],
61 double one, double absepsilon) {
63 normalise(r, absepsilon, one);
66 double dotprod(const double a[D3], const double b[D3]) {
69 K result += a[k] * b[k];
73 void libdie(const char *lib, int l, const char *str) {
74 fprintf(stderr,"%s library call failed, line %d: %s\n", lib, l, str);
77 void gsldie(int l, const char *what, int status) {
78 fprintf(stderr,"gsl function failed, line %d: %s: %s\n",
79 l, what, gsl_strerror(status));
83 void diee(const char *what) { perror(what); exit(16); }
84 void fail(const char *emsg) { fputs(emsg,stderr); exit(12); }
85 void flushoutput(void) { if (ferror(stdout)||fflush(stdout)) diee("stdout"); }