From b885294b77a5bc22d5681b0cd0f219acd08a662e Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Fri, 19 Mar 2021 16:59:39 +0100 Subject: Initial commit --- src/strats.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/strats.c (limited to 'src/strats.c') diff --git a/src/strats.c b/src/strats.c new file mode 100644 index 0000000..1c5ce53 --- /dev/null +++ b/src/strats.c @@ -0,0 +1,52 @@ +#include + +static inline void +product (size_t n, + size_t omega, + const double *restrict temporal_dependency, + const double *restrict vector, + double *restrict out) +{ + size_t i; + #pragma omp parallel for + for (i = 0; i < n; i++) + { + size_t j; + out[i] = 0; + /* Backward: */ + for (j = 0; j < omega; j++) + { + if (i > j) + { + const double x = vector[i - j - 1]; + const double coefficient = temporal_dependency[j]; + out[i] += coefficient * (vector[i] - x); + } + } + /* Forward: */ + for (j = 0; j < omega; j++) + { + if (i + j + 1 < n) + { + const double x = vector[i + j + 1]; + const double coefficient = temporal_dependency[j]; + out[i] += coefficient * (vector[i] - x); + } + } + } +} + +void +strats_compute_laplacian_matrix_product (int *n, + int *d, + int *omega, + double *temporal_dependency, + double *x, + double *out) +{ + int j; + for (j = 0; j < *d; j++) + { + product (*n, *omega, temporal_dependency, x + j * (*n), out + j * (*n)); + } +} -- cgit v1.2.3