QUGaR 0.0.4
Loading...
Searching...
No Matches
domain_function.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_DOMAIN_FUNCTION_HPP
12#define QUGAR_IMPL_DOMAIN_FUNCTION_HPP
13
20
21#include <qugar/types.hpp>
22
23#include <qugar/point.hpp>
24#include <qugar/vector.hpp>
25
26#include <algoim/interval.hpp>
27
28#include <cstdint>
29#include <type_traits>
30
31namespace qugar::impl {
32
33enum FuncSign : std::int8_t { negative, positive, undetermined };
34
40template<int dim, int range> class DomainFunc
41{
42public:
44 template<int N> using Interval = ::algoim::Interval<N>;
45
48 template<typename T> using Value = std::conditional_t<range == 1, T, Vector<T, range>>;
49
52 template<typename T> using Gradient = Vector<Value<T>, dim>;
53
55 static const int num_hessian = dim * (dim + 1) / 2;
56
59 template<typename T> using Hessian = Vector<Value<T>, num_hessian>;
60
62 DomainFunc() = default;
64 DomainFunc(const DomainFunc &) = default;
66 DomainFunc(DomainFunc &&) = default;
68 DomainFunc &operator=(const DomainFunc &) = default;
72 virtual ~DomainFunc() = default;
73
79 [[nodiscard]] virtual Value<real> operator()(const Point<dim> &point) const = 0;
80
86 [[nodiscard]] virtual Value<Interval<dim>> operator()(const Point<dim, Interval<dim>> &point) const = 0;
87
93 [[nodiscard]] virtual Gradient<real> grad(const Point<dim> &point) const = 0;
94
100 [[nodiscard]] virtual Gradient<Interval<dim>> grad(const Point<dim, Interval<dim>> &point) const = 0;
101
107 [[nodiscard]] virtual Hessian<real> hessian(const Point<dim> &point) const = 0;
108};
109
111template<int dim> using ScalarFunc = DomainFunc<dim, 1>;
112
114template<int dim> using ImplicitFunc = ScalarFunc<dim>;
115
116}// namespace qugar::impl
117
118
119#endif// QUGAR_IMPL_DOMAIN_FUNCTION_HPP
Domain functions.
Definition domain_function.hpp:41
DomainFunc(DomainFunc &&)=default
Default move constructor.
virtual Gradient< real > grad(const Point< dim > &point) const =0
Gradient evaluator operator.
static const int num_hessian
Number of Hessian (symmetric) components.
Definition domain_function.hpp:55
virtual Hessian< real > hessian(const Point< dim > &point) const =0
Hessian evaluator operator.
DomainFunc & operator=(DomainFunc &&)=default
Default move assignment operator.
virtual Value< Interval< dim > > operator()(const Point< dim, Interval< dim > > &point) const =0
Evaluator operator.
DomainFunc(const DomainFunc &)=default
Default copy constructor.
Vector< Value< T >, num_hessian > Hessian
Hessian (symmetric type).
Definition domain_function.hpp:59
DomainFunc()=default
Default constructor.
std::conditional_t< range==1, T, Vector< T, range > > Value
Value type.
Definition domain_function.hpp:48
virtual Gradient< Interval< dim > > grad(const Point< dim, Interval< dim > > &point) const =0
Gradient evaluator operator.
Vector< Value< T >, dim > Gradient
Gradient type.
Definition domain_function.hpp:52
virtual Value< real > operator()(const Point< dim > &point) const =0
Evaluator operator.
virtual ~DomainFunc()=default
Default virtual destructor.
DomainFunc & operator=(const DomainFunc &)=default
Default copy assignment operator.
::algoim::Interval< N > Interval
Algoim's interval alias.
Definition domain_function.hpp:44
Definition affine_transf.hpp:28
FuncSign
Definition domain_function.hpp:33
@ negative
Definition domain_function.hpp:33
@ positive
Definition domain_function.hpp:33
@ undetermined
Definition domain_function.hpp:33
::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
Definition and implementation of Point class.
Declaration of types.