Loading...
Searching...
No Matches
Go to the documentation of this file.
11#ifndef QUGAR_IMPL_FUNCS_LIB_MACROS_HPP
12#define QUGAR_IMPL_FUNCS_LIB_MACROS_HPP
23#define declare_impl_func_virtual_interface \
24 template<typename T> using Hessian = ImplicitFunc<dim>::template Hessian<T>; \
26 [[nodiscard]] virtual real operator()(const Point<dim> &point) const final; \
28 [[nodiscard]] virtual ::algoim::Interval<dim> operator()(const Point<dim, ::algoim::Interval<dim>> &point) \
31 [[nodiscard]] virtual Vector<real, dim> grad(const Point<dim> &point) const final; \
33 [[nodiscard]] virtual Vector<::algoim::Interval<dim>, dim> grad(const Point<dim, ::algoim::Interval<dim>> &point) \
36 [[nodiscard]] Hessian<real> virtual hessian(const Point<dim> &point) const final; \
39 template<typename T> [[nodiscard]] T eval_(const Point<dim, T> &point) const; \
41 template<typename T> [[nodiscard]] Vector<T, dim> grad_(const Point<dim, T> &point) const; \
43 template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<dim, T> &point) const
45#define declare_impl_func_virtual_interface_2D \
46 template<typename T> using Hessian = ImplicitFunc<2>::template Hessian<T>; \
48 [[nodiscard]] virtual real operator()(const Point<2> &point) const final; \
50 [[nodiscard]] virtual ::algoim::Interval<2> operator()(const Point<2, ::algoim::Interval<2>> &point) const final; \
52 [[nodiscard]] virtual Vector<real, 2> grad(const Point<2> &point) const final; \
54 [[nodiscard]] virtual Vector<::algoim::Interval<2>, 2> grad(const Point<2, ::algoim::Interval<2>> &point) \
57 [[nodiscard]] Hessian<real> virtual hessian(const Point<2> &point) const final; \
60 template<typename T> [[nodiscard]] T eval_(const Point<2, T> &point) const; \
62 template<typename T> [[nodiscard]] Vector<T, 2> grad_(const Point<2, T> &point) const; \
64 template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<2, T> &point) const
67#define declare_impl_func_virtual_interface_3D \
68 template<typename T> using Hessian = ImplicitFunc<3>::template Hessian<T>; \
70 [[nodiscard]] virtual real operator()(const Point<3> &point) const final; \
72 [[nodiscard]] virtual ::algoim::Interval<3> operator()(const Point<3, ::algoim::Interval<3>> &point) const final; \
74 [[nodiscard]] virtual Vector<real, 3> grad(const Point<3> &point) const final; \
76 [[nodiscard]] virtual Vector<::algoim::Interval<3>, 3> grad(const Point<3, ::algoim::Interval<3>> &point) \
79 [[nodiscard]] Hessian<real> virtual hessian(const Point<3> &point) const final; \
82 template<typename T> [[nodiscard]] T eval_(const Point<3, T> &point) const; \
84 template<typename T> [[nodiscard]] Vector<T, 3> grad_(const Point<3, T> &point) const; \
86 template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<3, T> &point) const
89#define implement_impl_func(FUNC_NAME) \
91 template<int dim> real FUNC_NAME<dim>::operator()(const Point<dim> &point) const \
93 return this->eval_(point); \
97 ::algoim::Interval<dim> FUNC_NAME<dim>::operator()(const Point<dim, ::algoim::Interval<dim>> &point) const \
99 return this->eval_(point); \
102 template<int dim> Vector<real, dim> FUNC_NAME<dim>::grad(const Point<dim> &point) const \
104 return this->grad_(point); \
108 Vector<::algoim::Interval<dim>, dim> FUNC_NAME<dim>::grad(const Point<dim, ::algoim::Interval<dim>> &point) const \
110 return this->grad_(point); \
113 template<int dim> auto FUNC_NAME<dim>::hessian(const Point<dim> &point) const -> Hessian<real> \
115 return this->hessian_(point); \
118#define implement_impl_func_2D(FUNC_NAME) \
120 real FUNC_NAME::operator()(const Point<2> &point) const \
122 return this->eval_(point); \
125 ::algoim::Interval<2> FUNC_NAME::operator()(const Point<2, ::algoim::Interval<2>> &point) const \
127 return this->eval_(point); \
130 Vector<real, 2> FUNC_NAME::grad(const Point<2> &point) const \
132 return this->grad_(point); \
135 Vector<::algoim::Interval<2>, 2> FUNC_NAME::grad(const Point<2, ::algoim::Interval<2>> &point) const \
137 return this->grad_(point); \
140 auto FUNC_NAME::hessian(const Point<2> &point) const -> Hessian<real> \
142 return this->hessian_(point); \
145#define implement_impl_func_3D(FUNC_NAME) \
147 real FUNC_NAME::operator()(const Point<3> &point) const \
149 return this->eval_(point); \
152 ::algoim::Interval<3> FUNC_NAME::operator()(const Point<3, ::algoim::Interval<3>> &point) const \
154 return this->eval_(point); \
157 Vector<real, 3> FUNC_NAME::grad(const Point<3> &point) const \
159 return this->grad_(point); \
162 Vector<::algoim::Interval<3>, 3> FUNC_NAME::grad(const Point<3, ::algoim::Interval<3>> &point) const \
164 return this->grad_(point); \
167 auto FUNC_NAME::hessian(const Point<3> &point) const -> Hessian<real> \
169 return this->hessian_(point); \
172#define implement_impl_func_transf(FUNC_NAME) \
174 template<int dim> real FUNC_NAME<dim>::operator()(const Point<dim> &point) const \
176 return this->eval_(this->transf_.transform_point(point)); \
180 ::algoim::Interval<dim> FUNC_NAME<dim>::operator()(const Point<dim, ::algoim::Interval<dim>> &point) const \
182 return this->eval_(this->transf_.transform_point(point)); \
185 template<int dim> Vector<real, dim> FUNC_NAME<dim>::grad(const Point<dim> &point) const \
187 return this->transf_.transform_vector(this->grad_(this->transf_.transform_point(point))); \
191 Vector<::algoim::Interval<dim>, dim> FUNC_NAME<dim>::grad(const Point<dim, ::algoim::Interval<dim>> &point) const \
193 return this->transf_.transform_vector(this->grad_(this->transf_.transform_point(point))); \
196 template<int dim> auto FUNC_NAME<dim>::hessian(const Point<dim> &point) const -> Hessian<real> \
198 return this->transf_.transform_tensor(this->hessian_(this->transf_.transform_point(point))); \