本文整理汇总了C++中GridStorage::dim方法的典型用法代码示例。如果您正苦于以下问题:C++ GridStorage::dim方法的具体用法?C++ GridStorage::dim怎么用?C++ GridStorage::dim使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GridStorage
的用法示例。
在下文中一共展示了GridStorage::dim方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: index
/**
* Descends on all dimensions beside dim_sweep. Class functor for dim_sweep
* Boundaries are not regarded
*
* @param source a DataVector containing the source coefficients of the grid points
* @param result a DataVector containing the result coefficients of the grid points
* @param dim_sweep the dimension in which the functor is executed
*/
void sweep1D(DataVector& source, DataVector& result, size_t dim_sweep) {
// generate a list of all dimension (-dim_sweep)
// from dimension recursion unrolling
std::vector<size_t> dim_list;
for (size_t i = 0; i < storage->dim(); i++) {
if (i != dim_sweep) {
dim_list.push_back(i);
}
}
grid_iterator index(storage);
sweep_rec(source, result, index, dim_list, storage->dim() - 1, dim_sweep);
}
示例2: rec
/**
* Recursive traversal of the "tree" of basis functions for evaluation, used in operator().
* For a given evaluation point \f$x\f$, it stores tuples (std::pair) of
* \f$(i,\phi_i(x))\f$ in the result vector for all basis functions that are non-zero.
*
* @param basis a sparse grid basis
* @param point evaluation point within the domain
* @param current_dim the dimension currently looked at (recursion parameter)
* @param value the value of the evaluation of the current basis function up to (excluding) dimension current_dim (product of the evaluations of the one-dimensional ones)
* @param working iterator working on the GridStorage of the basis
* @param source array of indices for each dimension (identifying the indices of the current grid point)
* @param alpha the spars grid's ansatzfunctions coefficients
* @param result reference to a float_t into which the result should be stored
*/
void rec(BASIS& basis, const DataVector& point, size_t current_dim,
float_t value, GridStorage::grid_iterator& working,
GridStorage::index_type::index_type* source, const DataVector& alpha,
float_t& result) {
typedef GridStorage::index_type::level_type level_type;
typedef GridStorage::index_type::index_type index_type;
const unsigned int BITS_IN_BYTE = 8;
// maximum possible level for the index type
const level_type max_level = static_cast<level_type> (
sizeof(index_type) * BITS_IN_BYTE - 1);
index_type src_index = source[current_dim];
level_type work_level = 1;
while (true) {
size_t seq = working.seq();
if (storage->end(seq)) {
break;
} else {
index_type work_index;
level_type temp;
working.get(current_dim, temp, work_index);
float_t new_value = basis.eval(work_level, work_index,
point[current_dim]);
new_value *= value;
if (current_dim == storage->dim() - 1) {
result += (alpha[seq] * new_value);
} else {
rec(basis, point, current_dim + 1, new_value,
working, source, alpha, result);
}
}
if (working.hint()) {
break;
}
// this decides in which direction we should descend by evaluating
// the corresponding bit
// the bits are coded from left to right starting with level 1
// being in position max_level
bool right = (src_index & (1 << (max_level - work_level))) > 0;
++work_level;
if (right) {
working.rightChild(current_dim);
} else {
working.leftChild(current_dim);
}
}
working.resetToLevelOne(current_dim);
}
示例3: main
int main() {
// create a two-dimensional piecewise bilinear grid
size_t dim = 2;
Grid* grid = Grid::createLinearGrid(dim);
GridStorage* gridStorage = grid->getStorage();
std::cout << "dimensionality: " << gridStorage->dim() << std::endl;
// create regular grid, level 3
size_t level = 3;
GridGenerator* gridGen = grid->createGridGenerator();
gridGen->regular(level);
std::cout << "number of initial grid points: " << gridStorage->size() << std::endl;
// create coefficient vector
DataVector alpha(gridStorage->size());
alpha.setAll(0.0);
std::cout << "length of alpha vector: " << alpha.getSize() << std::endl;
GridIndex* gp;
// refine adaptively 5 times
for (int step = 0; step < 5; step++) {
// set function values in alpha
for (size_t i = 0; i < gridStorage->size(); i++) {
gp = gridStorage->get(i);
alpha[i] = f(gp->getCoord(0), gp->getCoord(1));
}
// hierarchize
SGPP::op_factory::createOperationHierarchisation(*grid)->doHierarchisation(
alpha);
// refine a single grid point each time
gridGen->refine(new SurplusRefinementFunctor(&alpha, 1));
std::cout << "refinement step " << step + 1 << ", new grid size: " << alpha.getSize()
<< std::endl;
// extend alpha vector (new entries uninitialized)
alpha.resize(gridStorage->size());
}
delete grid;
}
示例4: testHierarchisationDehierarchisation
void testHierarchisationDehierarchisation(SGPP::base::Grid* grid, size_t level,
SGPP::float_t (*func)(DataVector&),
SGPP::float_t tolerance = 0.0, bool naiveOp = false,
bool doStretch = false) {
GridGenerator* gridGen = grid->createGridGenerator();
gridGen->regular(level);
GridStorage* gridStore = grid->getStorage();
size_t dim = gridStore->dim();
Stretching* stretch = NULL;
if (doStretch) stretch = gridStore->getStretching();
DataVector node_values = DataVector(gridStore->size());
DataVector coords = DataVector(dim);
for (size_t n = 0; n < gridStore->size(); n++) {
if (doStretch) {
gridStore->get(n)->getCoordsStretching(coords, *stretch);
} else {
gridStore->get(n)->getCoords(coords);
}
node_values[n] = func(coords);
}
DataVector alpha = DataVector(node_values);
OperationHierarchisation* hierarchisation =
SGPP::op_factory::createOperationHierarchisation(*grid);
hierarchisation->doHierarchisation(alpha);
if (naiveOp == true) {
OperationNaiveEval* op = SGPP::op_factory::createOperationNaiveEval(*grid);
for (size_t n = 0; n < gridStore->size(); n++) {
if (doStretch) {
gridStore->get(n)->getCoordsStretching(coords, *stretch);
} else {
gridStore->get(n)->getCoords(coords);
}
SGPP::float_t eval = op->eval(alpha, coords);
BOOST_CHECK_CLOSE(eval, node_values[n], tolerance);
}
} else {
OperationEval* op = SGPP::op_factory::createOperationEval(*grid);
for (size_t n = 0; n < gridStore->size(); n++) {
if (doStretch) {
gridStore->get(n)->getCoordsStretching(coords, *stretch);
} else {
gridStore->get(n)->getCoords(coords);
}
SGPP::float_t eval = op->eval(alpha, coords);
BOOST_CHECK_CLOSE(eval, node_values[n], tolerance);
}
}
DataVector node_values_back = DataVector(alpha);
hierarchisation->doDehierarchisation(node_values_back);
for (size_t n = 0; n < gridStore->size(); n++) {
BOOST_CHECK_CLOSE(node_values_back[n], node_values[n], tolerance);
}
}