Roadmap for v5.0
BOUT++ has grown organically over the years, and now we want to tidy things up, smooth off rough edges and redesign some important components. Some of these changes will necessarily be backwards-incompatible, and unfortunately may require changes to physics models. Where that is the case, we hope to be able to provide tools to make the changes as easy as possible.
This is a non-exhaustive list of features and changes we would like to implement in the next major release (v5) of BOUT++. We’ve separated the out into “smaller” and “larger”. Smaller changes are those we think should be orthogonal to other items, or won’t require much in the way of designing. Larger changes likely affect many separate parts of the framework, and will require some effort to design them correctly.
Smaller
- Integrate {fmt} and spdlog
- Namespacing and header moving
- Renaming/project layout
- Replace
FieldData
,FieldGroup
functionality - Investigate how much
Vector2D/3D
require base-class Timer
features and options for defaultMonitor
- Remove non-PhysicsModel based solving
- Remove (deprecated)
invert_laplace
- Standardise all factory methods
- Improving the Python wrapper
- Using Pybind11?
Mesh
initialisationCoordinates
lazy computation of Christoffel symbols
Larger:
Solver
,PhysicsModel
,Problem
– ownership and interrelatedness- Separate
PhysicsModel
virtual for dumping? - Fields take the
DataFile
and handle writing itself? - How to handle dumping both local variables and evolving variables
- Separate
Mesh
rewrite- Simpler API
- Fewer assumptions
- More flexible domains
- New way of specifying branch cuts alongside existing system
- Non-logically-rectangular meshes
- Higher-level topology API
- What is the sufficient abstraction?
Coordinates
rewrite- Output/convert to real space for visualisation/field line mapping etc.
- Real space mapping inside BOUT++
- New input format for geometry specification
- Boundaries rewrite
- Regions and operators
- File I/O rewrite