Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SplineBuilder doc #409

Merged
merged 117 commits into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from 112 commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
f60b990
init
blegouix Apr 2, 2024
84a5ca7
missing sed in benchmark
blegouix Apr 3, 2024
5b67b46
Merge branch 'main' into clarify-spline-names
blegouix Apr 3, 2024
1f02beb
Merge branch 'main' into clarify-spline-names
blegouix Apr 15, 2024
96d4fdb
fix
blegouix Apr 15, 2024
b9c4451
Merge branch 'clarify-spline-names' of github.com:Maison-de-la-Simula…
blegouix Apr 15, 2024
077807a
Update include/ddc/kernels/splines/spline_builder.hpp
blegouix Apr 15, 2024
373e034
Merge branch 'main' into clarify-spline-names
blegouix Apr 15, 2024
653bab4
clang-format
blegouix Apr 15, 2024
889b9f9
fix kokkos version change
blegouix Apr 16, 2024
20ca22d
Merge branch 'main' into clarify-spline-names
blegouix Apr 16, 2024
6238ca3
wip
blegouix Apr 16, 2024
6ab4a97
improve consistency
blegouix Apr 16, 2024
64659a7
Merge branch 'main' into clarify-spline-names
blegouix Apr 17, 2024
66ea164
wip
blegouix Apr 17, 2024
2fdb975
wip
blegouix Apr 17, 2024
93ec4a0
spline_builder
blegouix Apr 17, 2024
29367d7
changes from Emiliy's reviw
blegouix Apr 17, 2024
97a042e
format
blegouix Apr 17, 2024
84e76df
minor
blegouix Apr 17, 2024
aa7b594
wip
blegouix Apr 17, 2024
3ea940f
Merge branch 'clarify-spline-names' into splines-doc
blegouix Apr 17, 2024
ffef0b2
wip
blegouix Apr 18, 2024
2a050b0
wip
blegouix Apr 18, 2024
880353b
bsplines
blegouix Apr 18, 2024
39f2d70
init
blegouix Apr 18, 2024
c0ef458
reinit
blegouix Apr 18, 2024
56dbf4e
remove bsplines (not in the scope of this MR anymore)
blegouix Apr 18, 2024
85a2a0f
format
blegouix Apr 18, 2024
17bb0ba
autoreview
blegouix Apr 18, 2024
7e6c05b
wip
blegouix Apr 18, 2024
8c3bb44
Merge branch 'main' into splines-doc2
blegouix Apr 18, 2024
d7472c7
wip
blegouix Apr 19, 2024
d98abe5
Merge branch 'main' into splines-doc2
blegouix Apr 19, 2024
a563f6d
wip
blegouix Apr 19, 2024
7017234
fix for allowing doxygen to keep track of integrals()
blegouix Apr 19, 2024
dcc5c6f
format
blegouix Apr 19, 2024
8f7f760
Revert "fix for allowing doxygen to keep track of integrals()"
blegouix Apr 19, 2024
9d675c9
autoreview
blegouix Apr 19, 2024
51ffa31
Merge branch 'main' into splines-doc2
blegouix Apr 19, 2024
2d0737c
Merge branch 'main' into splines-doc
blegouix Apr 19, 2024
6850ae9
B-splines
blegouix Apr 19, 2024
937d432
Update include/ddc/kernels/splines/bsplines_non_uniform.hpp
blegouix Apr 19, 2024
9ffbe04
emily's review
blegouix Apr 19, 2024
19b1c1e
Merge branch 'splines-doc2' of github.com:Maison-de-la-Simulation/ddc…
blegouix Apr 19, 2024
8c5c579
wip
blegouix Apr 19, 2024
0589694
Update include/ddc/kernels/splines/bsplines_non_uniform.hpp
blegouix Apr 22, 2024
ffe161e
wip
blegouix Apr 22, 2024
1649b9a
Merge branch 'splines-doc2' of github.com:Maison-de-la-Simulation/ddc…
blegouix Apr 22, 2024
f853bca
reviews
blegouix Apr 22, 2024
fb64952
Merge branch 'main' into splines-doc2
blegouix Apr 22, 2024
7a87e97
typo
blegouix Apr 22, 2024
ccc2163
Merge branch 'splines-doc2' of github.com:Maison-de-la-Simulation/ddc…
blegouix Apr 22, 2024
65c221e
fix
blegouix Apr 22, 2024
49b9b01
minor
blegouix Apr 22, 2024
195dc50
more details on uniformity
blegouix Apr 22, 2024
bae41cc
non-uniform constructors
blegouix Apr 22, 2024
e702a5b
minor
blegouix Apr 22, 2024
f31ab4a
non_uniform constructors again
blegouix Apr 22, 2024
f180f4d
wip
blegouix Apr 22, 2024
1484581
wip on CI
blegouix Apr 22, 2024
90ccf09
Merge branch 'main' into splines-doc2
blegouix Apr 22, 2024
792b7f1
wip on CI
blegouix Apr 22, 2024
e516124
CI, integrals doxygen tracking still wrong
blegouix Apr 22, 2024
a0baf93
fix
blegouix Apr 22, 2024
d5f56b5
Update include/ddc/kernels/splines/bsplines_non_uniform.hpp
blegouix Apr 22, 2024
29a9c3c
wip
blegouix Apr 23, 2024
bfa7316
Merge branch 'splines-doc2' of github.com:Maison-de-la-Simulation/ddc…
blegouix Apr 23, 2024
f557230
emily's review
blegouix Apr 23, 2024
e3133e5
Merge branch 'main' into splines-doc2
blegouix Apr 23, 2024
a0dc609
minor
blegouix Apr 23, 2024
403a99a
minor
blegouix Apr 23, 2024
bdd529a
the spline coefficients
blegouix Apr 23, 2024
8068c3b
CI
blegouix Apr 23, 2024
ad55555
emily's review
blegouix Apr 23, 2024
45db898
forgot a files save
blegouix Apr 23, 2024
3e9c720
Merge branch 'main' into splines-doc2
blegouix Apr 23, 2024
5f82177
fix doxygen
blegouix Apr 24, 2024
6f3d65c
Merge branch 'splines-doc2' of github.com:Maison-de-la-Simulation/ddc…
blegouix Apr 24, 2024
7dfbed2
clang-format
blegouix Apr 24, 2024
669719e
wip on CI
blegouix Apr 24, 2024
0e27bfe
null_extrap
blegouix Apr 24, 2024
3982b95
CI
blegouix Apr 24, 2024
9e5c166
Merge branch 'splines-doc2' into splines-doc
blegouix Apr 24, 2024
e302ef9
wip
blegouix Apr 24, 2024
b3f4724
Emily's review
blegouix Apr 24, 2024
d6890d9
Merge branch 'main' into splines-doc2
blegouix Apr 25, 2024
995a5df
Merge branch 'splines-doc2' into splines-doc
blegouix Apr 25, 2024
167a36f
wip
blegouix Apr 25, 2024
19e3cc9
Thomas' review
blegouix Apr 25, 2024
bd7420c
Merge branch 'main' into splines-doc2
blegouix Apr 25, 2024
12d32d8
Merge branch 'splines-doc2' into splines-doc
blegouix Apr 25, 2024
a268a08
autoreview
blegouix Apr 25, 2024
74da282
Merge branch 'main' into splines-doc
blegouix Apr 25, 2024
a972961
remove null_extrapolation
blegouix Apr 25, 2024
c116d00
Emily's minireview
blegouix Apr 25, 2024
b247fbc
shorten doxygen comments
blegouix Apr 25, 2024
185ca11
Emily's review
blegouix Apr 26, 2024
89bff3f
ident
blegouix Apr 26, 2024
bdc3ac8
wip
blegouix Apr 30, 2024
515dc8d
Emily's review
blegouix Apr 30, 2024
0a34fca
minor
blegouix Apr 30, 2024
127a22b
ident
blegouix Apr 30, 2024
948259f
ident
blegouix Apr 30, 2024
d734870
minor
blegouix Apr 30, 2024
68b639e
transform -> approximate
blegouix Apr 30, 2024
095635e
Emily's review
blegouix May 3, 2024
dc4d3f6
Update include/ddc/kernels/splines/spline_builder.hpp
blegouix May 3, 2024
9273432
Emily's review
blegouix May 6, 2024
0ddd898
minor
blegouix May 6, 2024
eef77b9
hyperparameter -> parameter
blegouix May 14, 2024
d61deeb
Merge branch 'main' into splines-doc
blegouix May 21, 2024
932620e
Apply suggestions from code review
blegouix May 27, 2024
b3d9c54
privatize transposed-domain functions
blegouix May 27, 2024
bc8ce54
Update include/ddc/kernels/splines/spline_builder.hpp
blegouix May 27, 2024
023e90c
Merge branch 'main' into splines-doc
blegouix Jun 5, 2024
bf1d586
Apply suggestions from code review
tpadioleau Jun 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 165 additions & 57 deletions include/ddc/kernels/splines/spline_builder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,29 @@
#include "splines_linear_solver_maker.hpp"

namespace ddc {

/**
* @brief An enum determining the backend solver of a SplineBuilder or SplineBuilder2d.
*
* An enum determining the backend solver of a SplineBuilder or SplineBuilder2d. Only GINKGO is available at the moment,
* other solvers will be implemented in the future.
blegouix marked this conversation as resolved.
Show resolved Hide resolved
*/
enum class SplineSolver {
GINKGO
}; // Only GINKGO available atm, other solvers will be implemented in the futur
GINKGO ///< Enum member to identify the Ginkgo-based solver (iterative method)
};

/**
* @brief A helper giving the uniform/non_uniform status of a spline interpolation mesh according to its attributes.
*
* A helper giving the uniform/non_uniform status of a spline interpolation mesh according to its attributes.
*
* @param is_uniform A boolean giving the presumed status before considering boundary conditions.
* @param BcXmin The lower boundary condition.
* @param BcXmax The upper boundary condition.
* @param degree The degree of the spline.
*
* @return A boolean giving the uniform/non_uniform status.
*/
constexpr bool is_spline_interpolation_mesh_uniform(
EmilyBourne marked this conversation as resolved.
Show resolved Hide resolved
bool const is_uniform,
ddc::BoundCond const BcXmin,
Expand All @@ -32,9 +51,17 @@ constexpr bool is_spline_interpolation_mesh_uniform(
*
* A class which contains an operator () which can be used to build a spline approximation
* of a function. A spline approximation is represented by coefficients stored in a Chunk
* of BSplines. The spline is constructed such that it respects the boundary conditions
* of B-splines. The spline is constructed such that it respects the boundary conditions
* BcXmin and BcXmax, and it interpolates the function at the points on the interpolation_mesh
* associated with interpolation_mesh_type.
* @tparam ExecSpace The Kokkos execution space on which the spline approximation is performed.
* @tparam MemorySpace The Kokkos memory space on which the data (interpolation function and splines coefficients) is stored.
* @tparam BSplines The discrete dimension representing the B-splines.
* @tparam InterpolationMesh The discrete dimension on which interpolation points are defined.
* @tparam BcXmin The lower boundary condition.
* @tparam BcXmax The upper boundary condition.
* @tparam Solver The SplineSolver giving the backend used to perform the spline approximation.
* @tparam IDimX A variadic template of all the discrete dimensions forming the full space (InterpolationMesh + batched dimensions).
*/
template <
class ExecSpace,
Expand All @@ -57,76 +84,92 @@ class SplineBuilder
using tag_type = typename InterpolationMesh::continuous_dimension_type;

public:
/// @brief The type of the Kokkos execution space used by this class.
using exec_space = ExecSpace;

/// @brief The type of the Kokkos memory space used by this class.
using memory_space = MemorySpace;

/**
* @brief The type of the interpolation mesh used by this class.
*/
/// @brief The type of the interpolation discrete dimension (discrete dimension of interest) used by this class.
using interpolation_mesh_type = InterpolationMesh;

/**
* @brief The type of the BSplines which are compatible with this class.
*/
/// @brief The discrete dimension representing the B-splines.
using bsplines_type = BSplines;

/// @brief The type of the Deriv dimension at the boundaries.
EmilyBourne marked this conversation as resolved.
Show resolved Hide resolved
using deriv_type = ddc::Deriv<tag_type>;

/**
* @brief The type of the domain for the interpolation mesh used by this class.
*/
/// @brief The type of the domain for the 1D interpolation mesh used by this class.
using interpolation_domain_type = ddc::DiscreteDomain<interpolation_mesh_type>;

/// @brief The type of the whole domain representing interpolation points.
using batched_interpolation_domain_type = ddc::DiscreteDomain<IDimX...>;

/**
* @brief The type of the batch domain (obtained by removing the dimension of interest
* from the whole domain).
*
* Example: For batched_interpolation_domain_type = DiscreteDomain<X,Y,Z> and a dimension of interest Y,
* this is DiscreteDomain<X,Z>
*/
blegouix marked this conversation as resolved.
Show resolved Hide resolved
using batch_domain_type =
typename ddc::detail::convert_type_seq_to_discrete_domain<ddc::type_seq_remove_t<
ddc::detail::TypeSeq<IDimX...>,
ddc::detail::TypeSeq<interpolation_mesh_type>>>;

/**
* @brief The type of the whole spline domain (cartesian product of 1D spline domain
* and batch domain) preserving the underlying memory layout (order of dimensions).
*
* Example: For batched_interpolation_domain_type = DiscreteDomain<X,Y,Z> and a dimension of interest Y
* (associated to a B-splines tag BSplinesY), this is DiscreteDomain<X,BSplinesY,Z>.
*/
using batched_spline_domain_type =
typename ddc::detail::convert_type_seq_to_discrete_domain<ddc::type_seq_replace_t<
ddc::detail::TypeSeq<IDimX...>,
ddc::detail::TypeSeq<interpolation_mesh_type>,
ddc::detail::TypeSeq<bsplines_type>>>;

/**
* @brief The type of the whole spline domain (cartesian product of the 1D spline domain
* and the batch domain) with 1D spline dimension being the leading dimension.
*
* Example: For batched_interpolation_domain_type = DiscreteDomain<X,Y,Z> and a dimension of interest Y
* (associated to a B-splines tag BSplinesY), this is DiscreteDomain<BSplinesY,X,Z>.
*/
using batched_spline_tr_domain_type =
typename ddc::detail::convert_type_seq_to_discrete_domain<ddc::type_seq_merge_t<
ddc::detail::TypeSeq<bsplines_type>,
ddc::type_seq_remove_t<
ddc::detail::TypeSeq<IDimX...>,
ddc::detail::TypeSeq<interpolation_mesh_type>>>>;

/**
* @brief The type of the whole Deriv domain (cartesian product of 1D Deriv domain
* and batch domain) preserving the underlying memory layout (order of dimensions).
*
* Example: For batched_interpolation_domain_type = DiscreteDomain<X,Y,Z> and a dimension of interest Y,
* this is DiscreteDomain<X,Deriv<Y>,Z>
*/
using batched_derivs_domain_type =
typename ddc::detail::convert_type_seq_to_discrete_domain<ddc::type_seq_replace_t<
ddc::detail::TypeSeq<IDimX...>,
ddc::detail::TypeSeq<interpolation_mesh_type>,
ddc::detail::TypeSeq<deriv_type>>>;

/**
* @brief Indicates if the degree of the splines is odd or even.
*/
/// @brief Indicates if the degree of the splines is odd or even.
static constexpr bool s_odd = BSplines::degree() % 2;

/**
* @brief The number of equations which define the boundary conditions at the lower bound.
*/
/// @brief The number of equations defining the boundary condition at the lower bound.
static constexpr int s_nbc_xmin = n_boundary_equations(BcXmin, BSplines::degree());

/**
* @brief The number of equations which define the boundary conditions at the upper bound.
*/
/// @brief The number of equations defining the boundary condition at the upper bound.
static constexpr int s_nbc_xmax = n_boundary_equations(BcXmax, BSplines::degree());

/**
* @brief The boundary condition implemented at the lower bound.
*/
/// @brief The boundary condition implemented at the lower bound.
static constexpr ddc::BoundCond s_bc_xmin = BcXmin;

/**
* @brief The boundary condition implemented at the upper bound.
*/
/// @brief The boundary condition implemented at the upper bound.
static constexpr ddc::BoundCond s_bc_xmax = BcXmax;

private:
Expand All @@ -143,6 +186,22 @@ class SplineBuilder
int compute_offset(interpolation_domain_type const& interpolation_domain);

public:
/**
* @brief Build a SplineBuilder acting on batched_interpolation_domain.
*
* @param batched_interpolation_domain The domain on which the interpolation points are defined.
*
* @param cols_per_chunk A parameter used by the slicer (internal to the solver) to define the size
* of a chunk of right-hand-sides of the linear problem to be computed in parallel (chunks are treated
blegouix marked this conversation as resolved.
Show resolved Hide resolved
* by the linear solver one-after-the-other).
* This value is optional. If no value is provided then the default value is chosen by the requested solver.
*
* @param preconditionner_max_block_size A parameter used by the slicer (internal to the solver) to
* define the size of a block used by the Block-Jacobi preconditioner.
* This value is optional. If no value is provided then the default value is chosen by the requested solver.
*
* @see MatrixSparse
*/
explicit SplineBuilder(
batched_interpolation_domain_type const& batched_interpolation_domain,
std::optional<std::size_t> cols_per_chunk = std::nullopt,
Expand Down Expand Up @@ -170,62 +229,83 @@ class SplineBuilder
preconditionner_max_block_size);
}

/// @brief Copy-constructor is deleted
SplineBuilder(SplineBuilder const& x) = delete;

/**
* @brief Create a new SplineBuilder by copy
/** @brief Move-constructs
*
* @param x The SplineBuilder being copied.
* @param x An rvalue to another SplineBuilder.
*/
SplineBuilder(SplineBuilder&& x) = default;

/// @brief Destructs
~SplineBuilder() = default;

/// @brief Copy-assignment is deleted
SplineBuilder& operator=(SplineBuilder const& x) = delete;

/**
* @brief Copy a SplineBuilder.
/** @brief Move-assigns
*
* @param x The SplineBuilder being copied.
* @returns A reference to this object.
* @param x An rvalue to another SplineBuilder.
* @return A reference to the moved SplineBuilder
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it x that is "moved" ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to the SplineBuilder once moved ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tpadioleau I think this is the last remaining comment here, to me something can be qualified as "moved" only once it has been moved, and only the moved thing not the remaining empty place where it comes from. But this is a bit too philisophical to me so please suggest something if you don't agree ^^

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would keep the original doc on the return section. The reference is really on the object *this, not the object that has been moved, x.

tpadioleau marked this conversation as resolved.
Show resolved Hide resolved
*/
SplineBuilder& operator=(SplineBuilder&& x) = default;

batched_interpolation_domain_type batched_interpolation_domain() const noexcept
/**
* @brief Get the domain for the 1D interpolation mesh used by this class.
*
* This is 1D because it is defined along the dimension of interest.
*
* @return The 1D domain for the interpolation mesh.
*/
interpolation_domain_type interpolation_domain() const noexcept
{
return m_batched_interpolation_domain;
return interpolation_domain_type(m_batched_interpolation_domain);
}

/**
* @brief Get the domain from which the approximation is defined.
* @brief Get the whole domain representing interpolation points.
*
* Get the domain on which values of the function must be provided in order
* to build a spline approximation of the function.
* Values of the function must be provided on this domain in order
* to build a spline representation of the function (cartesian product of 1D interpolation_domain and batch_domain).
*
* @return The domain for the grid points.
* @return The domain for the interpolation mesh.
*/
interpolation_domain_type interpolation_domain() const noexcept
batched_interpolation_domain_type batched_interpolation_domain() const noexcept
{
return interpolation_domain_type(batched_interpolation_domain());
return m_batched_interpolation_domain;
}

/**
* @brief Get the batch domain.
*
* Obtained by removing the dimension of interest from the whole interpolation domain.
*
* @return The batch domain.
*/
batch_domain_type batch_domain() const noexcept
{
return ddc::remove_dims_of(batched_interpolation_domain(), interpolation_domain());
}

/**
* @brief Get the 1D domain on which spline coefficients are defined.
*
* The 1D spline domain corresponding to the dimension of interest.
*
* @return The 1D domain for the spline coefficients.
*/
ddc::DiscreteDomain<bsplines_type> spline_domain() const noexcept
{
return ddc::discrete_space<bsplines_type>().full_domain();
}

/**
* @brief Get the domain on which the approximation is defined.
* @brief Get the whole domain on which spline coefficients are defined, preserving memory layout.
blegouix marked this conversation as resolved.
Show resolved Hide resolved
*
* Get the domain of the basis-splines for which the coefficients of the spline
* approximation must be calculated.
* Spline approximations (spline-transformed functions) are computed on this domain.
*
* @return The domain for the splines.
* @return The domain for the spline coefficients.
*/
batched_spline_domain_type batched_spline_domain() const noexcept
{
Expand All @@ -234,11 +314,25 @@ class SplineBuilder
bsplines_type>(batched_interpolation_domain(), spline_domain());
}

/**
* @brief Get the whole domain on which spline coefficients are defined, with the dimension of interest being the leading dimension.
*
* This is used internally due to solver limitation and because it may be beneficial to computation performance.
blegouix marked this conversation as resolved.
Show resolved Hide resolved
*
* @return The (transposed) domain for the spline coefficients.
*/
batched_spline_tr_domain_type batched_spline_tr_domain() const noexcept
{
return batched_spline_tr_domain_type(spline_domain(), batch_domain());
}

/**
* @brief Get the whole domain on which derivatives on lower boundary are defined.
*
* This is only used with BoundCond::HERMITE boundary conditions.
*
* @return The domain for the Derivs values.
*/
batched_derivs_domain_type batched_derivs_xmin_domain() const noexcept
{
return ddc::replace_dim_of<interpolation_mesh_type, deriv_type>(
Expand All @@ -248,6 +342,13 @@ class SplineBuilder
ddc::DiscreteVector<deriv_type>(s_nbc_xmin)));
}

/**
* @brief Get the whole domain on which derivatives on upper boundary are defined.
*
* This is only used with BoundCond::HERMITE boundary conditions.
*
* @return The domain for the Derivs values.
*/
batched_derivs_domain_type batched_derivs_xmax_domain() const noexcept
{
return ddc::replace_dim_of<interpolation_mesh_type, deriv_type>(
Expand All @@ -260,9 +361,13 @@ class SplineBuilder
/**
* @brief Get the interpolation matrix.
*
* Get the interpolation matrix. This can be useful for debugging (as it allows
* This can be useful for debugging (as it allows
* one to print the matrix) or for more complex quadrature schemes.
*
* Warning: the returned detail::Matrix class is not supposed to be exposed
* to user, which means its usage is not supported out of the scope of current class.
* Use at your own risk.
*
* @return A reference to the interpolation matrix.
*/
const ddc::detail::SplinesLinearProblem<exec_space>& get_interpolation_matrix() const noexcept
Expand All @@ -271,20 +376,23 @@ class SplineBuilder
}

/**
* @brief Build a spline approximation of a function.
* @brief Compute a spline approximation of a function.
EmilyBourne marked this conversation as resolved.
Show resolved Hide resolved
*
* Use the values of a function at known grid points (as specified by
* SplineBuilder::interpolation_domain) and the derivatives of the
* function at the boundaries (if necessary for the chosen boundary
* conditions) to calculate a spline approximation of a function.
* Use the values of a function (defined on
* SplineBuilder::batched_interpolation_domain) and the derivatives of the
* function at the boundaries (in the case of BoundCond::HERMITE only, defined
* on SplineBuilder::batched_derivs_xmin_domain and SplineBuilder::batched_derivs_xmax_domain)
* to calculate a spline approximation of this function.
*
* The spline approximation is stored as a ChunkSpan of coefficients
* associated with basis-splines.
* associated with B-splines.
*
* @param[out] spline The coefficients of the spline calculated by the function.
* @param[in] vals The values of the function at the grid points.
* @param[in] derivs_xmin The values of the derivatives at the lower boundary.
* @param[in] derivs_xmax The values of the derivatives at the upper boundary.
* @param[out] spline The coefficients of the spline computed by this SplineBuilder.
* @param[in] vals The values of the function on the interpolation mesh.
* @param[in] derivs_xmin The values of the derivatives at the lower boundary
* (used only with BoundCond::HERMITE lower boundary condition).
* @param[in] derivs_xmax The values of the derivatives at the upper boundary
* (used only with BoundCond::HERMITE upper boundary condition).
*/
template <class Layout>
void operator()(
Expand Down
Loading