diff options
author | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2011-08-08 01:40:29 +0000 |
---|---|---|
committer | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2011-08-08 01:40:29 +0000 |
commit | cc49cae66d85758463d43ca1166da59e0eef8bb3 (patch) | |
tree | c645cdad984f17a8fdfab72eb0f4593fe714d870 | |
parent | ced921c204699a6827162d211b238ea0bc1dafb5 (diff) |
Add more vectorisation tests. Add test case.
Add vectorisation test for vector creation, load, and store
statements.
Convert C to C++ since vectorisation requires C++.
Add test case.
Beautify vectorsation templates.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/Vectors/trunk@26 105869f7-3296-0410-a4ea-f4349344b45a
-rw-r--r-- | param.ccl | 4 | ||||
-rw-r--r-- | src/make.code.defn | 2 | ||||
-rw-r--r-- | src/test.c | 83 | ||||
-rw-r--r-- | src/test.cc | 184 | ||||
-rw-r--r-- | src/vectors-4-SSE.h | 14 | ||||
-rw-r--r-- | src/vectors-4-default.h | 12 | ||||
-rw-r--r-- | src/vectors-8-DoubleHummer.h | 6 | ||||
-rw-r--r-- | src/vectors-8-SSE2.h | 14 | ||||
-rw-r--r-- | src/vectors-8-default.h | 12 | ||||
-rw-r--r-- | src/vectors.cc (renamed from src/vectors.c) | 1 | ||||
-rw-r--r-- | test/vectors.par | 13 | ||||
-rw-r--r-- | test/vectors/r_3D_diagonal.xg | 143 | ||||
-rw-r--r-- | test/vectors/r_x_[5][5].xg | 143 | ||||
-rw-r--r-- | test/vectors/r_y_[5][5].xg | 143 | ||||
-rw-r--r-- | test/vectors/r_z_[5][5].xg | 143 |
15 files changed, 810 insertions, 107 deletions
@@ -1 +1,5 @@ # Parameter definitions for thorn Vectors + +BOOLEAN verbose "Verbose output during vector tests" +{ +} "no" diff --git a/src/make.code.defn b/src/make.code.defn index dea6494..5c61b31 100644 --- a/src/make.code.defn +++ b/src/make.code.defn @@ -1,7 +1,7 @@ # Main make.code.defn file for thorn Vectors # Source files in this directory -SRCS = vectors.c test.c +SRCS = vectors.cc test.cc # Subdirectories containing source files SUBDIRS = diff --git a/src/test.c b/src/test.c deleted file mode 100644 index 680e775..0000000 --- a/src/test.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Parameters.h" -#include "vectors.h" -#include <math.h> - -#define VECTEST(testname, vecexpr, scalarexpr) \ -{ \ - CCTK_REAL_VEC rv = vecexpr; \ - for(int i=0; i<CCTK_REAL_VEC_SIZE; i++) { \ - CCTK_REAL res = scalarexpr; \ - CCTK_REAL vecres = vec_elt(rv,i); \ - if(vecres == res) \ - passed++; \ - else \ - CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, \ - CCTK_THORNSTRING, "Failed test %s", testname); \ - numtests++; \ - } \ -} - -void Vectors_Test(CCTK_ARGUMENTS) -{ - DECLARE_CCTK_ARGUMENTS; - DECLARE_CCTK_PARAMETERS; - - CCTK_INT passed = 0, numtests=0; - - CCTK_REAL a[CCTK_REAL_VEC_SIZE]; - CCTK_REAL b[CCTK_REAL_VEC_SIZE]; - CCTK_REAL c[CCTK_REAL_VEC_SIZE]; - - for(int i=0; i<CCTK_REAL_VEC_SIZE; i++) { - a[i] = (i+1)*1.23456789; - b[i] = -(i+1)*9.87654321; - c[i] = (i+1)*1.01010101; - } - - CCTK_REAL_VEC av = vec_loadu(a[0]); - CCTK_REAL_VEC bv = vec_loadu(b[0]); - CCTK_REAL_VEC cv = vec_loadu(c[0]); - CCTK_REAL_VEC rv = vec_loadu(c[0]); - - /* TODO: Add individual tests for vec_set1, vec_set, vec_elt0, vec_elt - vec_load, vec_loadu, vec_loadu_maybe, vec_loadu_maybe3 - vec_store, vec_store_nta, vec_store_nta_partial_lo, - vec_store_nta_partial_hi, vec_store_nta_partial_mid */ - - VECTEST("kpos", kpos(av), +a[i] ); - VECTEST("kneg", kneg(av), -a[i] ); - - VECTEST("kadd", kadd(av, bv), a[i] + b[i] ); - VECTEST("ksub", ksub(av, bv), a[i] - b[i] ); - VECTEST("kmul", kmul(av, bv), a[i] * b[i] ); - VECTEST("kdiv", kdiv(av, bv), a[i] / b[i] ); - - VECTEST("kmadd", kmadd(av, bv, cv), a[i] * b[i] + c[i] ); - VECTEST("kmsub", kmsub(av, bv, cv), a[i] * b[i] - c[i] ); - VECTEST("knmadd", knmadd(av, bv, cv), -a[i] * b[i] - c[i] ); - VECTEST("knmsub", knmsub(av, bv, cv), -a[i] * b[i] + c[i] ); - - VECTEST("kexp", kexp(av), exp(a[i]) ); - VECTEST("kfabs", kfabs(av), fabs(a[i]) ); - VECTEST("kfmax", kfmax(av, bv), fmax(a[i], b[i]) ); - VECTEST("kfmin", kfmin(av, bv), fmin(a[i], b[i]) ); - VECTEST("kfnabs", kfnabs(av), -fabs(a[i]) ); - VECTEST("klog", klog(av), log(a[i]) ); - VECTEST("kpow", kpow(av, 3.14159), pow(a[i], 3.14159) ); - VECTEST("ksqrt", ksqrt(av), sqrt(a[i]) ); - - VECTEST("kifpos positive", kifpos(av, bv, cv), signbit(a[i]) ? c[i] : b[i]); - VECTEST("kifpos negative", kifpos(bv, bv, cv), signbit(b[i]) ? c[i] : b[i]); - VECTEST("kifpos 0", kifpos(ToReal(0.),bv,cv), signbit(0.)?c[i]:b[i]); - VECTEST("kifpos -0", kifpos(ToReal(-0.),bv,cv), signbit(-0.)?c[i]:b[i]); - - if (passed != numtests) - CCTK_VWarn(CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING, - "Failed %d correctness tests", numtests - passed); - else - CCTK_VInfo(CCTK_THORNSTRING, "%d/%d tests passed ", passed, numtests); - - return; -} diff --git a/src/test.cc b/src/test.cc new file mode 100644 index 0000000..7e76362 --- /dev/null +++ b/src/test.cc @@ -0,0 +1,184 @@ +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" +#include "vectors.h" +#include <math.h> +#include <stdio.h> + +#define SCALARTEST(testname, vecexpr, scalarexpr) \ +do { \ + if (verbose) \ + CCTK_VInfo (CCTK_THORNSTRING, "Test %s...", testname); \ + CCTK_REAL res = (scalarexpr); \ + CCTK_REAL vecres = (vecexpr); \ + if(vecres == res) \ + passed++; \ + else \ + CCTK_VParamWarn(CCTK_THORNSTRING, "Failed test %s", (testname)); \ + numtests++; \ +} while(0) + +#define VECTEST(testname, vecexpr, scalarexpr) \ +do { \ + if (verbose) \ + CCTK_VInfo (CCTK_THORNSTRING, "Test %s...", testname); \ + CCTK_REAL_VEC rv = (vecexpr); \ + for(int i=0; i<CCTK_REAL_VEC_SIZE; i++) { \ + CCTK_REAL res = (scalarexpr); \ + CCTK_REAL vecres = vec_elt(rv,i); \ + if(vecres == res) \ + passed++; \ + else \ + CCTK_VParamWarn(CCTK_THORNSTRING, "Failed test %s", (testname)); \ + numtests++; \ + } \ +} while(0) + +extern "C" +void Vectors_Test(CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + CCTK_INFO ("Testing vectorisation... [errors may result in segfaults]"); + fflush (stdout); + + char testname[100]; + + int passed = 0, numtests = 0; + + CCTK_REAL a[CCTK_REAL_VEC_SIZE]; + CCTK_REAL b[CCTK_REAL_VEC_SIZE]; + CCTK_REAL c[CCTK_REAL_VEC_SIZE]; + + for(int i=0; i<CCTK_REAL_VEC_SIZE; i++) { + a[i] = (i+1)*1.23456789; + b[i] = -(i+1)*9.87654321; + c[i] = (i+1)*1.01010101; + } + + CCTK_REAL_VEC av = vec_loadu(a[0]); + CCTK_REAL_VEC bv = vec_loadu(b[0]); + CCTK_REAL_VEC cv = vec_loadu(c[0]); + + /* l and lv are similar to a and av, except that it is larger, and + guaranteed to be aligned */ + CCTK_REAL_VEC lv[4]; + lv[0] = vec_loadu(a[0]); + lv[1] = vec_loadu(b[0]); + lv[2] = vec_loadu(c[0]); + lv[3] = vec_loadu(a[0]); + CCTK_REAL *const l = (CCTK_REAL*)&lv[0]; + + /* s and sv are similar to a and av, but are aligned and not + initialised */ + CCTK_REAL_VEC sv; + CCTK_REAL *const s = (CCTK_REAL*)&sv; + + /* TODO: Add individual tests for vec_set1, vec_set, vec_elt0, vec_elt + vec_load, vec_loadu, vec_loadu_maybe, vec_loadu_maybe3 + vec_store, vec_store_nta, vec_store_nta_partial_lo, + vec_store_nta_partial_hi, vec_store_nta_partial_mid */ + + VECTEST("vec_set1", vec_set1(a[0]), a[0]); +#if CCTK_REAL_VEC_SIZE == 1 + VECTEST("vec_set", vec_set(a[0]), a[i]); +#elif CCTK_REAL_VEC_SIZE == 2 + VECTEST("vec_set", vec_set(a[0],a[1]), a[i]); +#elif CCTK_REAL_VEC_SIZE == 4 + VECTEST("vec_set", vec_set(a[0],a[1],a[2],a[3]), a[i]); +#else +# error "Unsupported vector size" +#endif + SCALARTEST("vec_elt0", vec_elt0(av), a[0]); + for (int d=0; d<CCTK_REAL_VEC_SIZE; ++d) { + snprintf (testname, sizeof testname, "vec_elt[%d]", d); + SCALARTEST(testname, vec_elt(av,d), a[d]); + } + + /* These tests will probably fail with a segfault, if they fail */ + VECTEST("vec_load", vec_load(*l), l[i]); + for (int d=0; d<CCTK_REAL_VEC_SIZE; ++d) { + snprintf (testname, sizeof testname, "vec_loadu[%d]", d); + VECTEST(testname, vec_loadu(l[d]), l[i+d]); + } + for (int d=0; d<CCTK_REAL_VEC_SIZE; ++d) { + snprintf (testname, sizeof testname, "vec_loadu_maybe[%d]", d); + VECTEST(testname, vec_loadu_maybe(d,l[d]), l[i+d]); + } + for (int d1=0; d1<CCTK_REAL_VEC_SIZE; ++d1) { + for (int d2=0; d2<CCTK_REAL_VEC_SIZE; ++d2) { + for (int d3=0; d3<CCTK_REAL_VEC_SIZE; ++d3) { + if (! VECTORISE_ALIGNED_ARRAYS || (d2==0 && d3==0)) { + snprintf (testname, sizeof testname, + "vec_loadu_maybe3[%d,%d,%d]", d1,d2,d3); + VECTEST(testname, + vec_loadu_maybe3(d1,d2,d3,l[d1+d2+d3]), l[i+d1+d2+d3]); + } + } + } + } + + /* These tests may fail with a segfault, if they fail */ + sv = av; vec_store(*s, bv); + VECTEST("vec_store", sv, b[i]); + sv = av; vec_store_nta(*s, bv); + VECTEST("vec_store_nta", sv, b[i]); + /* The partial stores are not implemented for d==0 and + d==CCTK_REAL_VEC_SIZE-1 (because these are trivial) */ + for (int d=1; d<CCTK_REAL_VEC_SIZE-1; ++d) { + sv = av; vec_store_nta_partial_lo(*s, bv, d); + snprintf (testname, sizeof testname, "vec_store_nta_partial_lo[%d]", d); + VECTEST(testname, sv, i<d ? b[i] : a[i]); + } + for (int d=1; d<CCTK_REAL_VEC_SIZE-1; ++d) { + sv = av; vec_store_nta_partial_hi(*s, bv, d); + snprintf (testname, sizeof testname, "vec_store_nta_partial_hi[%d]", d); + VECTEST(testname, sv, i>=CCTK_REAL_VEC_SIZE-d ? b[i] : a[i]); + } + for (int dlo=1; dlo<CCTK_REAL_VEC_SIZE-1; ++dlo) { + for (int dhi=1; dhi<CCTK_REAL_VEC_SIZE-1; ++dhi) { + sv = av; vec_store_nta_partial_mid(*s, bv, dlo, dhi); + snprintf (testname, sizeof testname, + "vec_store_nta_partial_mid[%d,%d]", dlo, dhi); + VECTEST(testname, sv, i<dlo && i>=CCTK_REAL_VEC_SIZE-dhi ? b[i] : a[i]); + } + } + + VECTEST("kpos", kpos(av), +a[i] ); + VECTEST("kneg", kneg(av), -a[i] ); + + VECTEST("kadd", kadd(av, bv), a[i] + b[i] ); + VECTEST("ksub", ksub(av, bv), a[i] - b[i] ); + VECTEST("kmul", kmul(av, bv), a[i] * b[i] ); + VECTEST("kdiv", kdiv(av, bv), a[i] / b[i] ); + + VECTEST("kmadd", kmadd(av, bv, cv), a[i] * b[i] + c[i] ); + VECTEST("kmsub", kmsub(av, bv, cv), a[i] * b[i] - c[i] ); + VECTEST("knmadd", knmadd(av, bv, cv), -a[i] * b[i] - c[i] ); + VECTEST("knmsub", knmsub(av, bv, cv), -a[i] * b[i] + c[i] ); + + VECTEST("kexp", kexp(av), exp(a[i]) ); + VECTEST("kfabs", kfabs(av), fabs(a[i]) ); + VECTEST("kfmax", kfmax(av, bv), fmax(a[i], b[i]) ); + VECTEST("kfmin", kfmin(av, bv), fmin(a[i], b[i]) ); + VECTEST("kfnabs", kfnabs(av), -fabs(a[i]) ); + VECTEST("klog", klog(av), log(a[i]) ); + VECTEST("kpow", kpow(av, 3.14159), pow(a[i], 3.14159) ); + VECTEST("ksqrt", ksqrt(av), sqrt(a[i]) ); + + VECTEST("kifpos positive", + kifpos(av, bv, cv), std::signbit(a[i]) ? c[i] : b[i]); + VECTEST("kifpos negative", + kifpos(bv, bv, cv), std::signbit(b[i]) ? c[i] : b[i]); + VECTEST("kifpos 0", kifpos(vec_set1(0.),bv,cv), b[i]); + VECTEST("kifpos -0", kifpos(vec_set1(-0.),bv,cv), c[i]); + + if (passed != numtests) + CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Failed %d correctness tests", numtests - passed); + else + CCTK_VInfo(CCTK_THORNSTRING, "%d/%d tests passed ", passed, numtests); + + return; +} diff --git a/src/vectors-4-SSE.h b/src/vectors-4-SSE.h index d04d0b7..49925c1 100644 --- a/src/vectors-4-SSE.h +++ b/src/vectors-4-SSE.h @@ -5,6 +5,9 @@ +#include <assert.h> +#include <math.h> + #include <xmmintrin.h> #ifdef __SSE4_1__ // Intel's SSE 4.1 @@ -309,12 +312,11 @@ static const union { #ifdef __SSE4_1__ # define k4ifpos(x,y,z) (_mm_blendv_ps(y,z,x)) #else -#include <math.h> -#ifdef __cplusplus -#define SGN(x) std::signbit(x) -#else -#define SGN(x) signbit(x) -#endif +# ifdef __cplusplus +# define SGN(x) std::signbit(x) +# else +# define SGN(x) signbit(x) +# endif # define k4ifpos(x,y,z) \ ({ \ CCTK_REAL4_VEC const xx=(x_); \ diff --git a/src/vectors-4-default.h b/src/vectors-4-default.h index ac1f1a4..76e96b9 100644 --- a/src/vectors-4-default.h +++ b/src/vectors-4-default.h @@ -1,13 +1,16 @@ // Fallback vectorisation implementation: Do not vectorise - - // We use macros here, so that we are not surprised by compilers which // don't like to inline functions. This should also make debug builds // (which may not inline) more efficient. +#include <assert.h> +#include <math.h> + + + #define vec4_architecture "scalar (no vectorisation, 32-bit precision)" // Use CCTK_REAL4 @@ -81,11 +84,10 @@ #define k4pow(x,a) (powf(x,a)) #define k4sqrt(x) (sqrtf(x)) -#include <math.h> #ifdef __cplusplus -#define SGN(x) std::signbit(x) +# define SGN(x) std::signbit(x) #else -#define SGN(x) signbit(x) +# define SGN(x) signbit(x) #endif #define k4ifpos(x,y,z) (SGN(x)?(z):(y)) diff --git a/src/vectors-8-DoubleHummer.h b/src/vectors-8-DoubleHummer.h index d5423bb..952f7fb 100644 --- a/src/vectors-8-DoubleHummer.h +++ b/src/vectors-8-DoubleHummer.h @@ -5,7 +5,11 @@ -#include <builtins.h> +#include <assert.h> + +#ifdef __cplusplus +# include <builtins.h> +#endif diff --git a/src/vectors-8-SSE2.h b/src/vectors-8-SSE2.h index ed84f8b..426a8a5 100644 --- a/src/vectors-8-SSE2.h +++ b/src/vectors-8-SSE2.h @@ -5,6 +5,9 @@ +#include <assert.h> +#include <math.h> + #include <emmintrin.h> #ifdef __SSE4_1__ // Intel's SSE 4.1 @@ -231,12 +234,11 @@ static const union { r; \ }) #else -#include <math.h> -#ifdef __cplusplus -#define SGN(x) std::signbit(x) -#else -#define SGN(x) signbit(x) -#endif +# ifdef __cplusplus +# define SGN(x) std::signbit(x) +# else +# define SGN(x) signbit(x) +# endif # define k8ifpos(x_,y_,z_) \ ({ \ CCTK_REAL8_VEC const xx=(x_); \ diff --git a/src/vectors-8-default.h b/src/vectors-8-default.h index 279cdb2..aaed7d9 100644 --- a/src/vectors-8-default.h +++ b/src/vectors-8-default.h @@ -1,13 +1,16 @@ // Fallback vectorisation implementation: Do not vectorise - - // We use macros here, so that we are not surprised by compilers which // don't like to inline functions. This should also make debug builds // (which may not inline) more efficient. +#include <assert.h> +#include <math.h> + + + #define vec8_architecture "scalar (no vectorisation, 64-bit precision)" // Use CCTK_REAL8 @@ -81,11 +84,10 @@ #define k8pow(x,a) (pow(x,a)) #define k8sqrt(x) (sqrt(x)) -#include <math.h> #ifdef __cplusplus -#define SGN(x) std::signbit(x) +# define SGN(x) std::signbit(x) #else -#define SGN(x) signbit(x) +# define SGN(x) signbit(x) #endif #define k8ifpos(x,y,z) (SGN(x)?(z):(y)) diff --git a/src/vectors.c b/src/vectors.cc index 7588295..ffff4be 100644 --- a/src/vectors.c +++ b/src/vectors.cc @@ -4,6 +4,7 @@ #include "cctk_Parameters.h" #include "vectors.h" +extern "C" int Vectors_Startup(void) { CCTK_VInfo(CCTK_THORNSTRING, "Using vector size %d for architecture %s", diff --git a/test/vectors.par b/test/vectors.par new file mode 100644 index 0000000..235a2ae --- /dev/null +++ b/test/vectors.par @@ -0,0 +1,13 @@ +# Activate thorn Vectors to run its self-tests +ActiveThorns = "Vectors" + +Vectors::verbose = yes + +# Activate some other thorns to generate one (meaningless) output file +ActiveThorns = "CartGrid3D CoordBase IOASCII IOUtil PUGH PUGHSlab" + +IO::out_dir = $parfile +IO::out_fileinfo = "none" + +IOASCII::out1D_every = 1 +IOASCII::out1D_vars = "grid::r" diff --git a/test/vectors/r_3D_diagonal.xg b/test/vectors/r_3D_diagonal.xg new file mode 100644 index 0000000..60c5ed9 --- /dev/null +++ b/test/vectors/r_3D_diagonal.xg @@ -0,0 +1,143 @@ + + +"Time = 0.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 1.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 2.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 3.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 4.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 5.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 6.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 7.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 8.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 9.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 + + +"Time = 10.0000000000000 +-0.8660254037844 0.8660254037844 +-0.6735753140546 0.6735753140546 +-0.4811252243247 0.4811252243247 +-0.2886751345948 0.2886751345948 +-0.0962250448649 0.0962250448649 +0.0962250448649 0.0962250448649 +0.2886751345948 0.2886751345948 +0.4811252243247 0.4811252243247 +0.6735753140546 0.6735753140546 +0.8660254037844 0.8660254037844 diff --git a/test/vectors/r_x_[5][5].xg b/test/vectors/r_x_[5][5].xg new file mode 100644 index 0000000..4900394 --- /dev/null +++ b/test/vectors/r_x_[5][5].xg @@ -0,0 +1,143 @@ + + +"Time = 0.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 1.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 2.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 3.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 4.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 5.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 6.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 7.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 8.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 9.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 10.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 diff --git a/test/vectors/r_y_[5][5].xg b/test/vectors/r_y_[5][5].xg new file mode 100644 index 0000000..4900394 --- /dev/null +++ b/test/vectors/r_y_[5][5].xg @@ -0,0 +1,143 @@ + + +"Time = 0.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 1.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 2.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 3.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 4.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 5.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 6.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 7.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 8.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 9.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 10.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 diff --git a/test/vectors/r_z_[5][5].xg b/test/vectors/r_z_[5][5].xg new file mode 100644 index 0000000..4900394 --- /dev/null +++ b/test/vectors/r_z_[5][5].xg @@ -0,0 +1,143 @@ + + +"Time = 0.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 1.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 2.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 3.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 4.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 5.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 6.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 7.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 8.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 9.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 + + +"Time = 10.0000000000000 +-0.5000000000000 0.5061351988413 +-0.3888888888889 0.3967460238079 +-0.2777777777778 0.2886751345948 +-0.1666666666667 0.1842569327975 +-0.0555555555556 0.0962250448649 +0.0555555555556 0.0962250448649 +0.1666666666667 0.1842569327975 +0.2777777777778 0.2886751345948 +0.3888888888889 0.3967460238079 +0.5000000000000 0.5061351988413 |