Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "NumericalAlgorithms/Spectral/Parity.hpp"
7 :
8 : /// \cond
9 : // clang-tidy: Macro arguments should be in parentheses, but we want to append
10 : // template parameters here.
11 : #define SPECTRAL_QUANTITY_FOR_MESH(function_name, return_type) \
12 : const return_type& function_name(const Mesh<1>& mesh) { \
13 : return Spectral::detail::get_spectral_quantity_for_mesh( \
14 : [](const auto basis, const auto quadrature, \
15 : const size_t num_points) -> const return_type& { \
16 : return function_name</* NOLINT */ decltype(basis)::value, \
17 : decltype(quadrature)::value>(num_points); \
18 : }, \
19 : mesh); \
20 : }
21 :
22 : #define TWO_INDEXED_SPECTRAL_QUANTITY_FOR_MESH(function_name, return_type) \
23 : const return_type& function_name(const Mesh<1>& mesh, const size_t m, \
24 : const size_t N) { \
25 : return Spectral::detail::get_two_indexed_spectral_quantity_for_mesh( \
26 : [](const auto basis, const auto quadrature, const size_t num_points, \
27 : const size_t mm, const size_t NN) -> const return_type& { \
28 : return function_name</* NOLINT */ decltype(basis)::value, \
29 : decltype(quadrature)::value>(num_points, mm, \
30 : NN); \
31 : }, \
32 : mesh, m, N); \
33 : }
34 :
35 : #define SPECTRAL_QUANTITY_WITH_PARITY_FOR_MESH(function_name, return_type) \
36 : const return_type& function_name(const Mesh<1>& mesh, \
37 : const Spectral::Parity parity) { \
38 : return Spectral::detail::get_spectral_quantity_with_parity_for_mesh( \
39 : [](const auto basis, const auto quadrature, const size_t num_points, \
40 : const Spectral::Parity local_parity) -> const return_type& { \
41 : return function_name</* NOLINT */ decltype(basis)::value, \
42 : decltype(quadrature)::value>(num_points, \
43 : local_parity); \
44 : }, \
45 : mesh, parity); \
46 : }
47 : /// \endcond
|