X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=moebius2.git;a=blobdiff_plain;f=common.c;h=bfe11b7dc23851e0e427f45533a86d9df2f0b112;hp=47edc4ddbe0f6be0e5c275aa8192f190ecaf1967;hb=c87e982d2102c4276f22429a47d09c59b993f41e;hpb=2c2c1cc2745430048709dc3b11aef7071d802c86 diff --git a/common.c b/common.c index 47edc4d..bfe11b7 100644 --- a/common.c +++ b/common.c @@ -5,14 +5,15 @@ #include "common.h" double magnD(const double pq[D3]) { - gsl_vector v; - - v.size= D3; - v.stride= 1; - v.vector.data= pq; - /* owner and block ought not to be used */ + return sqrt(magnD2(pq)); +} - return gsl_blas_snrm2(&v); +double magnD2(const double pq[D3]) { + int k; + double d2= 0; + + K d2= ffsqa(pq[k], d2); + return d2; } double hypotD(const double p[D3], const double q[D3]) { @@ -20,22 +21,58 @@ double hypotD(const double p[D3], const double q[D3]) { double pq[D3]; K pq[k]= p[k] - q[k]; - return hypotD1(pq); + return magnD(pq); } double hypotD2(const double p[D3], const double q[D3]) { + int k; double d2= 0; + K d2= ffsqa(p[k] - q[k], d2); return d2; } double hypotD2plus(const double p[D3], const double q[D3], double d2) { + int k; K d2= ffsqa(p[k] - q[k], d2); return d2; } void xprod(double r[D3], const double a[D3], const double b[D3]) { - r[0]= a[1]*b[2] - a[2]*b[1]); - r[1]= a[2]*b[0] - a[0]*b[2]); - r[2]= a[0]*b[1] - a[1]*b[0]); + r[0]= a[1]*b[2] - a[2]*b[1]; + r[1]= a[2]*b[0] - a[0]*b[2]; + r[2]= a[0]*b[1] - a[1]*b[0]; +} + +void normalise(double v[D3], double one, double absepsilon) { + int k; + double multby= one/(magnD(v) + absepsilon); + K v[k] *= multby; } + +void xprod_norm(double r[D3], const double a[D3], const double b[D3], + double one, double absepsilon) { + xprod(r,a,b); + normalise(r, absepsilon, one); +} + +double dotprod(const double a[D3], const double b[D3]) { + int k; + double result= 0; + K result += a[k] * b[k]; + return result; +} + +void libdie(const char *lib, int l, const char *str) { + fprintf(stderr,"%s library call failed, line %d: %s\n", lib, l, str); +} + +void gsldie(int l, const char *what, int status) { + fprintf(stderr,"gsl function failed, line %d: %s: %s\n", + l, what, gsl_strerror(status)); + exit(-1); +} + +void diee(const char *what) { perror(what); exit(16); } +void fail(const char *emsg) { fputs(emsg,stderr); exit(12); } +void flushoutput(void) { if (ferror(stdout)||fflush(stdout)) diee("stdout"); }