2#ifndef STORMM_ROUNDING_H
3#define STORMM_ROUNDING_H
8#include "Constants/behavior.h"
9#include "Constants/symbol_values.h"
10#include "DataTypes/common_types.h"
11#include "math_enumerators.h"
16using constants::CartesianDimension;
17using constants::UnitCellAxis;
20using symbols::near_to_one_f;
21using symbols::near_to_one_lf;
29template <
typename T> T roundUp(T jagged, T increment);
36template <
typename T> T roundDown(T jagged, T increment);
46std::vector<uint> primeFactors(ullint number,
const std::vector<uint> &primes,
int n_primes = 0);
50std::vector<uint> primeFactorCounts(ullint number,
const std::vector<uint> &primes,
60ulint getSmallestLot(
int element_size,
int increment,
int n_primes = 8);
73ullint nearestFactor(ullint number, ullint target,
const std::vector<uint> &primes,
74 LimitApproach approach,
int n_primes = 0);
83size_t getPaddedMemorySize(
size_t length,
size_t growth_increment,
size_t element_size = 1);
97template <
typename Tcalc>
98Tcalc angleVerification(
const Tcalc costheta,
const Tcalc* crabbc,
const Tcalc* crbccd,
99 const Tcalc* bc,
const Tcalc* scr);
114void partition(
int n,
int pmax,
const std::vector<int> &pref,
const std::vector<int> &dscr,
115 std::vector<int> *result);
117std::vector<int> partition(
int n,
int pmax,
const std::vector<int> &pref,
118 const std::vector<int> &dscr);
139int sanctionedDensityGridDimension(ullint big_product,
const double* invu, UnitCellAxis edge,
140 const std::vector<uint> &primes,
double max_spacing = 1.0);
142int sanctionedDensityGridDimension(ullint big_product,
const double* inv, CartesianDimension edge,
143 const std::vector<uint> &primes,
double max_spacing = 1.0);
149#include "rounding.tpp"