Skip to content
/ BART Public
forked from SlaybaughLab/BART

C++ based finite element radiation transport code framework I created and contributs to.

License

Notifications You must be signed in to change notification settings

wzheng21/BART

 
 

Repository files navigation

Build Status

Bay Area Radiation Transport (BART)

What is BART for?

Bay Area Radiation Transport, AKA BART, is a C++ based research-purpose code for parallel radiation transport computation in nuclear reactor applications. BART is being actively developed at Computational Neutronics group in Nuclear Engineering at University of California, Berkeley.

How do we manage the development?

Documentation

BART documents everything implemented for functionality using doxygen. We believe that we and future developers will be thankful to ourselves for documenting today at some time in the future.

Test-driven development

BART in the restart run is driven by the principle of testing everything necessary. Specifically, we use:

  • Travis CI for continuous integration;
  • CTest for unit testings requiring MPI;
  • Google Test for all other serial unit testings.

Agile management

We are gradually immersing ourselves in the principle of agile management using Jira to improve our BART development tracking.

Who do the hard work?

The development work is led by Dr. Weixiong Zheng and Dr. Rachel Slaybaugh. Graduate students actively involved in the development include:

In the long term, BART will welcome anyone who has a good idea to participating.

What is the rationale behind BART?

BART is a finite element method based code

BART is based off the general purpose finite elment deal.II. It aims to solve first and second-order forms of linear Boltzmann equation for nuclear reactor applications using continuous/discontinuous finite element methods for spatial discretization with existing/developing acceleration methods. BART uses discrete ordinates method for angular discretization.

Parallelism in meshing and linear algebra

BART is using MPI for parallelism. BART is designed for computation on distributed memory system:

  • By utilizing distributed triangulation enabled by p4est library wrapped in deal.II, BART can automatically partition the mesh by however many number of processors requested and distribute the triangulation onto different processors.
  • BART heavily depends on PETSc by utilizing deal.II wrappers of PETSc data structure. Therefore, all the parallel-supported functionalities in PETSc (if wrapped by deal.II) can be invoked by BART. This includes parallel sparse matrix, parallel vectors and parallel preconditioners/algebraic solvers.

General dimensionality

BART was initially implemented for 2D and 3D for parallel computation. In the restart branch, the functionality is generalized to 1D with serial settings.

Meshing capability

Originally, BART was implemented for homogenized mesh using rectangle mesh in 2D and regular cubois mesh in 3D. In the restart branch, some thrilling new features are implemented. Overall, we have:

  • Hyper-rectangular mesh in 1/2/3D;
  • Fuel pin-resolved curvilinear mesh in 2D;
  • Fuel pin-resolved curvilinear mesh in 3D based on extrusion.

The thrilling part is that pin-resolved meshing does not require third-party library, e.g. Cubit and GMSH but rather similar to regular homogenized mesh.

Part of the work also contributes to development version of deal.II.

Install and build

Please check install_build.md for installation and building instructions.

More to read

  • deal.II: general purpose finite element library
  • PETSc: high-performance parallel linear algebra library
  • Doxygen: documentation.
  • p4est: distributed meshing in multi-D.
  • Google Style Guide: consistent code convention.
  • Google Test: efficient unit testing tools.
  • CTest: unit testing tools with Google Test.

About

C++ based finite element radiation transport code framework I created and contributs to.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 96.5%
  • CMake 3.2%
  • Other 0.3%