summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--matrix.h20
-rw-r--r--tests/matrix_test.cu5
-rw-r--r--tests/matrix_test.py14
3 files changed, 26 insertions, 13 deletions
diff --git a/matrix.h b/matrix.h
index 14e04a4..1de8e8c 100644
--- a/matrix.h
+++ b/matrix.h
@@ -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'