QUGaR 0.0.4
Loading...
Searching...
No Matches
monomials_tp.hpp
Go to the documentation of this file.
1// --------------------------------------------------------------------------
2//
3// Copyright (C) 2025-present by Pablo Antolin
4//
5// This file is part of the QUGaR library.
6//
7// SPDX-License-Identifier: MIT
8//
9// --------------------------------------------------------------------------
10
11#ifndef QUGAR_IMPL_MONOMIALS_TP_HPP
12#define QUGAR_IMPL_MONOMIALS_TP_HPP
13
20
21#include <qugar/bbox.hpp>
25#include <qugar/types.hpp>
26
27#include <algoim/xarray.hpp>
28
29#include <memory>
30#include <vector>
31
32namespace qugar::impl {
33
34template<int dim, int range> class BezierTP;
35
40template<int dim, int range = 1> class MonomialsTP : public PolynomialTP<dim, range>
41{
42public:
45
47 using CoefsType = typename Parent::CoefsType;
48
50 template<typename T> using Value = typename Parent::template Value<T>;
51
53 template<typename T> using Gradient = typename Parent::template Gradient<T>;
54
56 template<typename T> using Hessian = typename Parent::template Hessian<T>;
57
59 template<int N> using Interval = ::algoim::Interval<N>;
60
66 explicit MonomialsTP(const TensorSizeTP<dim> &order);
67
74 MonomialsTP(const TensorSizeTP<dim> &order, const std::vector<CoefsType> &coefs);
75
80
94 [[nodiscard]] std::shared_ptr<MonomialsTP<dim, range>> create_derivative(const int dir) const;
95
101 using DomainFunc<dim, range>::operator();
102
108 using DomainFunc<dim, range>::grad;
109
114 [[nodiscard]] virtual Value<real> operator()(const Point<dim> &point) const final;
115
120 [[nodiscard]] virtual Value<Interval<dim>> operator()(const Point<dim, Interval<dim>> &point) const final;
121
126 [[nodiscard]] virtual Gradient<real> grad(const Point<dim> &point) const final;
127
132 [[nodiscard]] virtual Gradient<Interval<dim>> grad(const Point<dim, Interval<dim>> &point) const final;
133
138 [[nodiscard]] Hessian<real> virtual hessian(const Point<dim> &point) const final;
139
140private:
146 template<typename T> [[nodiscard]] Value<T> eval_(const Point<dim, T> &point) const;
147
153 template<typename T> [[nodiscard]] Gradient<T> grad_(const Point<dim, T> &point) const;
154
160 template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<dim, T> &point) const;
161
162public:
171 template<int dim_aux = dim>
172 requires(dim == dim_aux && dim > 1)
173 [[nodiscard]] std::shared_ptr<MonomialsTP<dim - 1, range>> extract_facet(const int local_facet_id) const;
174
188 template<typename T>
189 static Value<T> horner(const Point<dim, T> &point,
190 typename std::vector<CoefsType>::const_iterator &coefs,
191 const Vector<int, dim> &order);
192
207 template<typename T>
208 static Vector<Value<T>, dim + 1> horner_der(const Point<dim, T> &point,
209 typename std::vector<CoefsType>::const_iterator &coefs,
210 const Vector<int, dim> &order);
211
219 static void transform_coefs_to_Bezier(const MonomialsTP<dim, range> &monomials, std::vector<CoefsType> &bzr_coefs);
220};
221
222
223}// namespace qugar::impl
224
225#endif// QUGAR_IMPL_MONOMIALS_TP_HPP
Definition of Cartesian bounding box class.
Class representing a dim-dimensional tensor-product sizes container.
Definition tensor_index_tp.hpp:38
dim-dimensional tensor-product Bezier polynomial function.
Definition monomials_tp.hpp:34
Domain functions.
Definition domain_function.hpp:41
dim-dimensional tensor-product monomials function.
Definition monomials_tp.hpp:41
typename Parent::template Value< T > Value
Value type.
Definition monomials_tp.hpp:50
Gradient< T > grad_(const Point< dim, T > &point) const
Gradient evaluator operator.
virtual Value< Interval< dim > > operator()(const Point< dim, Interval< dim > > &point) const final
Evaluator operator.
Hessian< T > hessian_(const Point< dim, T > &point) const
Hessian evaluator operator.
MonomialsTP(const TensorSizeTP< dim > &order, const std::vector< CoefsType > &coefs)
Constructor.
virtual Gradient< Interval< dim > > grad(const Point< dim, Interval< dim > > &point) const final
Gradient evaluator operator.
typename Parent::template Gradient< T > Gradient
Gradient type.
Definition monomials_tp.hpp:53
MonomialsTP(const MonomialsTP< dim, range > &monomials)
Copy constructor.
typename Parent::template Hessian< T > Hessian
Hessian type.
Definition monomials_tp.hpp:56
virtual Value< real > operator()(const Point< dim > &point) const final
Evaluator operator.
typename Parent::CoefsType CoefsType
Coefs type.
Definition monomials_tp.hpp:47
MonomialsTP(const TensorSizeTP< dim > &order)
Constructor.
Value< T > eval_(const Point< dim, T > &point) const
Evaluator operator.
static Vector< Value< T >, dim+1 > horner_der(const Point< dim, T > &point, typename std::vector< CoefsType >::const_iterator &coefs, const Vector< int, dim > &order)
Evaluates the gradient of the monomials using the Horner's method.
virtual Gradient< real > grad(const Point< dim > &point) const final
Gradient evaluator operator.
std::shared_ptr< MonomialsTP< dim - 1, range > > extract_facet(const int local_facet_id) const
Extracts a facet from the monomials tensor product.
static Value< T > horner(const Point< dim, T > &point, typename std::vector< CoefsType >::const_iterator &coefs, const Vector< int, dim > &order)
Evaluates a monomials using Horner's method.
virtual Hessian< real > hessian(const Point< dim > &point) const final
Hessian evaluator operator.
static void transform_coefs_to_Bezier(const MonomialsTP< dim, range > &monomials, std::vector< CoefsType > &bzr_coefs)
Transforms the coefficients of monomials to Bezier form.
::algoim::Interval< N > Interval
Algoim's interval alias.
Definition monomials_tp.hpp:59
std::shared_ptr< MonomialsTP< dim, range > > create_derivative(const int dir) const
Creates a derivative of the current MonomialsTP object in the specified direction.
Base class for tensor-product polynomial functions.
Definition polynomial_tp.hpp:37
std::conditional_t< range==1, real, Point< range > > CoefsType
Coefs type.
Definition polynomial_tp.hpp:40
Declaration of a few implicit functions template class ready to be consumed by Algoim.
Definition affine_transf.hpp:28
::algoim::uvector< T, dim > Vector
Class representing a vector.
Definition vector.hpp:31
Vector< T, dim > Point
Class representing a dim-dimensional Point.
Definition point.hpp:34
Declaration of tensor-product polynomial class.
Declaration of tensor-product index and size related classes.
Declaration of types.