Spring 2013
The following are listed in no particular order. Also note that this is in no way an exhaustive list; feel free to suggest a project of your own.
MUSCL (Monotone Upwind-centered Schemes for Conservation Laws) are implemented in the current revision of AstroBEAR code with a splitting method -- each process first updates the cells along one direction, then does the advance along another direction. In this project, we are planning to decompose the domain of each process and create a thread to do the advance of each of the sub-domains with openMP. Since muti-threading brings in more parallelism to the MUSCL scheme, we expect it will speed up the calculation especially when doing AMR.
To find the most efficient way of distributing the workload among processors/threads is one of the big challenges in high performance computing. Different from other AMR codes that keep the whole AMR grid's tree on each node, AstroBEAR uses a distributed tree structure to manage the AMR tree. With our distributed tree system, a processor only needs to communicate with those processors interacting with it. This makes AstroBEAR less memory expensive and more efficient. In the current version of AstroBEAR code, grids are distributed among processors according to the Hilbert space-filling curve (Details about this approach can be found at AstroBearDetails and Hilbert Curve). The load-balancing algorithm in parallel computing can be understood as a knapsack problem. In this project, we are planning to implement a knapsack distribution algorithm as an alternative to the Hilbert algorithm. The knapsack algorithm will find the optimal way to distribute the grids dynamically among the processors by solving a knapsack problem.