girdap is an open source c++11 based object oriented library for multiphysics simulations on self-managed grids
girdap provides object/methods for mesh-based numerical simulations

girdap project is started to enable moving boundary simulations around complex geometries through sharp and continuous interface methods. Sharp interface methods will be facilitated through vertex movement; similar to ALE/overset methods, while continous interface methods will be facilitated through level-set and immersed boundary methods.

The development gives highest priority to local grid hr-adaptation, readability for better code maintenance, flexibility for use in various fields.

See contribute if you are interested in taking a role in the development of girda.

Many open source and commercial software allows an interface that allow the user to change parameters of a numerical algorithm. Even changing boundary conditions of a partial differential equation dynamically is almost impossible. `girdap` is a library equipped with objects and their methods to allow such a flexibility and allows the user to develop their own algorithms through not so complicated i.e. conditional statements and loops.

At this early stage of the development, girdap will remain as a library while it is envisioned to be equipped with a REPL (read-eval-print loop) type command line interpreter, similar to Matlab, for increasing productivity.

Highly Customizable

Use your own numerical algorithm or modify one available according to your needs

Many open source and commercial software allows an interface that allow the user to change parameters of a numerical algorithm. Even changing boundary conditions of a partial differential equation dynamically is almost impossible. `girdap` is a library equipped with objects and their methods to allow such a flexibility and allows the user to develop their own algorithms through not so complicated i.e. conditional statements and loops.

At this early stage of the development, girdap will remain as a library while it is envisioned to be equipped with a REPL (read-eval-print loop) type command line interpreter, similar to Matlab, for increasing productivity.

Anisotropic grid adaptation

"Strategy: Better accuracy through quality grids with hr-adaptation"
It is possible to produce inaccurate results out of a good grid, but it is almost impossible to produce accurate results out of a bad grid.

One of the biggest challenge in mesh-based simulation tools remains to be the need of robust and efficient tools for generating and maintaining quality grids around complex geometries for transient multi-scale problems. Adaptive solution techniques allow us to overcome these challenges. These adaptive strategies include

  • h-adaptation: local mesh refinement through cell splitting/merging
  • r-adaptation: relocating cell vertices

Object oriented & c++11 standards

Mesh-based simulations are very suitable for object oriented programming; where grids, variables are objects of objects; with special purpose. In addition, oop enhances productivity by enhancing readability and maintainance by making it possible to avoid repetition of code blocks.

girdap uses c++11 standars which makes variable declerations and initialization very easy. For example, use of auto with an initiazer removes tedious types;

1
2
3
auto k = 1.2;  // instead of double k=1.2; 
auto b = new Grid(); // instead of Grid* b = new Grid(); 
for (auto c : cells) { /* loop routing */};

Secondly, c++11 standards allows initializaters using curly braces;

1
2
3
double a{1.0, 2.0, 3.0}; // size of a is 3
int b[5] = {1, 2, 3, 4, 5}; //
vector<vector<int > > c = { {1, 2, 3}, {2, 3, 4}, {4, 5, 6} };

Note that initializer_lists can be passed to function as arguments as well;

1
grid->addCell({ {1, 2}, {2, 3}, {3, 4} }); 

Secondly, girdap use template based defition of differential equations. One can represent following equation:

as follows:

1
q->solve( grid->time(rho) + grid->div(rho, vel) - grid->laplace(gamma) - source(s0)) ; 

which is another version of above equation where all terms are moved to right hand side of the equation, as shown below:

Above equation is initiated through the variable to be solved, which is q in this case. Each term is considered to include q with multiplication with the existing parameters. The arguments can be single values; or field variables as well.

The performance is yet to be compared against available popular software.

Tags: overview