This is a slightly more readable, and therefore incomplete, summary of the changes from the full changelog
4.4.1 is a bugfix release:
- Fixed some issues building BOUT++ on MacOS
- Fixed some issues when installing
- Fixed some issues when downloading SUNDIALS and netCDF C++
- Fixed some out of date documentation
- Some improvements/fixes to the
beuler/snes
solver
4.4.0 is a feature release. The main new features are:
- The CMake support has been expanded, and will replace the autotools build system in the next major release. See the CMake installation instructions for details on building with CMake.
- Output files can now handle
FieldPerp
,std::vector<int>
, andstd::string
, while input options can now handleFieldPerp
. - Output and evolving variables can now have an optional description
- The
boutdata
andboututils
python libraries have been moved to standalone packages. BOUT++ still comes bundled with them as submodules, but you can now install them separately. - Staggered grids now work with
InvertPar
and split flux derivatives. - User code can set default values that override the library's default values.
- Timing information can be output in a table at the end of the run with
time_report:show
- Some basic provenance information tracking has been enabled: each run now generates a random unique ID. Hypnotoad grid files that contain a UUID will also be tracked.
- A new time solver has been added, an adaptive, arbitrary order Adams-Bashforth solver.
- FFTs can use the
FFTW_EXHAUSTIVE
input option.
4.3.3 is a bugfix release:
- Better documentation and tests
- Fix
shiftOutput
for aligned fields - Some improvements to the Python API, including support for Python's
exponentiation operator
**
, and MPI-aware logging - Fix an uninitialised variable in
Delp2
- Bump the version of jinja2 from 2.10 to 2.11
- Fix for some Solvers not always using user preconditioner/Jacobian
- Some minor fixes to the build systems
4.3.2 is a bugfix release:
- Make downloading the submodules a bit nicer, including an option for
using non-bundled versions when using
configure
- Make
dz
in the Python API a property - Make
Div_par_K_Grad_par
check the staggered location of its inputs - Enable split-flux derivatives on staggered fields
- Fix
Grad2_par2
implementation inInvertParCR
- Fix an issue writing
FieldPerp
s - Make it easier to compile the examples with different versions of
BOUT++, plus fixes for the
tokamak-2fluid
example - Fix
Div_par
when using more than one y-guard cell - Fix an issue with text attributes in HDF5 files
4.3.1 is a bugfix release, with a few minor fixes to library code, notably:
- Fix the creation of the
RGN_OUTER_X
region - Several small bugs in the Python API
- Preserve restart files if there's a crash during initialisation
- Fix some segfaults in the PvodeSolver
- Fix some issues with Hypnotoad (see #1783 (friva000))
Other changes are mostly housekeeping changes for the BOUT++ project.
4.3.0 is a big feature release:
Field
s are now "tagged" with their "y-direction": that is, whether they are in field-aligned space or not. This allows us to perform more internal checking, for example, that only field-alignedField3D
s are passed tofromFieldAligned
and that calculations are done in the correct y-direction space. Users may need to callf.setDirectionY(YDirectionType::Aligned)
for aField3D f
to set the direction tag- Add
toFieldAligned
andfromFieldAligned
free functions bout::utils::is_Field
and variants provide simpler methods of checking that input types areField
s in templated code- Many, many more functions and operators support staggering. We're now also much more consistent about checking function arguments have compatible staggered locations
- New
emptyFrom(f)
andzeroFrom(f)
helper functions for creatingField
s either allocated but not initialised, or allocated and initialised to0.0
respectively, while ensuring the result is compatible with theField
f
(same mesh, same staggering, etc.) - Expressions used in input files now have support for unicode, escaping characters and implicit multiplication. See #1333 for more details.
- Internationalisation support, including translations for French, German, Spanish, and Simplified and Traditional Chinese
- Keyword arguments for boundaries in input files, e.g.
dirichlet(1, width=3)
- File-level attributes in output files
- Write more things to output files, including processor indices and parallel transform information
- Complete overhaul of the derivative operators:
- derivative operators can now use native vectorisation where possible, as well parallelisation via OpenMP.
- users can register their own derivative operators and choose them at runtime
- more consistent handling of staggering in all directions and for
all
Field
types - better handling of field-aligned
Field
s
- Various bug fixes for parallel derivative inversions
- Introduced
zstart
andzend
, in preparation for introducing guard cells in the z-direction Options
has several new features:- it can now store
Field
s. This uses an implementation of C++17'sstd::variant
backported to work with C++11. Unfortunately, there are some compilers which have problems (see installation issues for help) Options::isSection
gained the ability to check whether an input argument is a subsection or not- now records the type of the option when used
- gained the
.doc
method which allows documentation to be added as an attribute, which can be recorded in theBOUT.settings
file post-run
- it can now store
- FFTW is now an optional dependency
- A non-Fourier implementation of
Delp2
- A generic linear operator inversion class (see #1439)
Array
,Matrix
andTensor
all gained areallocate
method. This allows dynamic resizing of those objects, but invalidates the existing dataFieldFactory
now has separate parsing and generating stages, so functions can be parsed once and evaluated multiple times (e.g. for time-dependent functions)- Enable communications for simulations with no core, only divertor legs
Coordinates
on staggered grids can now be read from grid files- New
FDDX_U2
implementation - Support for SUNDIALS versions 2.6 to 4.1.0
BoutInitialise
has been pulled apart into separate utility functions under thebout::experimental
namespace so that they can be used individuallyLaplaceCyclic
now acceptsC1
andC2
coefficients which may be differentLaplaceNaulin
may use the DC parts ofC
for faster convergenceLaplaceNaulin
also gained an under-relaxation factor, which may improve convergence and robustness- The
Laplace
solvers gained auses3DCoefs
method. This returnstrue
if the solver can make use ofField3D
coefficients rather than using the DC component of them - A new time
Solver
: Runge-Kutta-Legendre stabilised explicit method,splitrk
. See #1673 for more details - Experimental support for CMake
- Added
HeatFluxSNB
which calculates heat flux using the Shurtz-Nicolai-Busquet (SNB) model. Nonlocal (kinetic) corrections to the Spitzer-Harm collisional heat flux, which become important when the mean free path becomes a small (~1%) fraction of the temperature scale length - The new
BOUT_SCOREP_REGION("name")
will automatically instrument a scope with Score-P if BOUT++ was compiled with Score-P support (see the documentation for more information) NYPE
may be given instead ofNXPE
in input files for decomposing the mesh in(x, y)
- Many fixes and improvements for Hypnotoad:
- Use centred differencing to compute
dx
frompsi
instead of forward differencing - Fix for when the separatrix is exactly on a grid point
- Fix for when the separatrix is very close to the X-point
- Fix computation of
ShiftAngle
- Add a checkbox to the 'Output' tab, which if selected outputs
metrics for orthogonal coordinates (i.e. using
ShiftedMetric
) - We now check what coordinate system was used to generate grid files in Hypnotoad when reading them in BOUT++
- Lots of fixes for non-orthogonal grids (see #1593, #1596, and #1636)
- Use double precision everywhere
- Add option to write y-boundary guard cells
- See here for a complete list
- Use centred differencing to compute
- Many, many more tests! Unit test coverage since v4.2.0 has doubled
- We have begun to move parts of the codebase into a
bout::
namespace. This should help ensure we play nice with other libraries, as well as logically group related things across parts of the codebase
Deprecations:
invert_laplace
: create an instance of aLaplacian
viaLaplacian::create
and use thesetCoef*
andsolve
methods- Karniadakis time
Solver
: the current implementation is very slow and will be removed in 5.0 MsgStack::setPoint
: useMsgStack::push("")
- The following
Mesh
methods were experimental, low-level communication routines that turned out to not be so useful:sendToProc
receiveFromProc
UpXSplitIndex
DownXSplitIndex
sendYOutIndest
sendYOutOutdest
sendYInIndest
sendYInOutdest
irecvYOutIndest
irecvYOutOutdest
irecvYInIndest
irecvYInOutdest
Mesh::XGLOBAL
andMesh::YGLOBAL
: useMesh::getGlobalXIndex
and eitherMesh::getGlobalYIndexNoBoundaries
orMesh::getGlobalYIndex
instead. The former (NoBoundaries
) is a direct replacement forYGLOBAL
, whereas the latter includes the boundaries and so is consistent withXGLOBAL
which does tooLaplacian::setFlags
: useLaplacian::setGlobalFlags
,Laplacian::setInnerBoundaryFlags
andLaplacian::setOuterBoundaryFlags
instead- The staggered parallel differential operators that end
CtoL
orLtoC
(e.g.Div_par_CtoL
,Grad_par_LtoC
): the corresponding versions without the suffix now support staggering. For example, instead ofDiv_par_CtoL(f)
useDiv_par(f, CELL_YLOW)
instead
Removed:
- The
serial
implementation ofparderiv
. Thecyclic
version works both serially and in parallel comm_group
: not used internally and too low-level to be useful- Support for the
scipy
andscientific
netCDF libraries inboututils
has been dropped. These were very slow andscientific
is no longer available Laplace3D
: useLaplacian
instead
4.2.0 is a big feature release:
- Large number of optimisations (as much as 140% faster than v4.1.2!)
- OpenMP in many more places, enables parallelisation in Z (as well as X for FCI)
- Better support for OpenMP, including in Python tools
- Much more versatile region system, allowing arbitrary regions (can e.g. mask certain parts of the domain for most common operations)
- Specialised macro for looping over Fields, handles arbitrary regions, OpenMP parallelisation, while also supporting native vectorisation
- Add support for new region system to many functions
- Better support for staggered grids: many bugfixes and many more functions support setting the location
Coordinates
objects can be created at different locations, through theMesh::getCoordinates
andField::getCoordinates
methods- Support for compiling as a shared library
- Experimental Python API via Cython module
- Arithmetic operators on fields are now generated using Jinja2
- Improved PETSc compatibility (better support out of the box, supports up to 3.9, drops support for versions before 3.4)
- New support classes for 2D/3D arrays (Matrix/Tensor)
- New interface for Options
- Divergence operators for FCI
- Support for attributes in NetCDF files
- Default Laplacian changed to cyclic
- Many C++ modernisation fixes
- New monotonic Hermite spline interpolator
- Better configure experience
- Zoidberg can produce curvilinear grids in all three directions (enables e.g. stellarator geometry. Current version of BOUT++ can't actually handle this yet -- upcoming version!)
- Many more tests, and a better testing framework for the integrated tests
- Some potential memory leaks and null pointer dereferences fixed
Deprecations:
DataIterator
is deprecated in favour of the newRegion
andInd2D/3D/Perp
family. This should not affect user code -- if it does, replacingDataIterator
withauto
should do the right thing in most casesDataFile::writeVar
: useDataFile::addOnce
Field::setName
andField::getName
: just useField::name
directly insteadField::error
andbout_error
: useBoutException
insteadrvector
/rmatrix
/rtensor
families of functions: useMatrix
/Tensor
insteadoperator^(Vector2D/Vector3D)
: usecross()
instead- The derivative function overloads with this order of arguments:
DD?(..., DIFF_METHOD, CELL_LOC, REGION)
. Instead, useDD?(..., CELL_LOC, DIFF_METHOD, REGION)
- Vector derivative function overloads with three separate
outloc_[xyz]
arguments: use the versions with a singleoutloc
argument instead CyclicReduce::setCoefs
andsolve
overloads that takeT[]
orT**
: use the version that takesArray<T>
instead- The
FCI
class constructors that take abool yperiodic
argument: this is no longer supported Mesh::coordinates
is deprecated in favour of the more consistently-namedMesh::getCoordinates
. There is also nowField::getCoordinates
which may be more convenient
Removed functions:
PhysicsModel::addToRestart
andSolver::addToRestart
: userestart.add
directly insteadSolver::addMonitor(MonitorFunc)
: use theMonitor*
overloads instead- The
get/set
array/data
methods in theField
classes: these methods are no longer supported
4.1.0 has some interesting new features:
- A way to cleanly stop simulations either through a stop-file, or via a KILL signal
- User-defined multiple monitors with different frequencies
- Four new boundary iterators for the inner and outer boundaries in double null configurations
- Better handling of 1D/2D Fields
- Dumping the actual settings used during a simulation to a file
- Colour output to highlight warnings/errors, along with options to increase/decrease verbosity
- Configure-time options to enable profiling with Score-P and coverage checking with gcov
- Removal of various functions deprecated in v4.0.0
- An overhauled testing framework with unit tests using GoogleTest
4.0.1 is purely a bug-fix release, with various fixes to some of the python tools, patching several memory leaks, and some important fixes for Intel compilers.