Releases: boutproject/BOUT-dev
BOUT++ v4.3.0
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 tofromFieldAlignedand that calculations
are done in the correct y-direction space. Users may need to call
f.setDirectionY(YDirectionType::Aligned)for aField3D fto set
the direction tag- Add
toFieldAlignedandfromFieldAlignedfree functions bout::utils::is_Fieldand variants provide simpler methods of
checking that input types areFields 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 creating
Fields either allocated but not initialised, or allocated and
initialised to0.0respectively, while ensuring the result is
compatible with theFieldf(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
allFieldtypes - better handling of field-aligned
Fields
- derivative operators can now use native vectorisation where
- Various bug fixes for parallel derivative inversions
- Introduced
zstartandzend, in preparation for introducing
guard cells in the z-direction Optionshas several new features:- it can now store
Fields. This uses an implementation
of C++17'sstd::variantbackported to work with
C++11. Unfortunately, there are some compilers which have
problems (see installation issues for help) Options::isSectiongained the ability to check whether an
input argument is a subsection or not- now records the type of the option when used
- gained the
.docmethod 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,MatrixandTensorall gained areallocate
method. This allows dynamic resizing of those objects, but
invalidates the existing dataFieldFactorynow 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 Coordinateson staggered grids can now be read from grid files- New
FDDX_U2implementation - Support for SUNDIALS versions 2.6 to 4.1.0
BoutInitialisehas been pulled apart into separate utility
functions under thebout::experimentalnamespace so that they can
be used individuallyLaplaceCyclicnow acceptsC1andC2coefficients which may be
differentLaplaceNaulinmay use the DC parts ofCfor faster convergenceLaplaceNaulinalso gained an under-relaxation factor, which may
improve convergence and robustness- The
Laplacesolvers gained auses3DCoefsmethod. This returns
trueif the solver can make use ofField3Dcoefficients 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
HeatFluxSNBwhich 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) NYPEmay be given instead ofNXPEin input files for decomposing
the mesh in(x, y)- Many fixes and improvements for Hypnotoad:
- Use centred differencing to compute
dxfrompsiinstead 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. usingShiftedMetric) - 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 aLaplacianvia
Laplacian::createand use thesetCoef*andsolvemethods- Karniadakis time
Solver: the current implementation is very slow
and will be removed in 5.0 MsgStack::setPoint: useMsgStack::push("")- The following
Meshmethods were experimental, low-level
communication routines that turned out to not be so useful:sendToProcreceiveFromProcUpXSplitIndexDownXSplitIndexsendYOutIndestsendYOutOutdestsendYInIndestsendYInOutdestirecvYOutIndestirecvYOutOutdestirecvYInIndestirecvYInOutdest
Mesh::XGLOBALandMesh::YGLOBAL: useMesh::getGlobalXIndexand
eitherMesh::getGlobalYIndexNoBoundariesor
Mesh::getGlobalYIndexinstead. The former (NoBoundaries) is a
direct replacement forYGLOBAL, whereas the latter includes the
boundaries and so is consistent withXGLOBALwhich does tooLaplacian::setFlags: useLaplacian::setGlobalFlags,
Laplacian::setInnerBoundaryFlagsand
Laplacian::setOuterBoundaryFlagsinstead- The staggered parallel differential operators that end
CtoLor
LtoC(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
serialimplementation ofparderiv. Thecyclicversion
works both serially and in parallel comm_group: not used internally and too low-level to be useful- Support for the
scipyandscientificnetCDF libraries in
boututilshas been dropped. These were very slow andscientific
is no longer available Laplace3D: useLaplacianinstead
BOUT++ v4.2.3
This is a bugfix release:
- Add counters to Timers to avoid double-counting sections #1817 (ZedThree)
- Bugfix: cyclic parallel derivative inversion done in wrong space #1807 (ZedThree)
- Add instructions for Ubuntu 16.04 #1690 (dschwoerer)
- Allow relative paths to be followed when making #1670 (johnomotani)
- Update examples/staggered_grid for v4.2 #1645 (johnomotani)
- Add EXTRA_LIBS to LIBS when searching for libraries #1632 (ZedThree)
- Recent fixes/improvements for Travis into master #1627 (ZedThree)
- Bug in calculation of ShiftAngle (qloop) #1626 (bendudson)
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.
BOUT++ v4.2.2
This is a bugfix release:
- Fix a couple of bugs when updating
Coordinatesobjects on the mesh - Fix a bug in FCI: missed the last point in Z for corner
displacements - Fix location not being set correctly in LaplaceXZ
- Fix some bugs in finite volume methods:
- Wrong region used in loop
- Metric component indexed at wrong location
- Use field-aligned field if necessary
- Fix wall-time limit not triggering on all processes
- Link against libdl if needed for backtrace
- Provide version numbering for Hypnotoad
- Small improvements to testing frameworks
- Various warning fixes
BOUT++ v4.2.1
This is a bugfix release, fixing a small number of issues:
- Try to provide some thread safety to msg_stack
- Fix listing available derivative methods
- Initialize Coordinates objects in BoutMesh::load()
- Use localmesh for d2x and d2y, and interpolate them to location
- Several Hypnotoad fixes
- Silence remaining warnings on master
- Fix bugs in boututils.calculus.deriv2D
- Fix failure of collect() with integer slice argument
- Fix setCoefs in InvertPar
- Support BoutOutputs caching option in boutcore fromBoutOutputs
- Check for nullptr in NcFormat::get/setAttribute
- Set location in LaplaceCyclic::solve() and DC()
See CHANGELOG.md for more details
Note: if you download the source code tarball from GitHub, please download the file BOUT++-v4.2.1.tar.gz rather than the GitHub generated tarballs. This is because the GitHub tarball does not include the submodules.
BOUT++ v4.2.0
BOUT++ v4.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
Coordinatesobjects can be created at different locations, through theMesh::getCoordinatesandField::getCoordinatesmethods- 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
DataIteratoris deprecated in favour of the newRegionandInd2D/3D/Perpfamily. This should not affect user code -- if it does, replacingDataIteratorwithautoshould do the right thing in most casesDataFile::writeVar: useDataFile::addOnceField::setNameandField::getName: just useField::namedirectly insteadField::errorandbout_error: useBoutExceptioninsteadrvector/rmatrix/rtensorfamilies of functions: useMatrix/Tensorinsteadoperator^(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 singleoutlocargument instead CyclicReduce::setCoefsandsolveoverloads that takeT[]orT**: use the version that takesArray<T>instead- The
FCIclass constructors that take abool yperiodicargument: this is no longer supported Mesh::coordinatesis deprecated in favour of the more consistently-namedMesh::getCoordinates. There is also nowField::getCoordinateswhich may be more convenient
Removed functions
PhysicsModel::addToRestartandSolver::addToRestart: userestart.adddirectly insteadSolver::addMonitor(MonitorFunc): use theMonitor*overloads instead- The
get/setarray/datamethods in theFieldclasses: these methods are no longer supported
BOUT++ v4.1.2
This is a bug-fix release, fixing the following issues in BOUT++:
- Updates to the documentation
- Added missing
__setitem__andkeysfunctions to python Datafile - Fixed
INVERT_KX_ZEROinserial_triLaplace solver - Fixed incorrect number of guard cells in
serial_triLaplace solver - Fixed Laplacexy examples
- Fixed bug in calculation of non-uniform correction
- Disabled plotting of test-fci-slab when running the integrated tests
- Fixed bug during configure if NetCDF not found
- Fixed typo in bout-runners example input file
BOUT++ v4.1.1
This a bug-fix release for BOUT++ that fixes the following:
- Automatically checkout GoogleTest submodule if necessary
- Fix memory leak in multigrid solver
- Don't pause on showing plot for FCI test by default
- Fix broken integrated tests that aren't run in the test suite
- Initialise some uninitialised variables
- Cleanup all
Arrayinstances at end of simulation - Set boundaries correctly in
Delp2 - Set PYTHONPATH when running tests
- Fix some segfaults caused by
Field3Dmove constructors - Fix some errant newlines when specifying
-qon the command line - Fix some segfaults in
ConditionalOutput - Fix broken links and code blocks in the documentation
BOUT++ v4.1.0
BOUT++ v4.1.0 is a feature release, containing some interesting new features, including:
- 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
This release also represents a major tidy up of the codebase, fixing several hundred warnings, removing unused and unnecessary code, and implementing a better, more comprehensive testing suite.
For a more comprehensive changelog, please see CHANGELOG.md
BOUT++ v4.0.1
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.
BOUT++ 4.0.0
Merge pull request #461 from boutproject/v4.0.0-RC Release v4.0.0