11#ifndef QUGAR_IMPL_FUNCS_LIB_HPP
12#define QUGAR_IMPL_FUNCS_LIB_HPP
28#include <algoim/interval.hpp>
46 template<
class T>
constexpr T
pow(
const T base,
unsigned const exponent)
noexcept
48 return (exponent == 0) ? 1 : (base *
pow(base, exponent - 1));
55 using value = std::integral_constant<bool, true>;
60 using value = std::integral_constant<bool, false>;
65 template<
typename T,
int dim,
int new_dim>
struct NewVector<
Vector<T, dim>, new_dim>
82 static const int dim = dim_;
87 static const int dim = dim_;
155 template<
typename T>
static int sgn(
const T &val);
170 explicit DimLinear(
const std::array<real, num_coeffs> &coefs);
222 std::shared_ptr<const ImplicitFunc<dim>>
func_;
242 std::shared_ptr<const ImplicitFunc<dim>>
lhs_;
244 std::shared_ptr<const ImplicitFunc<dim>>
rhs_;
264 std::shared_ptr<const ImplicitFunc<dim>>
lhs_;
266 std::shared_ptr<const ImplicitFunc<dim>>
rhs_;
Declaration of affine transformation class.
Class for representing affine transformations.
Definition affine_transf.hpp:46
Domain functions.
Definition domain_function.hpp:41
This function adds two functions together.
Definition impl_funcs_lib.hpp:229
AddFunctions(const std::shared_ptr< const ImplicitFunc< dim > > &lhs, const std::shared_ptr< const ImplicitFunc< dim > > &rhs)
Constructor.
std::shared_ptr< const ImplicitFunc< dim > > lhs_
Left-hand-side operand.
Definition impl_funcs_lib.hpp:242
declare_impl_func_virtual_interface
Definition impl_funcs_lib.hpp:238
std::shared_ptr< const ImplicitFunc< dim > > rhs_
Right-hand-side operand.
Definition impl_funcs_lib.hpp:244
dim-linear function.
Definition impl_funcs_lib.hpp:162
static const int num_coeffs
Number of coefficients.
Definition impl_funcs_lib.hpp:165
std::array< real, num_coeffs > coefs_
Coefficients of the dim-linear expression.
Definition impl_funcs_lib.hpp:183
DimLinear(const std::array< real, num_coeffs > &coefs, const AffineTransf< dim > &transf)
Constructs a new dim-linear function from its coefficients.
DimLinear(const std::array< real, num_coeffs > &coefs)
Constructs a new dim-linear function from its coefficients.
declare_impl_func_virtual_interface
Definition impl_funcs_lib.hpp:179
Function containing an affine transformation.
Definition impl_funcs_lib.hpp:114
FuncWithAffineTransf()
Default constructor. Creates and stores an identity transformation.
FuncWithAffineTransf(const AffineTransf< dim > &transf)
Constructs a new class storing the given transf.
AffineTransf< dim > transf_
Stored affine transformation.
Definition impl_funcs_lib.hpp:127
This function computes the negative of a given function.
Definition impl_funcs_lib.hpp:211
std::shared_ptr< const ImplicitFunc< dim > > func_
Function whose negative is computed.
Definition impl_funcs_lib.hpp:222
Negative(const std::shared_ptr< const ImplicitFunc< dim > > &func)
Constructor.
declare_impl_func_virtual_interface
Definition impl_funcs_lib.hpp:218
Dimension independent square function in domain [-1,1]^dim.
Definition impl_funcs_lib.hpp:137
Square()=default
Constructs a new square aligned with the Cartesian axes.
declare_impl_func_virtual_interface
Definition impl_funcs_lib.hpp:148
static int sgn(const T &val)
Returns the sign of the given value.
Square(const AffineTransf< dim > &transf)
Constructs a new square object transformed according to transf.
This function subtracts two functions.
Definition impl_funcs_lib.hpp:251
std::shared_ptr< const ImplicitFunc< dim > > rhs_
Right-hand-side operand.
Definition impl_funcs_lib.hpp:266
SubtractFunctions(const std::shared_ptr< const ImplicitFunc< dim > > &lhs, const std::shared_ptr< const ImplicitFunc< dim > > &rhs)
Constructor.
declare_impl_func_virtual_interface
Definition impl_funcs_lib.hpp:260
std::shared_ptr< const ImplicitFunc< dim > > lhs_
Left-hand-side operand.
Definition impl_funcs_lib.hpp:264
Declaration of a few implicit functions template class ready to be consumed by Algoim.
Declaration of macros to ease the definition/implementation of implicit functions.
constexpr T pow(const T base, unsigned const exponent) noexcept
Computes the exponent of a value.
Definition impl_funcs_lib.hpp:46
typename VectorType< V >::type VectorType_t
Definition impl_funcs_lib.hpp:104
typename NewVector< V, new_dim >::type NewVector_t
Definition impl_funcs_lib.hpp:75
typename NewVector< V,(VectorDim< V >::dim *(VectorDim< V >::dim+1))/2 >::type Hessian_t
Definition impl_funcs_lib.hpp:90
Definition impl_funcs_lib.hpp:36
double real
Definition types.hpp:18
::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.
std::integral_constant< bool, false > value
Definition impl_funcs_lib.hpp:60
std::integral_constant< bool, true > value
Definition impl_funcs_lib.hpp:55
Definition impl_funcs_lib.hpp:51
Point< new_dim > type
Definition impl_funcs_lib.hpp:72
Vector< T, new_dim > type
Definition impl_funcs_lib.hpp:67
Definition impl_funcs_lib.hpp:63
Definition impl_funcs_lib.hpp:78
real type
Definition impl_funcs_lib.hpp:101
T type
Definition impl_funcs_lib.hpp:96
Definition impl_funcs_lib.hpp:92