QUGaR 0.0.4
Loading...
Searching...
No Matches
impl_funcs_lib_macros.hpp File Reference

Declaration of macros to ease the definition/implementation of implicit functions. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define declare_impl_func_virtual_interface
 
#define declare_impl_func_virtual_interface_2D
 
#define declare_impl_func_virtual_interface_3D
 
#define implement_impl_func(FUNC_NAME)
 
#define implement_impl_func_2D(FUNC_NAME)
 
#define implement_impl_func_3D(FUNC_NAME)
 
#define implement_impl_func_transf(FUNC_NAME)
 

Detailed Description

Declaration of macros to ease the definition/implementation of implicit functions.

Author
Pablo Antolin (pablo.nosp@m..ant.nosp@m.olin@.nosp@m.epfl.nosp@m..ch)
Date
2025-01-21

Macro Definition Documentation

◆ declare_impl_func_virtual_interface

#define declare_impl_func_virtual_interface
Value:
template<typename T> using Hessian = ImplicitFunc<dim>::template Hessian<T>; \
\
[[nodiscard]] virtual real operator()(const Point<dim> &point) const final; \
\
[[nodiscard]] virtual ::algoim::Interval<dim> operator()(const Point<dim, ::algoim::Interval<dim>> &point) \
const final; \
\
[[nodiscard]] virtual Vector<real, dim> grad(const Point<dim> &point) const final; \
\
[[nodiscard]] virtual Vector<::algoim::Interval<dim>, dim> grad(const Point<dim, ::algoim::Interval<dim>> &point) \
const final; \
\
[[nodiscard]] Hessian<real> virtual hessian(const Point<dim> &point) const final; \
\
private: \
template<typename T> [[nodiscard]] T eval_(const Point<dim, T> &point) const; \
\
template<typename T> [[nodiscard]] Vector<T, dim> grad_(const Point<dim, T> &point) const; \
\
template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<dim, T> &point) const

◆ declare_impl_func_virtual_interface_2D

#define declare_impl_func_virtual_interface_2D
Value:
template<typename T> using Hessian = ImplicitFunc<2>::template Hessian<T>; \
\
[[nodiscard]] virtual real operator()(const Point<2> &point) const final; \
\
[[nodiscard]] virtual ::algoim::Interval<2> operator()(const Point<2, ::algoim::Interval<2>> &point) const final; \
\
[[nodiscard]] virtual Vector<real, 2> grad(const Point<2> &point) const final; \
\
[[nodiscard]] virtual Vector<::algoim::Interval<2>, 2> grad(const Point<2, ::algoim::Interval<2>> &point) \
const final; \
\
[[nodiscard]] Hessian<real> virtual hessian(const Point<2> &point) const final; \
\
private: \
template<typename T> [[nodiscard]] T eval_(const Point<2, T> &point) const; \
\
template<typename T> [[nodiscard]] Vector<T, 2> grad_(const Point<2, T> &point) const; \
\
template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<2, T> &point) const

◆ declare_impl_func_virtual_interface_3D

#define declare_impl_func_virtual_interface_3D
Value:
template<typename T> using Hessian = ImplicitFunc<3>::template Hessian<T>; \
\
[[nodiscard]] virtual real operator()(const Point<3> &point) const final; \
\
[[nodiscard]] virtual ::algoim::Interval<3> operator()(const Point<3, ::algoim::Interval<3>> &point) const final; \
\
[[nodiscard]] virtual Vector<real, 3> grad(const Point<3> &point) const final; \
\
[[nodiscard]] virtual Vector<::algoim::Interval<3>, 3> grad(const Point<3, ::algoim::Interval<3>> &point) \
const final; \
\
[[nodiscard]] Hessian<real> virtual hessian(const Point<3> &point) const final; \
\
private: \
template<typename T> [[nodiscard]] T eval_(const Point<3, T> &point) const; \
\
template<typename T> [[nodiscard]] Vector<T, 3> grad_(const Point<3, T> &point) const; \
\
template<typename T> [[nodiscard]] Hessian<T> hessian_(const Point<3, T> &point) const

◆ implement_impl_func

#define implement_impl_func ( FUNC_NAME)
Value:
\
template<int dim> real FUNC_NAME<dim>::operator()(const Point<dim> &point) const \
{ \
return this->eval_(point); \
} \
\
template<int dim> \
::algoim::Interval<dim> FUNC_NAME<dim>::operator()(const Point<dim, ::algoim::Interval<dim>> &point) const \
{ \
return this->eval_(point); \
} \
\
template<int dim> Vector<real, dim> FUNC_NAME<dim>::grad(const Point<dim> &point) const \
{ \
return this->grad_(point); \
} \
\
template<int dim> \
Vector<::algoim::Interval<dim>, dim> FUNC_NAME<dim>::grad(const Point<dim, ::algoim::Interval<dim>> &point) const \
{ \
return this->grad_(point); \
} \
\
template<int dim> auto FUNC_NAME<dim>::hessian(const Point<dim> &point) const -> Hessian<real> \
{ \
return this->hessian_(point); \
}

◆ implement_impl_func_2D

#define implement_impl_func_2D ( FUNC_NAME)
Value:
\
real FUNC_NAME::operator()(const Point<2> &point) const \
{ \
return this->eval_(point); \
} \
\
::algoim::Interval<2> FUNC_NAME::operator()(const Point<2, ::algoim::Interval<2>> &point) const \
{ \
return this->eval_(point); \
} \
\
Vector<real, 2> FUNC_NAME::grad(const Point<2> &point) const \
{ \
return this->grad_(point); \
} \
\
Vector<::algoim::Interval<2>, 2> FUNC_NAME::grad(const Point<2, ::algoim::Interval<2>> &point) const \
{ \
return this->grad_(point); \
} \
\
auto FUNC_NAME::hessian(const Point<2> &point) const -> Hessian<real> \
{ \
return this->hessian_(point); \
}

◆ implement_impl_func_3D

#define implement_impl_func_3D ( FUNC_NAME)
Value:
\
real FUNC_NAME::operator()(const Point<3> &point) const \
{ \
return this->eval_(point); \
} \
\
::algoim::Interval<3> FUNC_NAME::operator()(const Point<3, ::algoim::Interval<3>> &point) const \
{ \
return this->eval_(point); \
} \
\
Vector<real, 3> FUNC_NAME::grad(const Point<3> &point) const \
{ \
return this->grad_(point); \
} \
\
Vector<::algoim::Interval<3>, 3> FUNC_NAME::grad(const Point<3, ::algoim::Interval<3>> &point) const \
{ \
return this->grad_(point); \
} \
\
auto FUNC_NAME::hessian(const Point<3> &point) const -> Hessian<real> \
{ \
return this->hessian_(point); \
}

◆ implement_impl_func_transf

#define implement_impl_func_transf ( FUNC_NAME)
Value:
\
template<int dim> real FUNC_NAME<dim>::operator()(const Point<dim> &point) const \
{ \
return this->eval_(this->transf_.transform_point(point)); \
} \
\
template<int dim> \
::algoim::Interval<dim> FUNC_NAME<dim>::operator()(const Point<dim, ::algoim::Interval<dim>> &point) const \
{ \
return this->eval_(this->transf_.transform_point(point)); \
} \
\
template<int dim> Vector<real, dim> FUNC_NAME<dim>::grad(const Point<dim> &point) const \
{ \
return this->transf_.transform_vector(this->grad_(this->transf_.transform_point(point))); \
} \
\
template<int dim> \
Vector<::algoim::Interval<dim>, dim> FUNC_NAME<dim>::grad(const Point<dim, ::algoim::Interval<dim>> &point) const \
{ \
return this->transf_.transform_vector(this->grad_(this->transf_.transform_point(point))); \
} \
\
template<int dim> auto FUNC_NAME<dim>::hessian(const Point<dim> &point) const -> Hessian<real> \
{ \
return this->transf_.transform_tensor(this->hessian_(this->transf_.transform_point(point))); \
}