// Viktor Haag, 2016
// LSS, University of Erlangen-Nuremberg, Germany
//
+// Michael Hussnaetter, 2017-2018
+// University of Erlangen-Nuremberg, Germany
+// michael.hussnaetter -at- fau.de
+//
// This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels).
//
// LbmBenchKernels is free software: you can redistribute it and/or modify
#define DATA_LAYOUT_NAME AoS
#endif
+#ifdef DATA_LAYOUT_AOSOA
+ #define DATA_LAYOUT_NAME AoSoA
+ // number of cells consecutively stored (-> array length)
+ #define AOSOA_BLOCK_SIZE 8
+#endif
+
#ifdef PROP_MODEL_PUSH
#define PROP_MODEL_NAME Push
#endif
#endif
+#ifdef PRECISION_DP
+ typedef double PdfT;
+#elif defined(PRECISION_SP)
+ typedef float PdfT;
+#else
+ #error PRECISION must be defined as dp or sp.
+#endif
-typedef double PdfT;
-
+ #define F(number) (PdfT)(number)
#define D3Q19
int * BounceBackPdfsSrc;
int * BounceBackPdfsDst;
int nBounceBackPdfs;
+ double LoopBalance; // loopBalance when set in kernel init, Main.c may use it to derive metrics
+ double Duration; // duration when set in kernel routine, Main.c may use it to derive metrics
void (* BoundaryConditionsGetPdf)(struct KernelData_ * kd, int x, int y, int z, int dir, PdfT * pdf);
void (* BoundaryConditionsSetPdf)(struct KernelData_ * kd, int x, int y, int z, int dir, PdfT pdf);
} KernelData;
+
+#define X_KERNEL_START(_kd) do { _kd->Duration = Time(); } while (0)
+#define X_KERNEL_END(_kd) do { _kd->Duration = Time() - _kd->Duration; } while (0)
+
typedef struct Parameters_ {
int nArgs;
char ** Args;