54 vector<CellID> tmp(v1.begin(),v1.begin() +
i);
55 tmp.insert(tmp.end(),v2.begin(),v2.end());
56 tmp.insert(tmp.end(),v1.begin() +
i, v1.end());
156 vector<CellID> idsIn,
int dimension,
157 vector<pair<bool,bool>> path) {
166 uint
length = idsIn.size();
177 std::array<uint64_t, 8> children = mpiGrid.mapping.get_all_children(
id);
178 bool hasChildren = ( grid.mapping.get_parent(children[0]) ==
id );
185 if (path.size() > grid.get_refinement_level(
id)) {
188 vector<CellID> myChildren =
getMyChildren(children,dimension,
189 path[grid.get_refinement_level(
id)].first,
190 path[grid.get_refinement_level(
id)].second);
195 length += myChildren.size();
201 for (
bool left : {
true,
false }) {
202 for (
bool up : {
true,
false }) {
205 vector < pair <bool,bool>> myPath = path;
206 myPath.push_back(pair<bool, bool>(up,
left));
211 vector<CellID> remainingIds(idsIn.begin() + i1, idsIn.end());
222 length += myChildren.size();
230 myChildren.insert(myChildren.end(),remainingIds.begin(),remainingIds.end());
232 buildPencils(grid,pencils,idsOut,myChildren,dimension,myPath);
244 idsOut.push_back(
id);
253 pencils.addPencil(idsOut,0.0,0.0);
258int main(
int argc,
char* argv[]) {
260 if (MPI_Init(&argc, &argv) != MPI_SUCCESS) {
265 MPI_Comm comm = MPI_COMM_WORLD;
267 int rank = 0, comm_size = 0;
268 MPI_Comm_rank(comm, &rank);
269 MPI_Comm_size(comm, &comm_size);
271 dccrg::Dccrg<grid_data> grid;
276 const std::array<uint64_t, 3> grid_size = {{xDim,yDim,zDim}};
278 grid.initialize(grid_size, comm,
"RANDOM", 1);
282 bool doRefine =
true;
283 const std::array<uint,4> refinementIds = {{10,14,64,72}};
285 for(uint
i = 0;
i < refinementIds.size();
i++) {
286 if(refinementIds[
i] > 0) {
287 grid.refine_completely(refinementIds[
i]);
288 grid.stop_refining();
295 auto cells = grid.cells;
296 sort(cells.begin(), cells.end());
300 std::cout <<
"Grid size at 0 refinement is " << xDim <<
" x " << yDim <<
" x " << zDim << std::endl;
301 for (
const auto& cell: cells) {
304 ids.push_back(cell.id);
307 CellID parent = grid.mapping.get_parent(cell.id);
309 !(std::find(ids.begin(), ids.end(), parent) != ids.end())) {
310 ids.push_back(parent);
311 std::cout <<
"Cell " << parent <<
" at refinement level " << grid.get_refinement_level(parent) <<
" has been refined into ";
312 for (
const auto& child: grid.mapping.get_all_children(parent)) {
313 std::cout << child <<
" ";
319 sort(ids.begin(),ids.end());
327 switch( dimension ) {
329 dims = {zDim,yDim,xDim};
333 dims = {zDim,xDim,yDim};
337 dims = {yDim,xDim,zDim};
345 map <CellID,CellID> mapping;
348 list < vector < CellID >> unrefinedPencils;
349 std::cout <<
"The unrefined pencils along dimension " << dimension <<
" are:\n";
350 for (uint
i = 0;
i < dims[0];
i++) {
351 for (uint
j = 0;
j < dims[1];
j++) {
352 vector <CellID> unrefinedIds;
353 ibeg = 1 +
i * dims[2] * dims[1] +
j * dims[2];
354 iend = 1 +
i * dims[2] * dims[1] + (
j + 1) * dims[2];
355 for (uint
k = ibeg;
k < iend;
k++) {
356 std::cout << mapping[
k] <<
" ";
357 unrefinedIds.push_back(mapping[
k]);
360 unrefinedPencils.push_back(unrefinedIds);
369 vector<CellID> idsInitial;
370 vector<pair<bool,bool>> path;
373 for (
auto &unrefinedIds : unrefinedPencils ) {
374 pencils =
buildPencils(grid, pencilInitial, idsInitial, unrefinedIds, dimension, path);
377 std::cout <<
"I have created " << pencils.N <<
" pencils along dimension " << dimension <<
":\n";
378 for (uint
i = 0;
i < pencils.N;
i++) {
379 iend += pencils.lengthOfPencils[
i];
380 for (
auto j = pencils.ids.begin() + ibeg;
j != pencils.ids.begin() + iend; ++
j) {
381 std::cout << *
j <<
" ";
387 std::ofstream outfile;
389 grid.write_vtk_file(
"test.vtk");
391 outfile.open(
"test.vtk", std::ofstream::app);
393 outfile <<
"CELL_DATA " << cells.size() << std::endl;
394 outfile <<
"SCALARS id int 1" << std::endl;
395 outfile <<
"LOOKUP_TABLE default" << std::endl;
396 for (
const auto& cell: cells) {
397 outfile << cell.id << std::endl;
setOfPencils buildPencils(dccrg::Dccrg< grid_data > grid, setOfPencils &pencils, vector< CellID > idsOut, vector< CellID > idsIn, int dimension, vector< pair< bool, bool > > path)