diff options
-rw-r--r-- | matrix.h | 20 | ||||
-rw-r--r-- | tests/matrix_test.cu | 5 | ||||
-rw-r--r-- | tests/matrix_test.py | 14 |
3 files changed, 26 insertions, 13 deletions
@@ -19,6 +19,13 @@ __device__ __host__ Matrix make_matrix(float3 &u1, float3 &u2, float3 &u3) Matrix m = {u1.x, u2.x, u3.x, u1.y, u2.y, u3.y, u1.z, u2.z, u3.z}; } +__device__ __host__ Matrix operator- (const Matrix &m) +{ + return make_matrix(-m.a00, -m.a01, -m.a02, + -m.a10, -m.a11, -m.a12, + -m.a20, -m.a21, -m.a22); +} + __device__ __host__ float3 operator* (const Matrix &m, const float3 &a) { return make_float3(m.a00*a.x + m.a01*a.y + m.a02*a.z, @@ -207,19 +214,6 @@ __device__ __host__ Matrix inv(const Matrix &m) m.a00*m.a11 - m.a01*m.a10)/det(m); } -__device__ __host__ Matrix inv(const Matrix&m, const float determinant) -{ - return make_matrix(m.a11*m.a22 - m.a12*m.a21, - m.a02*m.a21 - m.a01*m.a22, - m.a01*m.a12 - m.a02*m.a11, - m.a12*m.a20 - m.a10*m.a22, - m.a00*m.a22 - m.a02*m.a20, - m.a02*m.a10 - m.a00*m.a12, - m.a10*m.a21 - m.a11*m.a20, - m.a01*m.a20 - m.a00*m.a21, - m.a00*m.a11 - m.a01*m.a10)/determinant; -} - __device__ __host__ Matrix outer(const float3 &a, const float3 &b) { return make_matrix(a.x*b.x, a.x*b.y, a.x*b.z, diff --git a/tests/matrix_test.cu b/tests/matrix_test.cu index 5c88a92..99e13dc 100644 --- a/tests/matrix_test.cu +++ b/tests/matrix_test.cu @@ -35,6 +35,11 @@ __global__ void inv(float *a, float *dest) matrix2array(inv(m), dest); } +__global__ void minusmatrix(float *a, float *dest) +{ + matrix2array(-array2matrix(a), dest); +} + __global__ void matrixadd(float *a, float *b, float *dest) { matrix2array(array2matrix(a)+array2matrix(b), dest); diff --git a/tests/matrix_test.py b/tests/matrix_test.py index 412acf9..bc4115e 100644 --- a/tests/matrix_test.py +++ b/tests/matrix_test.py @@ -34,6 +34,7 @@ matrixsubequalsfloat = mod.get_function('matrixsubequalsfloat') matrixmulequalsfloat = mod.get_function('matrixmulequalsfloat') matrixdivequalsfloat = mod.get_function('matrixdivequalsfloat') outer = mod.get_function('outer') +minusmatrix = mod.get_function('minusmatrix') size = {'block': (1,1,1), 'grid': (1,1)} @@ -308,3 +309,16 @@ for i in range(1): print dest else: print 'success' + + print 'testing minus matrix...', + + dest = np.copy(a) + + minusmatrix(cuda.In(a), cuda.Out(dest), **size) + + if not np.allclose(-a, dest): + print 'fail' + print -a + print dest + else: + print 'success' |