Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "Utilities/Gsl.hpp" 7 : 8 : /// \cond 9 : class Matrix; 10 : template <size_t> 11 : class Mesh; 12 : template <typename TagsList> 13 : class Variables; 14 : /// \endcond 15 : 16 : namespace Spectral::filtering { 17 : /*! 18 : * \brief Filters the tensors stored within a `Variables` being represented by 19 : * ZernikeB2 basis functions. 20 : * 21 : * \details Representing functions on a filled disk requires special basis 22 : * functions, namely ZernikeB2. These are inherently two-dimensional, meaning 23 : * the radial and angular spectral spaces are intertwined. This function goes 24 : * to that combined modal space, applies the exponential filter, and 25 : * transforms back. 26 : * 27 : * \see exponential_filter() 28 : */ 29 : template <typename TagsList> 30 1 : void ZernikeB2_disk_exponential_filter(gsl::not_null<Variables<TagsList>*> u, 31 : const Mesh<2>& mesh, double alpha, 32 : unsigned half_power); 33 : 34 : /*! 35 : * \brief Filters the tensors stored within a `Variables` being represented by 36 : * ZernikeB2 \f$\times\f$ Legendre basis functions. 37 : * 38 : * \details Representing functions on a filled cylinder requires special basis 39 : * functions, namely a filled disk with ZernikeB2 cross Legendre. This 40 : * requires inherently two-dimensional basis functions, meaning the radial and 41 : * angular spectral spaces are intertwined. This function goes to that combined 42 : * modal space, applies the exponential filter, transforms back, and then 43 : * filters the third I1 dimension. 44 : * 45 : * \see exponential_filter() 46 : */ 47 : template <typename TagsList> 48 1 : void ZernikeB2_cylinder_exponential_filter( 49 : gsl::not_null<Variables<TagsList>*> u, const Mesh<3>& mesh, double alpha, 50 : unsigned half_power); 51 : } // namespace Spectral::filtering