OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
Stencil.cpp
Go to the documentation of this file.
1#include "Filters/Stencil.h"
2
3void StencilFilter::apply(std::vector<double>& LineDensity) {
4 int size = LineDensity.size();
5 std::vector<double> temp1(size + 8, 0.0);
6 std::vector<double> temp2(5, 0.0);
7
8 for (int i = 0; i < size; ++i)
9 temp1[i + 4] = LineDensity[i];
10
11 for (int i = 0; i < 4; ++i) {
12 temp1[3 - i] = temp1[5 + i];
13 temp1[size + 5 + i] = temp1[size + 3 - i];
14 }
15
16 for (int i = 0; i < size; ++i) {
17 temp2[i % 5] = (7. * (temp1[i] + temp1[i + 8]) + 24. * (temp1[i + 2] + temp1[i + 6])
18 + 34. * temp1[i + 4])
19 / 96.;
20 temp1[i] = temp2[(i + 1) % 5];
21 }
22
23 temp1[2] = temp1[6];
24 temp1[3] = temp1[5];
25 temp1[size + 5] = temp1[size + 1];
26 temp1[size + 4] = temp1[size + 2];
27
28 for (int i = 0; i < size; ++i)
29 LineDensity[i] = (7. * (temp1[i + 2] + temp1[i + 6]) + 24. * (temp1[i + 3] + temp1[i + 5])
30 + 34. * temp1[i + 4])
31 / 96.;
32}
33
34void StencilFilter::calc_derivative(std::vector<double>& LineDensity, const double& h) {
35 std::vector<double> temp(LineDensity.begin(), LineDensity.end());
36 const double N = LineDensity.size();
37 LineDensity[0] =
38 (-25. * temp[0] + 48. * temp[1] - 36. * temp[2] + 16. * temp[3] + temp[4]) / (12. * h);
39 LineDensity[1] =
40 (-3. * temp[0] - 10. * temp[1] + 18. * temp[2] - 6. * temp[3] + temp[4]) / (12. * h);
41 for (int i = 2; i < N - 2; ++i) {
42 LineDensity[i] =
43 (temp[i - 2] - 8. * temp[i - 1] + 8. * temp[i + 1] - temp[i + 2]) / (12. * h);
44 }
45 LineDensity[N - 2] = (-temp[N - 5] + 6. * temp[N - 4] - 18. * temp[N - 3] + 10. * temp[N - 2]
46 + 3. * temp[N - 1])
47 / (12. * h);
48 LineDensity[N - 1] = (3. * temp[N - 5] - 16. * temp[N - 4] + 36. * temp[N - 3]
49 - 48. * temp[N - 2] + 25. * temp[N - 1])
50 / (12. * h);
51 apply(LineDensity);
52}
void apply(std::vector< double > &histogram)
Definition Stencil.cpp:3
void calc_derivative(std::vector< double > &histogram, const double &h)
Definition Stencil.cpp:34