// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include // An initializer of MPI #include // We use exceptions #include #if HAVE_ALBERTA #include #endif #include #if HAVE_UG #include #endif #if HAVE_DUNE_ALUGRID #include #endif #include #include #include #define GRID 2 using namespace Dune; template void printGrid(Grid const& grid) { volatile std::size_t n = 0; Dune::Timer t; for (auto const& entities : elements(grid.leafGridView())) { n += grid.leafIndexSet(0).index(entities[0]); std::cout << "indices = ["; for (std::size_t i = 0; i < entities.size(); ++i) { std::cout << (i > 0 ? ", " : "") << grid.leafIndexSet(i).index(entities[i]); } std::cout << "]\n"; } std::cout << "n = " << n << "\n"; std::cout << "time: " << t.elapsed() << "\n"; } template void printGrid2(Grid const& grid) { volatile std::size_t n = 0; Dune::Timer t; for (auto const& entity : elements(grid.leafGridView())) n += grid.leafIndexSet().index(entity); std::cout << n << "\n"; std::cout << "time: " << t.elapsed() << "\n"; } int main(int argc, char** argv) { MPIHelper::instance(argc, argv); #if GRID == 2 && HAVE_DUNE_ALUGRID FieldVector lower_left = {-1.5, -1.5}; FieldVector bbox = {1.5, 1.5}; std::array num_elements = {2, 2}; using HostGrid = Dune::ALUGrid<2, 2, Dune::simplex, Dune::conforming>; using Factory = StructuredGridBuilder >; GridFactory > gridFactory(3); Factory::createSimplexGrid(gridFactory, lower_left, bbox, num_elements); auto gridPtr = gridFactory.createGrid(); auto& grid = *gridPtr; #elif GRID == 3 && HAVE_ALBERTA assert(argc > 1); std::string filename = argv[1]; using HostGrid = Dune::AlbertaGrid<3,3>; MultiMesh grid(3, filename); grid[0].globalRefine(8); grid[1].globalRefine(8); #else FieldVector lower_left = {-1.5, -1.5, -1.5}; FieldVector bbox = {1.5, 1.5, 1.5}; std::array num_elements = {2, 2, 2}; using HostGrid = YaspGrid<3, EquidistantOffsetCoordinates>; MultiMesh grid(3, lower_left, bbox, num_elements); #endif std::cout << "number of grids = " << grid.size() << "\n"; printGrid2(grid[0]); printGrid(grid); grid[0].globalRefine(2); grid[1].globalRefine(1); printGrid2(grid[0]); printGrid(grid); }