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