Skip to content

Releases: boutproject/BOUT-dev

v5.1.1

18 Sep 15:15
a628ec0
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v5.1.0...v5.1.1

v5.1.0

06 Oct 10:03
9445ace
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v5.0.0...v5.1.0

v5.0.0

08 Feb 16:46
d935fa1
Compare
Choose a tag to compare

What's Changed

Read more

BOUT++ v4.4.2

03 Mar 17:52
efb92e9
Compare
Choose a tag to compare

BOUT++ v4.4.1

21 Jan 09:37
43ca9d7
Compare
Choose a tag to compare

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

BOUT++ v4.4.0

06 Aug 18:18
b2b564d
Compare
Choose a tag to compare

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

BOUT++ v4.3.3

29 Jul 15:01
4673b0e
Compare
Choose a tag to compare

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

BOUT++ v4.3.2

21 Oct 09:24
fd0b0e3
Compare
Choose a tag to compare

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

BOUT++ v4.3.1

27 Mar 16:37
38eae3c
Compare
Choose a tag to compare

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.

BOUT++ v4.3.0

25 Oct 14:06
123e774
Compare
Choose a tag to compare

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