From ef3d005614a96bf1eba01c4e8e3a138ea42e6279 Mon Sep 17 00:00:00 2001
From: hhadjdji <hhadjdji hakim.hadj-djilani@inria.fr>
Date: Tue, 22 Aug 2023 17:11:27 +0200
Subject: [PATCH] Correct kernel RelativeError_inria_cplx.

---
 src/kernels.cu | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/kernels.cu b/src/kernels.cu
index 1474db7..18f1841 100644
--- a/src/kernels.cu
+++ b/src/kernels.cu
@@ -828,11 +828,20 @@ template<typename T> __global__ void RelativeError_inria_cplx(T* data_dst, const
 {
     int i = blockDim.x * blockIdx.x + threadIdx.x;
     while(i<numElements)
-	{
-		data_dst[i].x = fabs((data_src_th[i].x-data_src_mes[i].x)/data_src_th[i].x);
-		data_dst[i].y = fabs((data_src_th[i].y-data_src_mes[i].y)/data_src_th[i].y);
-		i += gridDim.x * blockDim.x;
-	}
+    {
+	    auto a_ = data_src_th[i].x;
+	    auto b_ = data_src_th[i].y;
+	    auto a = data_src_mes[i].x;
+	    auto b = data_src_mes[i].y;
+	    auto d = (a_ * a_ + b_ * b_);
+	    auto da = a - a_;
+	    auto db = b - b_;
+	    auto x = (da * a_ + db * b_) / d;
+	    auto y = (db * a_ - da * b_) / d;
+	    data_dst[i].x = sqrt(x * x + y * y);
+	    data_dst[i].y = 0;
+	    i += gridDim.x * blockDim.x;
+    }
 }
 
 /*template<typename T> __global__ void SetLinfAR1(T* mat_Linf, T* mat_Hinf, T* atur, int nb_n, int nb_elements)
-- 
GitLab