Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
1490 Distributed Octree Mesh Example
Dynamic Distributed Octree Mesh Example
The code for this example is located in
This example creates distributed octree mesh with dynamical modification.
Example contains the grid, which can refine and coarse by some user defined rule.
This example may run in both serial and parallel modes with
NP processes. For parallel run the dynamic load balancing is used.
The main feature of this example is user-defined function, which determines how grid should split and unite. In this example, grid refines around mouse cursor. User should define the function
int cell_should_split(struct grid * g, Cell cell, int level)
which returns 1 if this cell must split to 8 children cells. In addition, user should define the function
int cell_should_unite(struct grid * g, Cell cell)
which returns 1 if cell must unite with 7 neighbors.
After that user must create "struct grid thegrid" object and makes next assignments
thegrid.cell_should_split = cell_should_split; thegrid.cell_should_unite = cell_should_unite;
Main function of Octree is
This function makes all changes with the grid.
First it's check all cells to unite, next check to split.
Example contains the graphic representation of it's workflow.
User must install and configure the
Run with no arguments produces a brief help of example arguments and hotkeys available:
$ ./Octree Command arguments: -n=10x10x1 - grid size -r=0.01 - refine radius -l=2 - refine level Hotkeys: Space - refine grid around mouse cursor f - dump grid to file (see grids folder) x - redistribute grid
as well as the run of the example with the specified default set of parameters.
First go to the Octree folder
$ cd Examples/Octree
Single process run:
Example runs with following command:
In this case example runs on single process and all cells will locate on one process.
User can use 'spacebar' key to calls
gridAMR function, which changes the grid.
Parallel processes run:
User can use mpi to run distribute version of example:
$ mpirun -np 3 ./Octree.
User must activate
USE_MPI key in
In this case grid splits to
Each part located on separate process. Graphic representation draws each part with unique color.
Before redrawing, example transfers information about grid from all processes (slaves) to one process (master).
After that master can redraw the grid.
User still use 'spacebar' key to calls
But in this case user can use 'x' key to make redistribution of grid. User can adjust redistribution settings.