Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : 8 : /// \cond 9 : template <size_t> 10 : class Mesh; 11 : namespace gsl { 12 : template <typename T> 13 : class not_null; 14 : } // namespace gsl 15 : /// \endcond 16 : 17 : /// @{ 18 : /*! 19 : * \ingroup NumericalAlgorithmsGroup 20 : * \brief Compute the indefinite integral of a function in the 21 : * `dim_to_integrate`, applying a zero boundary condition on each stripe. 22 : * 23 : * Integrates with respect to one of the logical coordinates 24 : * \f$\boldsymbol{\xi} = (\xi, \eta, \zeta)\f$. 25 : * 26 : * The integral w.r.t. a different set of coordinates 27 : * \f$\boldsymbol{x} = \boldsymbol{x}(\boldsymbol{\xi})\f$ can be computed 28 : * by pre-multiplying `integrand` by the Jacobian determinant 29 : * \f$J = \det d\boldsymbol{x}/d\boldsymbol{\xi}\f$ of the mapping 30 : * \f$\boldsymbol{x}(\boldsymbol{\xi})\f$. The integration is still performed 31 : * along one logical-coordinate direction, indicated by `dim_to_integrate`. 32 : * 33 : * \requires number of points in `integrand` and `mesh` are equal. 34 : */ 35 : template <size_t Dim, typename VectorType> 36 1 : void indefinite_integral(gsl::not_null<VectorType*> integral, 37 : const VectorType& integrand, const Mesh<Dim>& mesh, 38 : size_t dim_to_integrate); 39 : 40 : template <size_t Dim, typename VectorType> 41 1 : VectorType indefinite_integral(const VectorType& integrand, 42 : const Mesh<Dim>& mesh, size_t dim_to_integrate); 43 : /// @}