31 #ifndef __TSG_BASE_CLASS_HPP
32 #define __TSG_BASE_CLASS_HPP
46 #include "tsgCudaLoadStructures.hpp"
49 #ifndef __TASMANIAN_DOXYGEN_SKIP
52 class BaseCanonicalGrid{
54 BaseCanonicalGrid(AccelerationContext
const *acc) : acceleration(acc), num_dimensions(0), num_outputs(0){}
55 BaseCanonicalGrid(AccelerationContext
const *acc,
int cnum_dimensions,
int cnum_outputs, MultiIndexSet &&cpoints, MultiIndexSet &&cneeded, StorageSet &&cvalues)
56 : acceleration(acc), num_dimensions(cnum_dimensions), num_outputs(cnum_outputs),
57 points(std::forward<MultiIndexSet>(cpoints)), needed(std::forward<MultiIndexSet>(cneeded)),
58 values(std::forward<StorageSet>(cvalues)){}
59 BaseCanonicalGrid(AccelerationContext
const *acc, BaseCanonicalGrid
const &other,
int ibegin,
int iend)
60 : acceleration(acc), num_dimensions(other.num_dimensions), num_outputs(iend - ibegin),
61 points(other.points), needed(other.needed),
62 values((iend - ibegin == other.num_outputs) ? other.values : other.values.splitValues(ibegin, iend))
64 virtual ~BaseCanonicalGrid() =
default;
66 virtual bool isGlobal()
const{
return false; }
67 virtual bool isSequence()
const{
return false; }
69 virtual bool isWavelet()
const{
return false; }
70 virtual bool isFourier()
const{
return false; }
72 int getNumDimensions()
const{
return num_dimensions; }
73 int getNumOutputs()
const{
return num_outputs; }
76 int getNumLoaded()
const{
return (num_outputs == 0) ? 0 : points.getNumIndexes(); }
77 int getNumNeeded()
const{
return needed.getNumIndexes(); }
78 int getNumPoints()
const{
return ((points.empty()) ? needed.getNumIndexes() : points.getNumIndexes()); }
79 const int* getPointIndexes()
const{
return ((points.empty()) ? needed.getIndex(0) : points.getIndex(0)); }
81 virtual void write(std::ostream&,
bool)
const = 0;
83 virtual void getLoadedPoints(
double *x)
const = 0;
84 virtual void getNeededPoints(
double *x)
const = 0;
85 virtual void getPoints(
double *x)
const = 0;
87 virtual void getQuadratureWeights(
double weights[])
const = 0;
88 virtual void getInterpolationWeights(
const double x[],
double weights[])
const = 0;
89 virtual void getDifferentiationWeights(
const double x[],
double weights[])
const = 0;
92 const double* getLoadedValues()
const{
return (points.empty()) ? nullptr : values.getValues(0); }
94 virtual void evaluate(
const double x[],
double y[])
const = 0;
95 virtual void integrate(
double q[],
double *conformal_correction)
const = 0;
96 virtual void differentiate(
const double x[],
double jacobian[])
const = 0;
98 virtual void evaluateBatch(
const double x[],
int num_x,
double y[])
const = 0;
100 virtual void evaluateBatchGPU(
const double[],
int,
double[])
const = 0;
101 virtual void evaluateBatchGPU(
const float[],
int,
float[])
const = 0;
102 virtual void evaluateHierarchicalFunctionsGPU(
const double[],
int,
double[])
const = 0;
103 virtual void evaluateHierarchicalFunctionsGPU(
const float[],
int,
float[])
const = 0;
105 virtual void clearRefinement() = 0;
106 virtual void mergeRefinement() = 0;
108 virtual void beginConstruction() = 0;
109 virtual void writeConstructionData(std::ostream&,
bool)
const = 0;
110 virtual void readConstructionData(std::istream&,
bool) = 0;
111 virtual void loadConstructedPoint(
const double[],
const std::vector<double> &) = 0;
112 virtual void loadConstructedPoint(
const double[],
int,
const double[]) = 0;
113 virtual void finishConstruction() = 0;
115 virtual void evaluateHierarchicalFunctions(
const double x[],
int num_x,
double y[])
const = 0;
116 virtual std::vector<double> getSupport()
const{
return std::vector<double>(
Utils::size_mult(
getNumPoints(), getNumDimensions()), 2.0); }
117 virtual void setHierarchicalCoefficients(
const double c[]) = 0;
118 virtual void integrateHierarchicalFunctions(
double integrals[])
const = 0;
123 AccelerationContext
const *acceleration;
124 int num_dimensions, num_outputs;
125 MultiIndexSet points;
126 MultiIndexSet needed;
133 template<
class Gr
idType>
134 struct GridReaderVersion5{
135 template<
typename iomode>
static std::unique_ptr<BaseCanonicalGrid> read(AccelerationContext
const*, std::istream &){
136 return std::unique_ptr<BaseCanonicalGrid>();
141 template<
class Gr
idType,
typename iomode> std::unique_ptr<GridType> readGridVersion5(AccelerationContext
const *acc, std::istream &is, iomode){
142 return GridReaderVersion5<GridType>::template read<iomode>(acc, is);
TypeOneDRule
Used to specify the one dimensional family of rules that induces the sparse grid.
Definition: tsgEnumerates.hpp:285
void loadNeededValues(std::function< void(double const x[], double y[], size_t thread_id)> model, TasmanianSparseGrid &grid, size_t num_threads)
Loads the current grid with model values, does not perform any refinement.
Definition: tsgLoadNeededValues.hpp:104
size_t size_mult(IntA a, IntB b)
Converts two integer-like variables to size_t and returns the product..
Definition: tsgUtils.hpp:82
Encapsulates the Tasmanian Sparse Grid module.
Definition: TasmanianSparseGrid.hpp:68
ChangeType
Defines the types of acceleration context updates so they can be linked to acceleration cache updates...
Definition: tsgAcceleratedDataStructures.hpp:593
Class and data types used for dynamic construction of Global grids.
Algorithms for manipulating multi-indexes defined by hierarchy rules.