BOUT Dev Versions Save

BOUT++: Plasma fluid finite-difference simulation code in curvilinear coordinate systems

v5.1.0

7 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/boutproject/BOUT-dev/compare/v5.0.0...v5.1.0

v5.0.0

1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/boutproject/BOUT-dev/compare/v4.4.2...v5.0.0

v4.4.2

2 years ago

v4.4.1

2 years ago

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

v4.4.0

2 years ago

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>, and std::string, while input options can now handle FieldPerp.
  • Output and evolving variables can now have an optional description
  • The boutdata and boututils 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.

See the full changelog for more details

v4.3.3

2 years ago

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

v4.3.2

3 years ago

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 in InvertParCR
  • Fix an issue writing FieldPerps
  • 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

v4.3.1

4 years ago

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)

Other changes are mostly housekeeping changes for the BOUT++ project.

v4.3.0

4 years ago

4.3.0 is a big feature release:

  • Fields 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-aligned Field3Ds are passed to fromFieldAligned and that calculations are done in the correct y-direction space. Users may need to call f.setDirectionY(YDirectionType::Aligned) for a Field3D f to set the direction tag
  • Add toFieldAligned and fromFieldAligned free functions
  • bout::utils::is_Field and variants provide simpler methods of checking that input types are Fields 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) and zeroFrom(f) helper functions for creating Fields either allocated but not initialised, or allocated and initialised to 0.0 respectively, while ensuring the result is compatible with the Field 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 Fields
  • Various bug fixes for parallel derivative inversions
  • Introduced zstart and zend, in preparation for introducing guard cells in the z-direction
  • Options has several new features:
    • it can now store Fields. This uses an implementation of C++17's std::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 the BOUT.settings file post-run
  • FFTW is now an optional dependency
  • A non-Fourier implementation of Delp2
  • A generic linear operator inversion class (see #1439)
  • Array, Matrix and Tensor all gained a reallocate method. This allows dynamic resizing of those objects, but invalidates the existing data
  • FieldFactory 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 the bout::experimental namespace so that they can be used individually
  • LaplaceCyclic now accepts C1 and C2 coefficients which may be different
  • LaplaceNaulin may use the DC parts of C for faster convergence
  • LaplaceNaulin also gained an under-relaxation factor, which may improve convergence and robustness
  • The Laplace solvers gained a uses3DCoefs method. This returns true if the solver can make use of Field3D 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 of NXPE in input files for decomposing the mesh in (x, y)
  • Many fixes and improvements for Hypnotoad:
    • Use centred differencing to compute dx from psi 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
  • 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 a Laplacian via Laplacian::create and use the setCoef* and solve methods
  • Karniadakis time Solver: the current implementation is very slow and will be removed in 5.0
  • MsgStack::setPoint: use MsgStack::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 and Mesh::YGLOBAL: use Mesh::getGlobalXIndex and either Mesh::getGlobalYIndexNoBoundaries or Mesh::getGlobalYIndex instead. The former (NoBoundaries) is a direct replacement for YGLOBAL, whereas the latter includes the boundaries and so is consistent with XGLOBAL which does too
  • Laplacian::setFlags: use Laplacian::setGlobalFlags, Laplacian::setInnerBoundaryFlags and Laplacian::setOuterBoundaryFlags instead
  • The staggered parallel differential operators that end CtoL or LtoC (e.g. Div_par_CtoL, Grad_par_LtoC): the corresponding versions without the suffix now support staggering. For example, instead of Div_par_CtoL(f) use Div_par(f, CELL_YLOW) instead

Removed:

  • The serial implementation of parderiv. The cyclic version works both serially and in parallel
  • comm_group: not used internally and too low-level to be useful
  • Support for the scipy and scientific netCDF libraries in boututils has been dropped. These were very slow and scientific is no longer available
  • Laplace3D: use Laplacian instead

v4.2.3

4 years ago

This is a bugfix release:

See CHANGELOG.md for more details

Note: if you download the source code tarball from GitHub, please download the file BOUT++-v4.2.3.tar.gz rather than the GitHub generated tarballs. This is because the GitHub tarball does not include the submodules.