glucat 0.12.0
glucat Namespace Reference

Namespaces

namespace  gen
 
namespace  matrix
 
namespace  timing
 

Classes

class  basis_table
 Table of basis elements used as a cache by basis_element() More...
 
class  bool_to_type
 Bool to type. More...
 
class  clifford_algebra
 clifford_algebra<> declares the operations of a Clifford algebra More...
 
class  compare_types
 Type comparison. More...
 
class  compare_types< T, T >
 
class  control_t
 Parameters to control tests. More...
 
struct  CTAssertion
 Compile time assertion. More...
 
struct  CTAssertion< true >
 
class  error
 Specific exception class. More...
 
class  framed_multi
 A framed_multi<Scalar_T,LO,HI,Tune_P> is a framed approximation to a multivector. More...
 
class  glucat_error
 Abstract exception class. More...
 
class  index_set
 Index set class based on std::bitset<> in Gnu standard C++ library. More...
 
class  index_set_hash
 
class  matrix_multi
 A matrix_multi<Scalar_T,LO,HI,Tune_P> is a matrix approximation to a multivector. More...
 
class  numeric_traits
 Extra traits which extend numeric limits. More...
 
class  random_generator
 Random number generator with single instance per Scalar_T. More...
 
class  sorted_range
 Sorted range for use with output. More...
 
class  sorted_range< Sorted_Map_T, Sorted_Map_T >
 

Typedefs

using index_t = int
 Size of index_t should be enough to represent LO, HI.
 
using set_value_t = unsigned long
 Size of set_value_t should be enough to contain index_set<LO,HI>
 
typedef int(* intfn) ()
 For exception catching: pointer to function returning int.
 
typedef int(* intintfn) (int)
 For exception catching: pointer to function of int returning int.
 
using tuning_slow
 
using tuning_naive
 
using tuning_fast
 

Functions

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator!= (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> bool
 Test for inequality of multivectors.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator!= (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const Scalar_T &scr) -> bool
 Test for inequality of multivector and scalar.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator!= (const Scalar_T &scr, const Multivector< Scalar_T, LO, HI, Tune_P > &rhs) -> bool
 Test for inequality of scalar and multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto error_squared_tol (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Quadratic norm error tolerance relative to a specific multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto error_squared (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs, const Scalar_T threshold) -> Scalar_T
 Relative or absolute error using the quadratic norm.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto approx_equal (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs, const Scalar_T threshold, const Scalar_T tolerance) -> bool
 Test for approximate equality of multivectors.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto approx_equal (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> bool
 Test for approximate equality of multivectors.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator+ (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const Scalar_T &scr) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric sum of multivector and scalar.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator+ (const Scalar_T &scr, const Multivector< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric sum of scalar and multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator+ (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric sum.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator- (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const Scalar_T &scr) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric difference of multivector and scalar.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator- (const Scalar_T &scr, const Multivector< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric difference of scalar and multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator- (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric difference.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator* (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const Scalar_T &scr) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Product of multivector and scalar.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator* (const Scalar_T &scr, const Multivector< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Product of scalar and multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator* (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric product.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator^ (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Outer product.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator& (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inner product.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator% (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Left contraction.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto star (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> Scalar_T
 Hestenes scalar product.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator/ (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const Scalar_T &scr) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Quotient of multivector and scalar.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator/ (const Scalar_T &scr, const Multivector< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Quotient of scalar and multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator/ (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric quotient.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator| (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Transformation via twisted adjoint action.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto inv (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Geometric multiplicative inverse.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto pow (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, int rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Integer power of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto pow (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, const RHS< Scalar_T, LO, HI, Tune_P > &rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Multivector power of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto outer_pow (const Multivector< Scalar_T, LO, HI, Tune_P > &lhs, int rhs) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Outer product power of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto scalar (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Scalar part.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto real (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Real part: synonym for scalar part.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto imag (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Imaginary part: deprecated (always 0)
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto pure (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Pure part.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto even (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Even part.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto odd (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Odd part.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto vector_part (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const std::vector< Scalar_T >
 Vector part of multivector, as a vector_t with respect to frame()
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto involute (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Main involution, each {i} is replaced by -{i} in each term, eg. {1}*{2} -> (-{2})*(-{1})
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto reverse (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Reversion, eg. {1}*{2} -> {2}*{1}.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto conj (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Conjugation, rev o invo == invo o rev.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto quad (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Scalar_T quadratic form == (rev(x)*x)(0)
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto norm (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Scalar_T norm == sum of norm of coordinates.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto abs (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Absolute value == sqrt(norm)
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto max_abs (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> Scalar_T
 Maximum of absolute values of components of multivector: multivector infinity norm.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto complexifier (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Square root of -1 which commutes with all members of the frame of the given multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto elliptic (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sqrt (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sqrt (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Square root of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto clifford_exp (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Exponential of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto log (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto log (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto cos (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Cosine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto cos (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Cosine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto acos (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse cosine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto acos (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse cosine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto cosh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Hyperbolic cosine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto acosh (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic cosine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto acosh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic cosine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sin (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Sine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sin (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Sine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto asin (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse sine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto asin (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse sine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sinh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Hyperbolic sine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto asinh (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic sine of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto asinh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic sine of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto tan (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Tangent of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto tan (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Tangent of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto atan (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse tangent of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto atan (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse tangent of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto tanh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Hyperbolic tangent of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto atanh (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic tangent of multivector with specified complexifier.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto atanh (const Multivector< Scalar_T, LO, HI, Tune_P > &val) -> const Multivector< Scalar_T, LO, HI, Tune_P >
 Inverse hyperbolic tangent of multivector.
 
template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static void check_complex (const Multivector< Scalar_T, LO, HI, Tune_P > &val, const Multivector< Scalar_T, LO, HI, Tune_P > &i, const bool prechecked=false)
 Check that i is a valid complexifier for val.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator* (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Geometric product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator^ (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Outer product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator& (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Inner product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator% (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Left contraction.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto star (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> Scalar_T
 Hestenes scalar product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator/ (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Geometric quotient.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator| (const framed_multi< Scalar_T, LO, HI, Tune_P > &lhs, const framed_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Transformation via twisted adjoint action.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator>> (std::istream &s, framed_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::istream &
 Read multivector from input.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator<< (std::ostream &os, const framed_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::ostream &
 Write multivector to output.
 
template<typename Scalar_T, const index_t LO, const index_t HI>
auto operator<< (std::ostream &os, const std::pair< const index_set< LO, HI >, Scalar_T > &term) -> std::ostream &
 Write term to output.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto exp (const framed_multi< Scalar_T, LO, HI, Tune_P > &val) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Exponential of multivector.
 
template<typename Scalar_T, const index_t LO, const index_t HI>
static auto crd_of_mult (const std::pair< const index_set< LO, HI >, Scalar_T > &lhs, const std::pair< const index_set< LO, HI >, Scalar_T > &rhs) -> Scalar_T
 Coordinate of product of terms.
 
template<typename Scalar_T, const index_t LO, const index_t HI>
auto operator* (const std::pair< const index_set< LO, HI >, Scalar_T > &lhs, const std::pair< const index_set< LO, HI >, Scalar_T > &rhs) -> const std::pair< const index_set< LO, HI >, Scalar_T >
 Product of terms.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sqrt (const framed_multi< Scalar_T, LO, HI, Tune_P > &val, const framed_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto log (const framed_multi< Scalar_T, LO, HI, Tune_P > &val, const framed_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const framed_multi< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI>
static auto crd_of_mult (const std::pair< const index_set< LO, HI >, Scalar_T > &lhs, const std::pair< const index_set< LO, HI >, Scalar_T > &rhs) -> Scalar_T
 Coordinate of product of terms.
 
 _GLUCAT_CTAssert (std::numeric_limits< unsigned char >::radix==2, CannotDetermineBitsPerChar) const index_t BITS_PER_CHAR
 If radix of unsigned char is not 2, we can't easily determine number of bits from sizeof.
 
 _GLUCAT_CTAssert (_GLUCAT_BITS_PER_ULONG==BITS_PER_SET_VALUE, BitsPerULongDoesNotMatchSetValueT) const index_t DEFAULT_LO
 Default lowest index in an index set.
 
template<typename LHS_T, typename RHS_T>
auto pos_mod (LHS_T lhs, RHS_T rhs) -> LHS_T
 Modulo function which works reliably for lhs < 0.
 
template<const index_t LO, const index_t HI>
auto operator^ (const index_set< LO, HI > &lhs, const index_set< LO, HI > &rhs) -> const index_set< LO, HI >
 Symmetric set difference: exclusive or.
 
template<const index_t LO, const index_t HI>
auto operator& (const index_set< LO, HI > &lhs, const index_set< LO, HI > &rhs) -> const index_set< LO, HI >
 Set intersection: and.
 
template<const index_t LO, const index_t HI>
auto operator| (const index_set< LO, HI > &lhs, const index_set< LO, HI > &rhs) -> const index_set< LO, HI >
 Set union: or.
 
template<const index_t LO, const index_t HI>
auto compare (const index_set< LO, HI > &a, const index_set< LO, HI > &b) -> int
 "lexicographic compare" eg. {3,4,5} is less than {3,7,8}
 
 _GLUCAT_CTAssert (sizeof(set_value_t) >=sizeof(std::bitset< DEFAULT_HI-DEFAULT_LO >), Default_index_set_too_big_for_value) template< const index_t LO
 Size of set_value_t should be enough to contain bitset<DEFAULT_HI-DEFAULT_LO>
 
const index_t HI auto operator<< (std::ostream &os, const index_set< LO, HI > &ist) -> std::ostream &
 
template<const index_t LO, const index_t HI>
auto operator>> (std::istream &s, index_set< LO, HI > &ist) -> std::istream &
 Read in index set.
 
auto sign_of_square (index_t j) -> int
 Square of generator {j}.
 
template<const index_t LO, const index_t HI>
auto min_neg (const index_set< LO, HI > &ist) -> index_t
 Minimum negative index, or 0 if none.
 
template<const index_t LO, const index_t HI>
auto max_pos (const index_set< LO, HI > &ist) -> index_t
 Maximum positive index, or 0 if none.
 
template<const index_t LO, const index_t HI>
auto operator<< (std::ostream &os, const index_set< LO, HI > &ist) -> std::ostream &
 Write out index set.
 
static auto inverse_reversed_gray (unsigned long x) -> unsigned long
 Inverse reversed Gray code.
 
static auto inverse_gray (unsigned long x) -> unsigned long
 Inverse Gray code.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator* (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Geometric product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator^ (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Outer product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator& (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Inner product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator% (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Left contraction.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto star (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> Scalar_T
 Hestenes scalar product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator/ (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Geometric quotient.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator| (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Transformation via twisted adjoint action.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator>> (std::istream &s, matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::istream &
 Read multivector from input.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto operator<< (std::ostream &os, const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::ostream &
 Write multivector to output.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto reframe (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs, matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs_reframed, matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs_reframed) -> const index_set< LO, HI >
 Find a common frame for operands of a binary operator.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto matrix_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, const index_t level) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto matrix_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, const index_t level) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto exp (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Exponential of multivector.
 
auto offset_level (const index_t p, const index_t q) -> index_t
 Determine the log2 dim corresponding to signature p, q.
 
template<typename Matrix_Index_T, const index_t LO, const index_t HI>
static auto folded_dim (const index_set< LO, HI > &sub) -> Matrix_Index_T
 Determine the matrix dimension of the fold of a subalegbra.
 
template<typename Multivector_T, typename Matrix_T, typename Basis_Matrix_T>
static auto fast (const Matrix_T &X, index_t level) -> Multivector_T
 Inverse generalized Fast Fourier Transform.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P, const size_t Size>
static auto pade_approx (const std::array< Scalar_T, Size > &numer, const std::array< Scalar_T, Size > &denom, const matrix_multi< Scalar_T, LO, HI, Tune_P > &X) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Pade' approximation.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static void db_step (matrix_multi< Scalar_T, LO, HI, Tune_P > &M, matrix_multi< Scalar_T, LO, HI, Tune_P > &Y)
 Single step of product form of Denman-Beavers square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto db_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, Scalar_T norm_tol=std::pow(std::numeric_limits< Scalar_T >::epsilon(), 4)) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Product form of Denman-Beavers square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto cr_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, Scalar_T norm_Y_tol=std::pow(std::numeric_limits< Scalar_T >::epsilon(), 1)) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Cyclic reduction square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto pade_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Pade' approximation of log.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto cascade_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Incomplete square root cascade and Pade' approximation of log.
 
template<typename Scalar_T>
auto log2 (const Scalar_T &x) -> Scalar_T
 Log base 2 of scalar.
 
template<typename Scalar_T>
auto to_promote (const Scalar_T &val) -> typename numeric_traits< Scalar_T >::promoted::type
 Cast to promote.
 
template<typename Scalar_T>
auto to_demote (const Scalar_T &val) -> typename numeric_traits< Scalar_T >::demoted::type
 Cast to demote.
 
int try_catch (intfn f)
 Exception catching for functions returning int.
 
int try_catch (intintfn f, int arg)
 Exception catching for functions of int returning int.
 

Variables

template<typename Scalar_T, typename Index_Set_T, typename Multivector_T>
const Scalar_T clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::default_truncation = std::numeric_limits<Scalar_T>::epsilon()
 Default for truncation.
 
const double MS_PER_S = 1000.0
 Timing constant: deprecated here - moved to test/timing.h.
 
const index_t BITS_PER_SET_VALUE = std::numeric_limits<set_value_t>::digits
 Number of bits in set_value_t.
 
const index_t DEFAULT_HI = index_t(BITS_PER_SET_VALUE / 2)
 Default highest index in an index set.
 
static const long double l_pi = 3.1415926535897932384626433832795029L
 
static const long double l_ln2 = 0.6931471805599453094172321214581766L
 
const unsigned int Tuning_Int_Digits = std::numeric_limits<int>::digits
 
const unsigned int Tuning_Max_Threshold = 1 << Tuning_Int_Digits
 
const unsigned int Tuning_Slow_Mult_Matrix_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Slow_Basis_Max_Count = 0
 
const unsigned int Tuning_Slow_Fast_Size_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Slow_Inv_Fast_Dim_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Slow_Products_Size_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Naive_Mult_Matrix_Threshold = 0
 
const unsigned int Tuning_Naive_Basis_Max_Count = Tuning_Max_Threshold
 
const unsigned int Tuning_Naive_Fast_Size_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Naive_Inv_Fast_Dim_Threshold = Tuning_Max_Threshold
 
const unsigned int Tuning_Fast_Mult_Matrix_Threshold = 0
 
const unsigned int Tuning_Fast_Div_Max_Steps = 0
 
const unsigned int Tuning_Fast_CR_Sqrt_Max_Steps = 256
 
const unsigned int Tuning_Fast_DB_Sqrt_Max_Steps = 256
 
const unsigned int Tuning_Fast_Log_Max_Outer_Steps = 16
 
const unsigned int Tuning_Fast_Log_Max_Inner_Steps = 8
 
const unsigned int Tuning_Fast_Basis_Max_Count = 1
 
const unsigned int Tuning_Fast_Fast_Size_Threshold = 0
 
const unsigned int Tuning_Fast_Inv_Fast_Dim_Threshold = 0
 
const unsigned int Tuning_Fast_Products_Size_Threshold = 0
 

Typedef Documentation

◆ index_t

using glucat::index_t = int

Size of index_t should be enough to represent LO, HI.

Definition at line 77 of file global.h.

◆ intfn

typedef int(* glucat::intfn) ()

For exception catching: pointer to function returning int.

Definition at line 37 of file try_catch.h.

◆ intintfn

typedef int(* glucat::intintfn) (int)

For exception catching: pointer to function of int returning int.

Definition at line 40 of file try_catch.h.

◆ set_value_t

using glucat::set_value_t = unsigned long

Size of set_value_t should be enough to contain index_set<LO,HI>

Definition at line 79 of file global.h.

◆ tuning_fast

Initial value:
tuning
<
Tuning_Default_Denom_Different_Bits,
Tuning_Default_Extra_Different_Bits,
Tuning_Default_Function_Precision
>
const unsigned int Tuning_Fast_Fast_Size_Threshold
Definition tuning.h:93
const unsigned int Tuning_Fast_Basis_Max_Count
Definition tuning.h:92
const unsigned int Tuning_Fast_Div_Max_Steps
Definition tuning.h:87
const unsigned int Tuning_Fast_DB_Sqrt_Max_Steps
Definition tuning.h:89
const unsigned int Tuning_Fast_Inv_Fast_Dim_Threshold
Definition tuning.h:94
const unsigned int Tuning_Fast_Log_Max_Outer_Steps
Definition tuning.h:90
const unsigned int Tuning_Fast_CR_Sqrt_Max_Steps
Definition tuning.h:88
const unsigned int Tuning_Fast_Log_Max_Inner_Steps
Definition tuning.h:91
const unsigned int Tuning_Fast_Products_Size_Threshold
Definition tuning.h:95
const unsigned int Tuning_Fast_Mult_Matrix_Threshold
Definition tuning.h:86

Definition at line 97 of file tuning.h.

◆ tuning_naive

Initial value:
tuning
<
Tuning_Default_Div_Max_Steps,
Tuning_Default_CR_Sqrt_Max_Steps,
Tuning_Default_DB_Sqrt_Max_Steps,
Tuning_Default_Log_Max_Outer_Steps,
Tuning_Default_Log_Max_Inner_Steps,
Tuning_Default_Products_Size_Threshold,
Tuning_Default_Denom_Different_Bits,
Tuning_Default_Extra_Different_Bits,
Tuning_Default_Function_Precision
>
const unsigned int Tuning_Naive_Basis_Max_Count
Definition tuning.h:65
const unsigned int Tuning_Naive_Inv_Fast_Dim_Threshold
Definition tuning.h:67
const unsigned int Tuning_Naive_Fast_Size_Threshold
Definition tuning.h:66
const unsigned int Tuning_Naive_Mult_Matrix_Threshold
Definition tuning.h:64

Definition at line 69 of file tuning.h.

◆ tuning_slow

Initial value:
tuning
<
Tuning_Default_Div_Max_Steps,
Tuning_Default_CR_Sqrt_Max_Steps,
Tuning_Default_DB_Sqrt_Max_Steps,
Tuning_Default_Log_Max_Outer_Steps,
Tuning_Default_Log_Max_Inner_Steps,
Tuning_Default_Denom_Different_Bits,
Tuning_Default_Extra_Different_Bits,
Tuning_Default_Function_Precision
>
const unsigned int Tuning_Slow_Products_Size_Threshold
Definition tuning.h:45
const unsigned int Tuning_Slow_Basis_Max_Count
Definition tuning.h:42
const unsigned int Tuning_Slow_Fast_Size_Threshold
Definition tuning.h:43
const unsigned int Tuning_Slow_Mult_Matrix_Threshold
Definition tuning.h:41
const unsigned int Tuning_Slow_Inv_Fast_Dim_Threshold
Definition tuning.h:44

Definition at line 47 of file tuning.h.

Function Documentation

◆ _GLUCAT_CTAssert() [1/3]

glucat::_GLUCAT_CTAssert ( _GLUCAT_BITS_PER_ULONG = =BITS_PER_SET_VALUE,
BitsPerULongDoesNotMatchSetValueT  ) const

Default lowest index in an index set.

References BITS_PER_SET_VALUE.

◆ _GLUCAT_CTAssert() [2/3]

glucat::_GLUCAT_CTAssert ( sizeof(set_value_t) >=sizeof(std::bitset< DEFAULT_HI-DEFAULT_LO >) ,
Default_index_set_too_big_for_value  ) const

Size of set_value_t should be enough to contain bitset<DEFAULT_HI-DEFAULT_LO>

Write out index set

References _GLUCAT_CTAssert(), and DEFAULT_HI.

◆ _GLUCAT_CTAssert() [3/3]

glucat::_GLUCAT_CTAssert ( std::numeric_limits< unsigned char >::radix = =2,
CannotDetermineBitsPerChar  ) const

If radix of unsigned char is not 2, we can't easily determine number of bits from sizeof.

Number of bits per char is used to determine number of bits in set_value_t

Referenced by _GLUCAT_CTAssert().

◆ abs()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::abs ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Absolute value == sqrt(norm)

Definition at line 577 of file clifford_algebra_imp.h.

References glucat::numeric_traits< Scalar_T >::sqrt().

Referenced by PyClical.clifford::abs(), clifford_to_str(), matrix_log(), and matrix_sqrt().

◆ acos() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::acos ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse cosine of multivector.

Definition at line 903 of file clifford_algebra_imp.h.

References acos(), and complexifier().

◆ acos() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::acos ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse cosine of multivector with specified complexifier.

Definition at line 883 of file clifford_algebra_imp.h.

References acosh(), and check_complex().

Referenced by acos().

◆ acosh() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::acosh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic cosine of multivector.

Definition at line 844 of file clifford_algebra_imp.h.

References acosh(), and complexifier().

◆ acosh() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::acosh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic cosine of multivector with specified complexifier.

Definition at line 825 of file clifford_algebra_imp.h.

References check_complex(), log(), norm(), and sqrt().

Referenced by acos(), and acosh().

◆ approx_equal() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::approx_equal ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> bool
inline

Test for approximate equality of multivectors.

Definition at line 169 of file clifford_algebra_imp.h.

References approx_equal(), and error_squared_tol().

◆ approx_equal() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::approx_equal ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs,
const Scalar_T threshold,
const Scalar_T tolerance ) -> bool
inline

Test for approximate equality of multivectors.

Definition at line 154 of file clifford_algebra_imp.h.

References error_squared().

Referenced by approx_equal(), and matrix_sqrt().

◆ asin() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::asin ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse sine of multivector.

Definition at line 1008 of file clifford_algebra_imp.h.

References asin(), and complexifier().

◆ asin() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::asin ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse sine of multivector with specified complexifier.

Definition at line 988 of file clifford_algebra_imp.h.

References asinh(), and check_complex().

Referenced by asin().

◆ asinh() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::asinh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic sine of multivector.

Definition at line 949 of file clifford_algebra_imp.h.

References asinh(), and complexifier().

◆ asinh() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::asinh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic sine of multivector with specified complexifier.

Definition at line 930 of file clifford_algebra_imp.h.

References check_complex(), log(), norm(), and sqrt().

Referenced by asin(), and asinh().

◆ atan() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::atan ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse tangent of multivector.

Definition at line 1108 of file clifford_algebra_imp.h.

References atan(), and complexifier().

◆ atan() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::atan ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse tangent of multivector with specified complexifier.

Definition at line 1088 of file clifford_algebra_imp.h.

References atanh(), and check_complex().

Referenced by atan().

◆ atanh() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::atanh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic tangent of multivector.

Definition at line 1052 of file clifford_algebra_imp.h.

References atanh(), and complexifier().

◆ atanh() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::atanh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inverse hyperbolic tangent of multivector with specified complexifier.

Definition at line 1035 of file clifford_algebra_imp.h.

References check_complex(), log(), and norm().

Referenced by atan(), and atanh().

◆ cascade_log()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::cascade_log ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
static

Incomplete square root cascade and Pade' approximation of log.

Definition at line 1920 of file matrix_multi_imp.h.

References db_step(), epsilon, glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::isnan(), norm(), and pade_log().

Referenced by matrix_log().

◆ check_complex()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static void glucat::check_complex ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false )
inlinestatic

Check that i is a valid complexifier for val.

Definition at line 652 of file clifford_algebra_imp.h.

References complexifier().

Referenced by acos(), acosh(), asin(), asinh(), atan(), atanh(), cos(), log(), log(), sin(), sqrt(), sqrt(), and tan().

◆ clifford_exp()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::clifford_exp ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Exponential of multivector.

Definition at line 690 of file clifford_algebra_imp.h.

References log2().

Referenced by exp(), and exp().

◆ compare()

template<const index_t LO, const index_t HI>
auto glucat::compare ( const index_set< LO, HI > & a,
const index_set< LO, HI > & b ) -> int
inline

"lexicographic compare" eg. {3,4,5} is less than {3,7,8}

Lexicographic ordering of two sets: -1 if a<b, +1 if a>b, 0 if a==b.

Definition at line 574 of file index_set_imp.h.

◆ complexifier()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::complexifier ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Square root of -1 which commutes with all members of the frame of the given multivector.

Definition at line 592 of file clifford_algebra_imp.h.

References pos_mod().

Referenced by acos(), acosh(), asin(), asinh(), atan(), atanh(), check_complex(), cos(), elliptic(), log(), sin(), sqrt(), and tan().

◆ conj()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::conj ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Conjugation, rev o invo == invo o rev.

Definition at line 553 of file clifford_algebra_imp.h.

◆ cos() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::cos ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Cosine of multivector.

Definition at line 874 of file clifford_algebra_imp.h.

References complexifier(), and cos().

◆ cos() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::cos ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Cosine of multivector with specified complexifier.

Definition at line 851 of file clifford_algebra_imp.h.

References check_complex(), and exp().

Referenced by cos(), and tan().

◆ cosh()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::cosh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Hyperbolic cosine of multivector.

Definition at line 807 of file clifford_algebra_imp.h.

References exp().

Referenced by tanh().

◆ cr_sqrt()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::cr_sqrt ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
Scalar_T norm_Y_tol = std::pow(std::numeric_limits<Scalar_T>::epsilon(), 1) ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
static

Cyclic reduction square root iteration.

Definition at line 1349 of file matrix_multi_imp.h.

References glucat::numeric_traits< Scalar_T >::NaN(), and norm().

Referenced by matrix_sqrt().

◆ crd_of_mult() [1/2]

template<typename Scalar_T, const index_t LO, const index_t HI>
static auto glucat::crd_of_mult ( const std::pair< const index_set< LO, HI >, Scalar_T > & lhs,
const std::pair< const index_set< LO, HI >, Scalar_T > & rhs ) -> Scalar_T
inlinestatic

Coordinate of product of terms.

Referenced by operator%(), operator&(), operator*(), and operator^().

◆ crd_of_mult() [2/2]

template<typename Scalar_T, const index_t LO, const index_t HI>
static auto glucat::crd_of_mult ( const std::pair< const index_set< LO, HI >, Scalar_T > & lhs,
const std::pair< const index_set< LO, HI >, Scalar_T > & rhs ) -> Scalar_T
inlinestatic

Coordinate of product of terms.

Definition at line 1709 of file framed_multi_imp.h.

◆ db_sqrt()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::db_sqrt ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
Scalar_T norm_tol = std::pow(std::numeric_limits<Scalar_T>::epsilon(), 4) ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
static

Product form of Denman-Beavers square root iteration.

Definition at line 1320 of file matrix_multi_imp.h.

References db_step(), glucat::numeric_traits< Scalar_T >::NaN(), and norm().

Referenced by matrix_sqrt().

◆ db_step()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static void glucat::db_step ( matrix_multi< Scalar_T, LO, HI, Tune_P > & M,
matrix_multi< Scalar_T, LO, HI, Tune_P > & Y )
inlinestatic

Single step of product form of Denman-Beavers square root iteration.

Definition at line 1308 of file matrix_multi_imp.h.

References inv().

Referenced by cascade_log(), and db_sqrt().

◆ elliptic()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::elliptic ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Square root of -1 which commutes with all members of the frame of the given multivector The name "elliptic" is now deprecated: use "complexifier" instead.

Definition at line 643 of file clifford_algebra_imp.h.

References complexifier().

◆ error_squared()

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::error_squared ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs,
const Scalar_T threshold ) -> Scalar_T
inline

Relative or absolute error using the quadratic norm.

Definition at line 134 of file clifford_algebra_imp.h.

References norm().

Referenced by approx_equal().

◆ error_squared_tol()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::error_squared_tol ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T

Quadratic norm error tolerance relative to a specific multivector.

Definition at line 112 of file clifford_algebra_imp.h.

References glucat::numeric_traits< Scalar_T >::pow().

Referenced by approx_equal().

◆ even()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::even ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Even part.

Definition at line 513 of file clifford_algebra_imp.h.

◆ exp() [1/2]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::exp ( const framed_multi< Scalar_T, LO, HI, Tune_P > & val) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

◆ exp() [2/2]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::exp ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

◆ fast()

template<typename Multivector_T, typename Matrix_T, typename Basis_Matrix_T>
static auto glucat::fast ( const Matrix_T & X,
index_t level ) -> Multivector_T
static

Inverse generalized Fast Fourier Transform.

Definition at line 1027 of file matrix_multi_imp.h.

References fast(), glucat::matrix::signed_perm_nork(), and glucat::matrix::unit().

Referenced by fast(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::fast_framed_multi().

◆ folded_dim()

template<typename Matrix_Index_T, const index_t LO, const index_t HI>
static auto glucat::folded_dim ( const index_set< LO, HI > & sub) -> Matrix_Index_T
inlinestatic

◆ imag()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::imag ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Imaginary part: deprecated (always 0)

Definition at line 497 of file clifford_algebra_imp.h.

◆ inv()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::inv ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric multiplicative inverse.

Definition at line 400 of file clifford_algebra_imp.h.

Referenced by db_step(), and matrix_log().

◆ inverse_gray()

static auto glucat::inverse_gray ( unsigned long x) -> unsigned long
inlinestatic

Inverse Gray code.

Definition at line 863 of file index_set_imp.h.

Referenced by glucat::index_set< LO, HI >::sign_of_mult().

◆ inverse_reversed_gray()

static auto glucat::inverse_reversed_gray ( unsigned long x) -> unsigned long
inlinestatic

Inverse reversed Gray code.

Definition at line 846 of file index_set_imp.h.

Referenced by glucat::index_set< LO, HI >::sign_of_mult().

◆ involute()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::involute ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Main involution, each {i} is replaced by -{i} in each term, eg. {1}*{2} -> (-{2})*(-{1})

Main involution, each {i} is replaced by -{i} in each term, eg. {1} ->-{1}.

Definition at line 537 of file clifford_algebra_imp.h.

◆ log() [1/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::log ( const framed_multi< Scalar_T, LO, HI, Tune_P > & val,
const framed_multi< Scalar_T, LO, HI, Tune_P > & i,
bool prechecked ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

◆ log() [2/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::log ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & i,
bool prechecked ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

Natural logarithm of multivector with specified complexifier.

Definition at line 2045 of file matrix_multi_imp.h.

References check_complex(), glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::isnan(), and matrix_log().

◆ log() [3/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::log ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Natural logarithm of multivector.

Definition at line 799 of file clifford_algebra_imp.h.

References complexifier(), and log().

◆ log() [4/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::log ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Natural logarithm of multivector with specified complexifier.

Definition at line 791 of file clifford_algebra_imp.h.

References log().

Referenced by acosh(), asinh(), atanh(), log(), log(), log(), and pow().

◆ log2()

template<typename Scalar_T>
auto glucat::log2 ( const Scalar_T & x) -> Scalar_T
inline

Log base 2 of scalar.

Definition at line 303 of file scalar.h.

References glucat::numeric_traits< Scalar_T >::log2().

Referenced by clifford_exp().

◆ matrix_log()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::matrix_log ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & i,
const index_t level ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

◆ matrix_sqrt()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::matrix_sqrt ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & i,
const index_t level ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

◆ max_abs()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::max_abs ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Maximum of absolute values of components of multivector: multivector infinity norm.

Definition at line 585 of file clifford_algebra_imp.h.

◆ max_pos()

template<const index_t LO, const index_t HI>
auto glucat::max_pos ( const index_set< LO, HI > & ist) -> index_t
inline

Maximum positive index, or 0 if none.

Definition at line 977 of file index_set_imp.h.

Referenced by operator<<().

◆ min_neg()

template<const index_t LO, const index_t HI>
auto glucat::min_neg ( const index_set< LO, HI > & ist) -> index_t
inline

Minimum negative index, or 0 if none.

Definition at line 970 of file index_set_imp.h.

Referenced by operator<<().

◆ norm()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::norm ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Scalar_T norm == sum of norm of coordinates.

Definition at line 569 of file clifford_algebra_imp.h.

Referenced by acosh(), asinh(), atanh(), cascade_log(), cr_sqrt(), db_sqrt(), error_squared(), matrix_log(), and matrix_sqrt().

◆ odd()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::odd ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Odd part.

Definition at line 521 of file clifford_algebra_imp.h.

◆ offset_level()

auto glucat::offset_level ( const index_t p,
const index_t q ) -> index_t
inline

Determine the log2 dim corresponding to signature p, q.

Definition at line 86 of file matrix_multi_imp.h.

References pos_mod().

Referenced by glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::basis_element(), and folded_dim().

◆ operator!=() [1/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator!= ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> bool
inline

Test for inequality of multivectors.

Definition at line 86 of file clifford_algebra_imp.h.

◆ operator!=() [2/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator!= ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const Scalar_T & scr ) -> bool
inline

Test for inequality of multivector and scalar.

Definition at line 94 of file clifford_algebra_imp.h.

◆ operator!=() [3/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator!= ( const Scalar_T & scr,
const Multivector< Scalar_T, LO, HI, Tune_P > & rhs ) -> bool
inline

Test for inequality of scalar and multivector.

Definition at line 102 of file clifford_algebra_imp.h.

◆ operator%() [1/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator% ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

Left contraction.

Definition at line 597 of file framed_multi_imp.h.

References _GLUCAT_HASH_SIZE_T, and crd_of_mult().

◆ operator%() [2/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator% ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inline

Left contraction.

Definition at line 581 of file matrix_multi_imp.h.

◆ operator%() [3/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator% ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Left contraction.

Definition at line 322 of file clifford_algebra_imp.h.

◆ operator&() [1/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator& ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

Inner product.

Definition at line 495 of file framed_multi_imp.h.

References _GLUCAT_HASH_SIZE_T, and crd_of_mult().

◆ operator&() [2/4]

template<const index_t LO, const index_t HI>
auto glucat::operator& ( const index_set< LO, HI > & lhs,
const index_set< LO, HI > & rhs ) -> const index_set<LO,HI>
inline

Set intersection: and.

Definition at line 186 of file index_set_imp.h.

◆ operator&() [3/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator& ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inline

Inner product.

Definition at line 562 of file matrix_multi_imp.h.

◆ operator&() [4/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator& ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Inner product.

Definition at line 307 of file clifford_algebra_imp.h.

◆ operator*() [1/6]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

Geometric product.

Definition at line 374 of file framed_multi_imp.h.

References _GLUCAT_HASH_SIZE_T.

◆ operator*() [2/6]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inline

Geometric product.

Definition at line 502 of file matrix_multi_imp.h.

References glucat::numeric_traits< Scalar_T >::NaN(), and reframe().

◆ operator*() [3/6]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric product.

Definition at line 277 of file clifford_algebra_imp.h.

◆ operator*() [4/6]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const Scalar_T & scr ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Product of multivector and scalar.

Definition at line 251 of file clifford_algebra_imp.h.

◆ operator*() [5/6]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* ( const Scalar_T & scr,
const Multivector< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Product of scalar and multivector.

Definition at line 262 of file clifford_algebra_imp.h.

◆ operator*() [6/6]

template<typename Scalar_T, const index_t LO, const index_t HI>
auto glucat::operator* ( const std::pair< const index_set< LO, HI >, Scalar_T > & lhs,
const std::pair< const index_set< LO, HI >, Scalar_T > & rhs ) -> const std::pair<const index_set<LO,HI>, Scalar_T>
inline

Product of terms.

Definition at line 1717 of file framed_multi_imp.h.

References crd_of_mult().

◆ operator+() [1/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator+ ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric sum.

Definition at line 206 of file clifford_algebra_imp.h.

◆ operator+() [2/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator+ ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const Scalar_T & scr ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric sum of multivector and scalar.

Definition at line 181 of file clifford_algebra_imp.h.

◆ operator+() [3/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator+ ( const Scalar_T & scr,
const Multivector< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric sum of scalar and multivector.

Definition at line 192 of file clifford_algebra_imp.h.

◆ operator-() [1/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator- ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric difference.

Definition at line 240 of file clifford_algebra_imp.h.

◆ operator-() [2/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator- ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const Scalar_T & scr ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric difference of multivector and scalar.

Definition at line 217 of file clifford_algebra_imp.h.

◆ operator-() [3/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator- ( const Scalar_T & scr,
const Multivector< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric difference of scalar and multivector.

Definition at line 228 of file clifford_algebra_imp.h.

◆ operator/() [1/5]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>
inline

Geometric quotient.

Definition at line 734 of file framed_multi_imp.h.

◆ operator/() [2/5]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

Geometric quotient.

Definition at line 614 of file matrix_multi_imp.h.

References glucat::matrix::isnan(), and reframe().

◆ operator/() [3/5]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Geometric quotient.

Definition at line 374 of file clifford_algebra_imp.h.

◆ operator/() [4/5]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const Scalar_T & scr ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Quotient of multivector and scalar.

Definition at line 348 of file clifford_algebra_imp.h.

◆ operator/() [5/5]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ ( const Scalar_T & scr,
const Multivector< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Quotient of scalar and multivector.

Definition at line 359 of file clifford_algebra_imp.h.

◆ operator<<() [1/5]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator<< ( std::ostream & os,
const framed_multi< Scalar_T, LO, HI, Tune_P > & val ) -> std::ostream&

◆ operator<<() [2/5]

const index_t HI auto glucat::operator<< ( std::ostream & os,
const index_set< LO, HI > & ist ) -> std::ostream &

◆ operator<<() [3/5]

template<const index_t LO, const index_t HI>
auto glucat::operator<< ( std::ostream & os,
const index_set< LO, HI > & ist ) -> std::ostream&

Write out index set.

Definition at line 611 of file index_set_imp.h.

◆ operator<<() [4/5]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator<< ( std::ostream & os,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & val ) -> std::ostream&
inline

Write multivector to output.

Definition at line 955 of file matrix_multi_imp.h.

◆ operator<<() [5/5]

template<typename Scalar_T, const index_t LO, const index_t HI>
auto glucat::operator<< ( std::ostream & os,
const std::pair< const index_set< LO, HI >, Scalar_T > & term ) -> std::ostream&

Write term to output.

Definition at line 1209 of file framed_multi_imp.h.

References glucat::numeric_traits< Scalar_T >::to_double().

◆ operator>>() [1/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator>> ( std::istream & s,
framed_multi< Scalar_T, LO, HI, Tune_P > & val ) -> std::istream&

Read multivector from input.

Definition at line 1248 of file framed_multi_imp.h.

◆ operator>>() [2/3]

template<const index_t LO, const index_t HI>
auto glucat::operator>> ( std::istream & s,
index_set< LO, HI > & ist ) -> std::istream&

Read in index set.

Definition at line 634 of file index_set_imp.h.

◆ operator>>() [3/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator>> ( std::istream & s,
matrix_multi< Scalar_T, LO, HI, Tune_P > & val ) -> std::istream&
inline

Read multivector from input.

Definition at line 966 of file matrix_multi_imp.h.

◆ operator^() [1/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator^ ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

Outer product.

Definition at line 416 of file framed_multi_imp.h.

References _GLUCAT_HASH_SIZE_T, and crd_of_mult().

◆ operator^() [2/4]

template<const index_t LO, const index_t HI>
auto glucat::operator^ ( const index_set< LO, HI > & lhs,
const index_set< LO, HI > & rhs ) -> const index_set<LO,HI>
inline

Symmetric set difference: exclusive or.

Definition at line 161 of file index_set_imp.h.

◆ operator^() [3/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator^ ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inline

Outer product.

Definition at line 543 of file matrix_multi_imp.h.

◆ operator^() [4/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator^ ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Outer product.

Definition at line 292 of file clifford_algebra_imp.h.

◆ operator|() [1/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator| ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>
inline

Transformation via twisted adjoint action.

Definition at line 760 of file framed_multi_imp.h.

◆ operator|() [2/4]

template<const index_t LO, const index_t HI>
auto glucat::operator| ( const index_set< LO, HI > & lhs,
const index_set< LO, HI > & rhs ) -> const index_set<LO,HI>
inline

Set union: or.

Definition at line 211 of file index_set_imp.h.

◆ operator|() [3/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator| ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inline

Transformation via twisted adjoint action.

Definition at line 717 of file matrix_multi_imp.h.

◆ operator|() [4/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator| ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Transformation via twisted adjoint action.

Definition at line 389 of file clifford_algebra_imp.h.

◆ outer_pow()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::outer_pow ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
int rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Outer product power of multivector.

Definition at line 470 of file clifford_algebra_imp.h.

◆ pade_approx()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P, const size_t Size>
static auto glucat::pade_approx ( const std::array< Scalar_T, Size > & numer,
const std::array< Scalar_T, Size > & denom,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & X ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
inlinestatic

Pade' approximation.

Definition at line 1245 of file matrix_multi_imp.h.

Referenced by matrix_sqrt(), and pade_log().

◆ pade_log()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::pade_log ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>
static

◆ pos_mod()

template<typename LHS_T, typename RHS_T>
auto glucat::pos_mod ( LHS_T lhs,
RHS_T rhs ) -> LHS_T
inline

◆ pow() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::pow ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Multivector power of multivector.

Definition at line 446 of file clifford_algebra_imp.h.

References exp(), and log().

◆ pow() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::pow ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
int rhs ) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Integer power of multivector.

Definition at line 407 of file clifford_algebra_imp.h.

Referenced by matrix_sqrt().

◆ pure()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::pure ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Pure part.

Definition at line 505 of file clifford_algebra_imp.h.

◆ quad()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::quad ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Scalar_T quadratic form == (rev(x)*x)(0)

Definition at line 561 of file clifford_algebra_imp.h.

◆ real()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::real ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Real part: synonym for scalar part.

Definition at line 486 of file clifford_algebra_imp.h.

◆ reframe()

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::reframe ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs,
matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs_reframed,
matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs_reframed ) -> const index_set<LO,HI>
inline

Find a common frame for operands of a binary operator.

Definition at line 345 of file matrix_multi_imp.h.

Referenced by operator*(), and operator/().

◆ reverse()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::reverse ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Reversion, eg. {1}*{2} -> {2}*{1}.

Definition at line 545 of file clifford_algebra_imp.h.

◆ scalar()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::scalar ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> Scalar_T
inline

Scalar part.

Definition at line 478 of file clifford_algebra_imp.h.

Referenced by exp(), glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::fast(), and operator<<().

◆ sign_of_square()

auto glucat::sign_of_square ( index_t j) -> int
inline

Square of generator {j}.

Square of generator index j.

Definition at line 963 of file index_set_imp.h.

Referenced by operator<<().

◆ sin() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sin ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Sine of multivector.

Definition at line 979 of file clifford_algebra_imp.h.

References complexifier(), and sin().

◆ sin() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sin ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>

Sine of multivector with specified complexifier.

Definition at line 956 of file clifford_algebra_imp.h.

References check_complex(), and exp().

Referenced by sin(), and tan().

◆ sinh()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sinh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Hyperbolic sine of multivector.

Definition at line 911 of file clifford_algebra_imp.h.

References exp().

Referenced by tanh().

◆ sqrt() [1/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sqrt ( const framed_multi< Scalar_T, LO, HI, Tune_P > & val,
const framed_multi< Scalar_T, LO, HI, Tune_P > & i,
bool prechecked ) -> const framed_multi<Scalar_T,LO,HI,Tune_P>

◆ sqrt() [2/4]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sqrt ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & val,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & i,
bool prechecked ) -> const matrix_multi<Scalar_T,LO,HI,Tune_P>

Square root of multivector with specified complexifier.

Definition at line 1667 of file matrix_multi_imp.h.

References check_complex(), glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::isnan(), and matrix_sqrt().

◆ sqrt() [3/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sqrt ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Square root of multivector.

Definition at line 683 of file clifford_algebra_imp.h.

References complexifier(), and sqrt().

◆ sqrt() [4/4]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sqrt ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Square root of multivector with specified complexifier.

Definition at line 675 of file clifford_algebra_imp.h.

References sqrt().

Referenced by acosh(), asinh(), sqrt(), sqrt(), and sqrt().

◆ star() [1/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::star ( const framed_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const framed_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> Scalar_T

Hestenes scalar product.

Definition at line 684 of file framed_multi_imp.h.

◆ star() [2/3]

template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::star ( const matrix_multi< Scalar_T, LO, HI, Tune_P > & lhs,
const matrix_multi< Scalar_T, LO, HI, Tune_P > & rhs ) -> Scalar_T
inline

Hestenes scalar product.

Definition at line 600 of file matrix_multi_imp.h.

◆ star() [3/3]

template<template< typename, const index_t, const index_t, typename > class Multivector, template< typename, const index_t, const index_t, typename > class RHS, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::star ( const Multivector< Scalar_T, LO, HI, Tune_P > & lhs,
const RHS< Scalar_T, LO, HI, Tune_P > & rhs ) -> Scalar_T
inline

Hestenes scalar product.

Definition at line 337 of file clifford_algebra_imp.h.

References star().

Referenced by star().

◆ tan() [1/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::tan ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Tangent of multivector.

Definition at line 1079 of file clifford_algebra_imp.h.

References complexifier(), and tan().

◆ tan() [2/2]

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::tan ( const Multivector< Scalar_T, LO, HI, Tune_P > & val,
const Multivector< Scalar_T, LO, HI, Tune_P > & i,
const bool prechecked = false ) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Tangent of multivector with specified complexifier.

Definition at line 1060 of file clifford_algebra_imp.h.

References check_complex(), cos(), and sin().

Referenced by tan().

◆ tanh()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::tanh ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const Multivector<Scalar_T,LO,HI,Tune_P>
inline

Hyperbolic tangent of multivector.

Definition at line 1016 of file clifford_algebra_imp.h.

References cosh(), and sinh().

◆ to_demote()

template<typename Scalar_T>
auto glucat::to_demote ( const Scalar_T & val) -> typename numeric_traits<Scalar_T>::demoted::type
inline

Cast to demote.

Definition at line 135 of file scalar_imp.h.

References glucat::numeric_traits< Scalar_T >::to_scalar_t().

◆ to_promote()

template<typename Scalar_T>
auto glucat::to_promote ( const Scalar_T & val) -> typename numeric_traits<Scalar_T>::promoted::type
inline

Cast to promote.

Definition at line 125 of file scalar_imp.h.

References glucat::numeric_traits< Scalar_T >::to_scalar_t().

◆ try_catch() [1/2]

int glucat::try_catch ( intfn f)

Exception catching for functions returning int.

Definition at line 49 of file try_catch.h.

Referenced by glucat::control_t::call(), and glucat::control_t::call().

◆ try_catch() [2/2]

int glucat::try_catch ( intintfn f,
int arg )

Exception catching for functions of int returning int.

Definition at line 64 of file try_catch.h.

◆ vector_part()

template<template< typename, const index_t, const index_t, typename > class Multivector, typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::vector_part ( const Multivector< Scalar_T, LO, HI, Tune_P > & val) -> const std::vector<Scalar_T>
inline

Vector part of multivector, as a vector_t with respect to frame()

Definition at line 529 of file clifford_algebra_imp.h.

Variable Documentation

◆ BITS_PER_SET_VALUE

const index_t glucat::BITS_PER_SET_VALUE = std::numeric_limits<set_value_t>::digits

Number of bits in set_value_t.

Definition at line 103 of file global.h.

Referenced by _GLUCAT_CTAssert().

◆ clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::default_truncation

template<typename Scalar_T, typename Index_Set_T, typename Multivector_T>
const Scalar_T glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::default_truncation = std::numeric_limits<Scalar_T>::epsilon()

Default for truncation.

Definition at line 74 of file clifford_algebra_imp.h.

◆ DEFAULT_HI

const index_t glucat::DEFAULT_HI = index_t(BITS_PER_SET_VALUE / 2)

Default highest index in an index set.

Definition at line 111 of file global.h.

Referenced by _GLUCAT_CTAssert().

◆ l_ln2

const long double glucat::l_ln2 = 0.6931471805599453094172321214581766L
static

Definition at line 44 of file long_double.h.

Referenced by glucat::numeric_traits< Scalar_T >::promoted::ln_2().

◆ l_pi

const long double glucat::l_pi = 3.1415926535897932384626433832795029L
static

Definition at line 43 of file long_double.h.

Referenced by glucat::numeric_traits< Scalar_T >::promoted::pi().

◆ MS_PER_S

const double glucat::MS_PER_S = 1000.0

Timing constant: deprecated here - moved to test/timing.h.

Definition at line 83 of file global.h.

◆ Tuning_Fast_Basis_Max_Count

const unsigned int glucat::Tuning_Fast_Basis_Max_Count = 1

Definition at line 92 of file tuning.h.

◆ Tuning_Fast_CR_Sqrt_Max_Steps

const unsigned int glucat::Tuning_Fast_CR_Sqrt_Max_Steps = 256

Definition at line 88 of file tuning.h.

◆ Tuning_Fast_DB_Sqrt_Max_Steps

const unsigned int glucat::Tuning_Fast_DB_Sqrt_Max_Steps = 256

Definition at line 89 of file tuning.h.

◆ Tuning_Fast_Div_Max_Steps

const unsigned int glucat::Tuning_Fast_Div_Max_Steps = 0

Definition at line 87 of file tuning.h.

◆ Tuning_Fast_Fast_Size_Threshold

const unsigned int glucat::Tuning_Fast_Fast_Size_Threshold = 0

Definition at line 93 of file tuning.h.

◆ Tuning_Fast_Inv_Fast_Dim_Threshold

const unsigned int glucat::Tuning_Fast_Inv_Fast_Dim_Threshold = 0

Definition at line 94 of file tuning.h.

◆ Tuning_Fast_Log_Max_Inner_Steps

const unsigned int glucat::Tuning_Fast_Log_Max_Inner_Steps = 8

Definition at line 91 of file tuning.h.

◆ Tuning_Fast_Log_Max_Outer_Steps

const unsigned int glucat::Tuning_Fast_Log_Max_Outer_Steps = 16

Definition at line 90 of file tuning.h.

◆ Tuning_Fast_Mult_Matrix_Threshold

const unsigned int glucat::Tuning_Fast_Mult_Matrix_Threshold = 0

Definition at line 86 of file tuning.h.

◆ Tuning_Fast_Products_Size_Threshold

const unsigned int glucat::Tuning_Fast_Products_Size_Threshold = 0

Definition at line 95 of file tuning.h.

◆ Tuning_Int_Digits

const unsigned int glucat::Tuning_Int_Digits = std::numeric_limits<int>::digits

Definition at line 36 of file tuning.h.

◆ Tuning_Max_Threshold

const unsigned int glucat::Tuning_Max_Threshold = 1 << Tuning_Int_Digits

Definition at line 37 of file tuning.h.

◆ Tuning_Naive_Basis_Max_Count

const unsigned int glucat::Tuning_Naive_Basis_Max_Count = Tuning_Max_Threshold

Definition at line 65 of file tuning.h.

◆ Tuning_Naive_Fast_Size_Threshold

const unsigned int glucat::Tuning_Naive_Fast_Size_Threshold = Tuning_Max_Threshold

Definition at line 66 of file tuning.h.

◆ Tuning_Naive_Inv_Fast_Dim_Threshold

const unsigned int glucat::Tuning_Naive_Inv_Fast_Dim_Threshold = Tuning_Max_Threshold

Definition at line 67 of file tuning.h.

◆ Tuning_Naive_Mult_Matrix_Threshold

const unsigned int glucat::Tuning_Naive_Mult_Matrix_Threshold = 0

Definition at line 64 of file tuning.h.

◆ Tuning_Slow_Basis_Max_Count

const unsigned int glucat::Tuning_Slow_Basis_Max_Count = 0

Definition at line 42 of file tuning.h.

◆ Tuning_Slow_Fast_Size_Threshold

const unsigned int glucat::Tuning_Slow_Fast_Size_Threshold = Tuning_Max_Threshold

Definition at line 43 of file tuning.h.

◆ Tuning_Slow_Inv_Fast_Dim_Threshold

const unsigned int glucat::Tuning_Slow_Inv_Fast_Dim_Threshold = Tuning_Max_Threshold

Definition at line 44 of file tuning.h.

◆ Tuning_Slow_Mult_Matrix_Threshold

const unsigned int glucat::Tuning_Slow_Mult_Matrix_Threshold = Tuning_Max_Threshold

Definition at line 41 of file tuning.h.

◆ Tuning_Slow_Products_Size_Threshold

const unsigned int glucat::Tuning_Slow_Products_Size_Threshold = Tuning_Max_Threshold

Definition at line 45 of file tuning.h.