Skip to content
Snippets Groups Projects
Commit e78b25f5 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Made the kernel test part of the testing suite and checks that the...

Made the kernel test part of the testing suite and checks that the vector/scalar values are consistent.
parent fde569a8
No related branches found
No related tags found
1 merge request!150Vectorise kernel
...@@ -22,7 +22,7 @@ AM_LDFLAGS = ../src/.libs/libswiftsim.a $(HDF5_LDFLAGS) $(HDF5_LIBS) ...@@ -22,7 +22,7 @@ AM_LDFLAGS = ../src/.libs/libswiftsim.a $(HDF5_LDFLAGS) $(HDF5_LIBS)
# List of programs and scripts to run in the test suite # List of programs and scripts to run in the test suite
TESTS = testGreetings testReading.sh testSingle testPair.sh testPairPerturbed.sh \ TESTS = testGreetings testReading.sh testSingle testPair.sh testPairPerturbed.sh \
test27cells.sh test27cellsPerturbed.sh testParser.sh test27cells.sh test27cellsPerturbed.sh testParser.sh testKernel
# List of test programs to compile # List of test programs to compile
check_PROGRAMS = testGreetings testReading testSingle testTimeIntegration \ check_PROGRAMS = testGreetings testReading testSingle testTimeIntegration \
......
/******************************************************************************* /*******************************************************************************
* This file is part of SWIFT. * This file is part of SWIFT.
* Copyright (C) 2016 Matthieu Schaller (matthieu.schaller@durham.ac.uk). * Copyright (C) 2016 Matthieu Schaller (matthieu.schaller@durham.ac.uk)
* James Willis (james.s.willis@durham.ac.uk)
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published * it under the terms of the GNU Lesser General Public License as published
...@@ -23,10 +24,13 @@ ...@@ -23,10 +24,13 @@
#include "swift.h" #include "swift.h"
#include "kernel_hydro.h" #include "kernel_hydro.h"
#define numPoints 64
int main() { int main() {
const float h = const_eta_kernel; const float h = const_eta_kernel;
const int numPoints = 32; float W[numPoints] = {0.f};
float dW[numPoints] = {0.f};
printf("\nSerial Output\n"); printf("\nSerial Output\n");
printf("-------------\n"); printf("-------------\n");
...@@ -34,11 +38,10 @@ int main() { ...@@ -34,11 +38,10 @@ int main() {
for (int i = 0; i < numPoints; ++i) { for (int i = 0; i < numPoints; ++i) {
const float x = i * 2.5f / numPoints; const float x = i * 2.5f / numPoints;
float W, dW; kernel_deval(x / h, &W[i], &dW[i]);
kernel_deval(x / h, &W, &dW);
printf("%2d: h= %f H= %f x=%f W(x,h)=%f dW(x,h)=%f\n", i, h, printf("%2d: h= %f H= %f x=%f W(x,h)=%f dW(x,h)=%f\n", i, h,
h * kernel_gamma, x, W, dW); h * kernel_gamma, x, W[i], dW[i]);
} }
printf("\nVector Output for VEC_SIZE=%d\n", VEC_SIZE); printf("\nVector Output for VEC_SIZE=%d\n", VEC_SIZE);
...@@ -46,7 +49,7 @@ int main() { ...@@ -46,7 +49,7 @@ int main() {
for (int i = 0; i < numPoints; i += VEC_SIZE) { for (int i = 0; i < numPoints; i += VEC_SIZE) {
vector vx, vx_h; vector vx, vx_h;
vector W, dW; vector W_vec, dW_vec;
for (int j = 0; j < VEC_SIZE; j++) { for (int j = 0; j < VEC_SIZE; j++) {
vx.f[j] = (i + j) * 2.5f / numPoints; vx.f[j] = (i + j) * 2.5f / numPoints;
...@@ -54,12 +57,25 @@ int main() { ...@@ -54,12 +57,25 @@ int main() {
vx_h.v = vx.v / vec_set1(h); vx_h.v = vx.v / vec_set1(h);
kernel_deval_vec(&vx_h, &W, &dW); kernel_deval_vec(&vx_h, &W_vec, &dW_vec);
for (int j = 0; j < VEC_SIZE; j++) { for (int j = 0; j < VEC_SIZE; j++) {
printf("%2d: h= %f H= %f x=%f W(x,h)=%f dW(x,h)=%f\n", i + j, h, printf("%2d: h= %f H= %f x=%f W(x,h)=%f dW(x,h)=%f\n", i + j, h,
h * kernel_gamma, vx.f[j], W.f[j], dW.f[j]); h * kernel_gamma, vx.f[j], W_vec.f[j], dW_vec.f[j]);
if (fabsf(W_vec.f[j] - W[i + j]) > 2e-7) {
printf("Invalid value ! scalar= %e, vector= %e\n", W[i + j],
W_vec.f[j]);
return 1;
}
if (fabsf(dW_vec.f[j] - dW[i + j]) > 2e-7) {
printf("Invalid value ! scalar= %e, vector= %e\n", dW[i + j],
dW_vec.f[j]);
return 1;
}
} }
} }
printf("\nAll values are consistent\n");
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment