1 #ifndef KATOPTRON_SPECTRALAPPROACH_H
2 #define KATOPTRON_SPECTRALAPPROACH_H
13 template <
typename Scalar,
typename Device>
14 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>
construct_Z(
size_t muw,
unsigned long seed_Z,
size_t wait = 0)
16 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Z = Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>(
"Z", muw, muw);
18 std::default_random_engine generator;
19 generator.seed(seed_Z);
20 std::uniform_real_distribution<double> distribution(0.0, 1.0);
22 for (
size_t i = 0; i < wait; ++i)
23 distribution(generator);
25 for (
size_t ell = 0; ell < EnsembleTraits<Scalar>::size; ++ell)
26 for (
size_t i = 0; i < muw; ++i)
27 for (
size_t j = 0; j < muw; ++j)
38 template <
typename Scalar,
typename Device>
39 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>
construct_Phi(
size_t muw,
unsigned long seed_Phi,
size_t wait = 0)
41 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Phi = Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>(
"Phi", muw, muw);
43 std::default_random_engine generator;
44 generator.seed(seed_Phi);
45 std::uniform_real_distribution<double> distribution(0.0, 1.0);
47 for (
size_t i = 0; i < wait; ++i)
48 distribution(generator);
50 for (
size_t ell = 0; ell < EnsembleTraits<Scalar>::size; ++ell)
51 for (
size_t i = 0; i < muw; ++i)
52 for (
size_t j = 0; j < muw; ++j)
62 template <
typename Scalar,
typename Device>
66 typedef typename Teuchos::ScalarTraits<Scalar>::coordinateType
MeshScalar;
68 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>
Z;
69 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>
Phi;
70 Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>
w;
71 Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>
S;
77 Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> _Phi,
79 bool Gaussian =
true) :
Z(_Z),
Phi(_Phi),
a(_a),
r(_r),
muw(_muw)
84 w = Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>(
"w",
muw);
85 S = Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>(
"w",
muw);
87 for (
size_t i = 0; i <
muw; ++i)
88 w(i) = -wL + (i + 0.5) *
Dw;
91 for (
size_t i = 0; i <
muw; ++i)
92 S(i) =
a / sqrt(2. * M_PI) * exp(-pow(
a *
w(i), 2) / 2.);
94 for (
size_t i = 0; i <
muw; ++i)
95 S(i) =
a / (M_PI * (1 + pow(
a, 2) * pow(
w(i), 2)));
98 KOKKOS_INLINE_FUNCTION
105 for (
size_t i = 0; i <
muw; ++i)
106 for (
size_t j = 0; j <
muw; ++j)
107 output += sqrt(
S(i) *
S(j)) *
Z(i, j) * cos(
Phi(i, j) +
w(i) * x +
w(j) * y);
109 output *= sqrt(2) *
Dw;
115 #endif //KATOPTRON_SPECTRALAPPROACH_H