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 : /// @}
|