BOUT++ Project Plasma simulation in curvilinear coordinate systems https://boutproject.github.io/ Mon, 17 Jun 2024 15:11:30 +0000 Mon, 17 Jun 2024 15:11:30 +0000 Jekyll v3.9.5 BOUT++ v4.3.3 released! <p>Another version of BOUT++ out the door! 4.3.3 is a bugfix release:</p> <ul> <li>Better documentation and tests</li> <li>Fix <code class="language-plaintext highlighter-rouge">shiftOutput</code> for aligned fields</li> <li>Some improvements to the Python API, including support for Python’s exponentiation operator <code class="language-plaintext highlighter-rouge">**</code>, and MPI-aware logging</li> <li>Fix an uninitialised variable in <code class="language-plaintext highlighter-rouge">Delp2</code></li> <li>Bump the version of jinja2 from 2.10 to 2.11</li> <li>Fix for some Solvers not always using user preconditioner/Jacobian</li> <li>Some minor fixes to the build systems</li> </ul> <p>You can download this version from here: <a href="https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.3">https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.3</a> and you can reference this version using the following DOI: <a href="https://doi.org/10.5281/zenodo.5142504">10.5281/zenodo.5142504</a>.</p> Thu, 29 Jul 2021 00:00:00 +0000 https://boutproject.github.io/announcement/2021/07/29/v4.3.3-released.html https://boutproject.github.io/announcement/2021/07/29/v4.3.3-released.html releases announcement BOUT++ v4.3.2 released! <p>I’m happy to announce the release of BOUT++ v4.3.2, which fixes several bugs in the library code, examples and the project infrastructure:</p> <ul> <li>Make downloading the submodules a bit nicer, including an option for using non-bundled versions when using <code class="language-plaintext highlighter-rouge">configure</code></li> <li>Make <code class="language-plaintext highlighter-rouge">dz</code> in the Python API a property</li> <li>Make <code class="language-plaintext highlighter-rouge">Div_par_K_Grad_par</code> check the staggered location of its inputs</li> <li>Enable split-flux derivatives on staggered fields</li> <li>Fix <code class="language-plaintext highlighter-rouge">Grad2_par2</code> implementation in <code class="language-plaintext highlighter-rouge">InvertParCR</code></li> <li>Fix an issue writing <code class="language-plaintext highlighter-rouge">FieldPerp</code>s</li> <li>Make it easier to compile the examples with different versions of BOUT++, plus fixes for the <code class="language-plaintext highlighter-rouge">tokamak-2fluid</code> example</li> <li>Fix <code class="language-plaintext highlighter-rouge">Div_par</code> when using more than one y-guard cell</li> <li>Fix an issue with text attributes in HDF5 files</li> </ul> <p>You can download this version from here: <a href="https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.2">https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.2</a> and you can reference this version using the following DOI: <a href="https://doi.org/10.5281/zenodo.4046792">10.5281/zenodo.4046792</a>.</p> <p>Thanks to everybody who contributed bugfixes and testing for this version, particularly Ben Dudson, Brendan Shanahan, David Schwörer, and John Omotani!</p> Wed, 21 Oct 2020 00:00:00 +0000 https://boutproject.github.io/announcement/2020/10/21/v4.3.2-released.html https://boutproject.github.io/announcement/2020/10/21/v4.3.2-released.html releases announcement BOUT++ v4.3.1 released! <p>These are strange times, but there is a little light: a BOUT++ bugfix release!</p> <p>4.3.1 is a bugfix release, with a few minor fixes to library code, notably:</p> <ul> <li>Fix the creation of the <code class="language-plaintext highlighter-rouge">RGN_OUTER_X</code> region</li> <li>Several small bugs in the Python API</li> <li>Preserve restart files if there’s a crash during initialisation</li> <li>Fix some segfaults in the PvodeSolver</li> <li>Fix some issues with Hypnotoad (see <a href="https://github.com/boutproject/BOUT-dev/pull/1783">#1783</a> (<a href="https://github.com/friva000">friva000</a>))</li> </ul> <p>Other changes are mostly housekeeping changes for the BOUT++ project.</p> <p>Get a tarball and a citation reference from: https://zenodo.org/record/3727089</p> Fri, 27 Mar 2020 00:00:00 +0000 https://boutproject.github.io/announcement/2020/03/27/v4.3.1_released.html https://boutproject.github.io/announcement/2020/03/27/v4.3.1_released.html releases announcement Roadmap for v5.0 <p>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.</p> <p>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.</p> <h3 id="smaller">Smaller</h3> <ul> <li>Integrate <a href="https://fmt.dev">{fmt}</a> and <a href="https://github.com/gabime/spdlog">spdlog</a></li> <li>Namespacing and header moving <ul> <li>Renaming/project layout</li> </ul> </li> <li>Replace <code class="language-plaintext highlighter-rouge">FieldData</code>, <code class="language-plaintext highlighter-rouge">FieldGroup</code> functionality</li> <li>Investigate how much <code class="language-plaintext highlighter-rouge">Vector2D/3D</code> require base-class</li> <li><code class="language-plaintext highlighter-rouge">Timer</code> features and options for default <code class="language-plaintext highlighter-rouge">Monitor</code></li> <li>Remove non-PhysicsModel based solving</li> <li>Remove (deprecated) <code class="language-plaintext highlighter-rouge">invert_laplace</code></li> <li>Standardise all factory methods</li> <li>Improving the Python wrapper <ul> <li>Using Pybind11?</li> </ul> </li> <li><code class="language-plaintext highlighter-rouge">Mesh</code> initialisation</li> <li><code class="language-plaintext highlighter-rouge">Coordinates</code> lazy computation of Christoffel symbols</li> </ul> <h3 id="larger">Larger:</h3> <ul> <li><code class="language-plaintext highlighter-rouge">Solver</code>, <code class="language-plaintext highlighter-rouge">PhysicsModel</code>, <code class="language-plaintext highlighter-rouge">Problem</code> – ownership and interrelatedness <ul> <li>Separate <code class="language-plaintext highlighter-rouge">PhysicsModel</code> virtual for dumping?</li> <li>Fields take the <code class="language-plaintext highlighter-rouge">DataFile</code> and handle writing itself?</li> <li>How to handle dumping both local variables and evolving variables</li> </ul> </li> <li><code class="language-plaintext highlighter-rouge">Mesh</code> rewrite <ul> <li>Simpler API</li> <li>Fewer assumptions</li> <li>More flexible domains</li> <li>New way of specifying branch cuts alongside existing system</li> <li>Non-logically-rectangular meshes</li> <li>Higher-level topology API</li> <li>What is the sufficient abstraction?</li> </ul> </li> <li><code class="language-plaintext highlighter-rouge">Coordinates</code> rewrite <ul> <li>Output/convert to real space for visualisation/field line mapping etc.</li> <li>Real space mapping inside BOUT++</li> <li>New input format for geometry specification</li> </ul> </li> <li>Boundaries rewrite <ul> <li>Regions and operators</li> </ul> </li> <li>File I/O rewrite</li> </ul> Wed, 06 Nov 2019 00:00:00 +0000 https://boutproject.github.io/2019/11/06/v5_roadmap.html https://boutproject.github.io/2019/11/06/v5_roadmap.html BOUT++ v4.3.0 released! <p>I am very happy to announce the release of BOUT++ v4.3.0! This is a feature release and is backwards compatible with v4.2. The headline features are:</p> <ul> <li>New derivatives machinery allows native vectorisation where possible, as well as OpenMP parallelisation</li> <li>We now handle both staggered and field-aligned Fields more consistently, with more checking that operations make sense and are done in the correct space or at the correct location</li> <li>Multiple parallel slices (the new name for “yup” and “ydown”) re-enables 4th-order central differencing in the y-direction</li> <li>Up to 10% faster over v4.2.2!</li> </ul> <p>We have removed a few deprecated features, which you can read in the change summary below.</p> <p>You can read a summary of all the changes and download a tarball here: <a href="https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.0">https://github.com/boutproject/BOUT-dev/releases/tag/v4.3.0</a></p> <p>You can cite this version using this DOI: <a href="https://zenodo.org/record/3518905">https://zenodo.org/record/3518905</a></p> <p>Many thanks for all the people who contributed to this version, including those who submitted bug reports!</p> <p>The plan now for BOUT++ is to start a new major version, with the opportunity to redesign some parts of the library in a potentially backwards incompatible way. We intend to support v4 at least until the release of v5.0, backporting new features where possible, and providing a route for upgrading to the next version. With that in mind, I would like to strongly recommend sticking to v4.3 for production simulations, and only using the “next” branch for development work.</p> Fri, 25 Oct 2019 00:00:00 +0000 https://boutproject.github.io/announcement/2019/10/25/v4.3.0_released.html https://boutproject.github.io/announcement/2019/10/25/v4.3.0_released.html releases announcement BOUT++ v4.2.3 released! <p>I’m happy to announce the release of v4.2.3, a small bugfix release:</p> <ul> <li>Fix Timers double-counting sections</li> <li>Fix cyclic parallel derivative inversion done in wrong space</li> <li>Fix calculation of ShiftAngle (qloop) in Hypnotoad</li> <li>Fix relative paths in makefiles</li> <li>Fix an issue when searching for libraries in configure</li> </ul> <p>You can download a tarball of this release from: https://github.com/boutproject/BOUT-dev/releases/tag/v4.2.3</p> <p>You can cite this release with the following DOI: https://doi.org/10.5281/zenodo.3242507</p> Wed, 23 Oct 2019 00:00:00 +0000 https://boutproject.github.io/announcement/2019/10/23/v4.2.3_released.html https://boutproject.github.io/announcement/2019/10/23/v4.2.3_released.html releases announcement BOUT++ v4.2.2 released! <p>Following hot on the heels of v4.2.1 is the latest release, v4.2.2. This is a bugfix release:</p> <ul> <li>Fix a couple of bugs when updating <code class="language-plaintext highlighter-rouge">Coordinates</code> objects on the mesh</li> <li>Fix a bug in FCI: missed the last point in Z for corner displacements</li> <li>Fix location not being set correctly in LaplaceXZ</li> <li>Fix some bugs in finite volume methods: <ul> <li>Wrong region used in loop</li> <li>Metric component indexed at wrong location</li> <li>Use field-aligned field if necessary</li> </ul> </li> <li>Fix wall-time limit not triggering on all processes</li> <li>Link against libdl if needed for backtrace</li> <li>Provide version numbering for Hypnotoad</li> <li>Small improvements to testing frameworks</li> <li>Various warning fixes</li> </ul> <p>See <a href="https://github.com/boutproject/BOUT-dev/blob/v4.2.2/CHANGELOG.md">CHANGELOG.md</a> for more details. You can download the source tarball from https://github.com/boutproject/BOUT-dev/releases/tag/v4.2.2</p> <p>Note: if you download the source code tarball from GitHub, please download the file BOUT++-v4.2.2.tar.gz rather than the GitHub generated tarballs. This is because the GitHub tarball does not include the submodules.</p> Fri, 01 Mar 2019 00:00:00 +0000 https://boutproject.github.io/announcement/2019/03/01/v4.2.2_released.html https://boutproject.github.io/announcement/2019/03/01/v4.2.2_released.html releases announcement Google Summer of Code Ideas <p>The BOUT++ Project is participating in the Google Summer of Code (GSoC) 2019. GSoC is open to University students aged 18 or over.</p> <p>If you are interested, see https://summerofcode.withgoogle.com/ for more information.</p> <h2 id="ideas-for-projects-with-bout">Ideas for Projects with BOUT++</h2> <p>Here is a non-exhaustive list for suggested projects. We are of course open to ideas for projects not on this list!</p> <ol> <li>Make <a href="https://xarray.pydata.org/en/stable/">xarray</a> work with BOUT++. A <a href="https://github.com/boutproject/xBOUT">proof-of-concept exists</a>, but the majority of the BOUT++ post-processing library needs porting over.</li> <li>Improving the Python wrapper to the C++ API by using e.g. <a href="https://github.com/pybind/pybind11">pybind11</a> or similar.</li> <li>Calling Python from BOUT++. This could use much of the same code (bindings, type conversion) as calling BOUT++ from Python. It would allow input files or physics models to use python expressions to extend the code.</li> <li>Improve user extensibility of the library, by making all factories use the generic factory class. This would allow users to easily add things like solvers and boundary conditions in their physics models, without needing to modify the core library.</li> <li>Self-describing data output format. Make the output data files easier to interpret for generic tools, by including more metadata in a standardised way. This would make the data easier to manipulate and work with. This complements, maybe is part of, the work on xarray.</li> </ol> Wed, 06 Feb 2019 00:00:00 +0000 https://boutproject.github.io/announcement/2019/02/06/GoogleSummerOfCode_ideas.html https://boutproject.github.io/announcement/2019/02/06/GoogleSummerOfCode_ideas.html projects announcement BOUT++ v4.2.1 released! <p>I’m happy to announce a new release of BOUT++: v4.2.1. This is a bugfix release, fixing a small number of issues:</p> <ul> <li>Try to provide some thread safety to msg_stack</li> <li>Fix listing available derivative methods</li> <li>Initialize Coordinates objects in BoutMesh::load()</li> <li>Use localmesh for d2x and d2y, and interpolate them to location</li> <li>Several Hypnotoad fixes</li> <li>Silence remaining warnings on master</li> <li>Fix bugs in boututils.calculus.deriv2D</li> <li>Fix failure of collect() with integer slice argument</li> <li>Fix setCoefs in InvertPar</li> <li>Support BoutOutputs caching option in boutcore fromBoutOutputs</li> <li>Check for nullptr in NcFormat::get/setAttribute</li> <li>Set location in LaplaceCyclic::solve() and DC()</li> </ul> <p>See <a href="https://github.com/boutproject/BOUT-dev/blob/v4.2.1/CHANGELOG.md">CHANGELOG.md</a> for more details. You can download the source tarball from https://github.com/boutproject/BOUT-dev/releases/tag/v4.2.1</p> <p>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.</p> Wed, 23 Jan 2019 00:00:00 +0000 https://boutproject.github.io/announcement/2019/01/23/v4.2.1_released.html https://boutproject.github.io/announcement/2019/01/23/v4.2.1_released.html releases announcement BOUT++ v4.2.0 released! <p>BOUT++ v4.2.0 is a big feature release:</p> <ul> <li>Large number of optimisations (as much as 140% faster than v4.1.2!)</li> <li>OpenMP in many more places, enables parallelisation in Z (as well as X for FCI)</li> <li>Better support for OpenMP, including in Python tools</li> <li>Much more versatile region system, allowing arbitrary regions (can e.g. mask certain parts of the domain for most common operations)</li> <li>Specialised macro for looping over Fields, handles arbitrary regions, OpenMP parallelisation, while also supporting native vectorisation</li> <li>Add support for new region system to many functions</li> <li>Better support for staggered grids: many bugfixes and many more functions support setting the location</li> <li><code class="language-plaintext highlighter-rouge">Coordinates</code> objects can be created at different locations, through the <code class="language-plaintext highlighter-rouge">Mesh::getCoordinates</code> and <code class="language-plaintext highlighter-rouge">Field::getCoordinates</code> methods</li> <li>Support for compiling as a shared library</li> <li>Experimental Python API via Cython module</li> <li>Arithmetic operators on fields are now generated using Jinja2</li> <li>Improved PETSc compatibility (better support out of the box, supports up to 3.9, drops support for versions before 3.4)</li> <li>New support classes for 2D/3D arrays (Matrix/Tensor)</li> <li>New interface for Options</li> <li>Divergence operators for FCI</li> <li>Support for attributes in NetCDF files</li> <li>Default Laplacian changed to cyclic</li> <li>Many C++ modernisation fixes</li> <li>New monotonic Hermite spline interpolator</li> <li>Better configure experience</li> <li>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!)</li> <li>Many more tests, and a better testing framework for the integrated tests</li> <li>Some potential memory leaks and null pointer dereferences fixed</li> </ul> <h3 id="deprecations">Deprecations</h3> <ul> <li><code class="language-plaintext highlighter-rouge">DataIterator</code> is deprecated in favour of the new <code class="language-plaintext highlighter-rouge">Region</code> and <code class="language-plaintext highlighter-rouge">Ind2D/3D/Perp</code> family. This should not affect user code – if it does, replacing <code class="language-plaintext highlighter-rouge">DataIterator</code> with <code class="language-plaintext highlighter-rouge">auto</code> should do the right thing in most cases</li> <li><code class="language-plaintext highlighter-rouge">DataFile::writeVar</code>: use <code class="language-plaintext highlighter-rouge">DataFile::addOnce</code></li> <li><code class="language-plaintext highlighter-rouge">Field::setName</code> and <code class="language-plaintext highlighter-rouge">Field::getName</code>: just use <code class="language-plaintext highlighter-rouge">Field::name</code> directly instead</li> <li><code class="language-plaintext highlighter-rouge">Field::error</code> and <code class="language-plaintext highlighter-rouge">bout_error</code>: use <code class="language-plaintext highlighter-rouge">BoutException</code> instead</li> <li><code class="language-plaintext highlighter-rouge">rvector</code>/<code class="language-plaintext highlighter-rouge">rmatrix</code>/<code class="language-plaintext highlighter-rouge">rtensor</code> families of functions: use <code class="language-plaintext highlighter-rouge">Matrix</code>/<code class="language-plaintext highlighter-rouge">Tensor</code> instead</li> <li><code class="language-plaintext highlighter-rouge">operator^(Vector2D/Vector3D)</code>: use <code class="language-plaintext highlighter-rouge">cross()</code> instead</li> <li>The derivative function overloads with this order of arguments: <code class="language-plaintext highlighter-rouge">DD?(..., DIFF_METHOD, CELL_LOC, REGION)</code>. Instead, use <code class="language-plaintext highlighter-rouge">DD?(..., CELL_LOC, DIFF_METHOD, REGION)</code></li> <li>Vector derivative function overloads with three separate <code class="language-plaintext highlighter-rouge">outloc_[xyz]</code> arguments: use the versions with a single <code class="language-plaintext highlighter-rouge">outloc</code> argument instead</li> <li><code class="language-plaintext highlighter-rouge">CyclicReduce::setCoefs</code> and <code class="language-plaintext highlighter-rouge">solve</code> overloads that take <code class="language-plaintext highlighter-rouge">T[]</code> or <code class="language-plaintext highlighter-rouge">T**</code>: use the version that takes <code class="language-plaintext highlighter-rouge">Array&lt;T&gt;</code> instead</li> <li>The <code class="language-plaintext highlighter-rouge">FCI</code> class constructors that take a <code class="language-plaintext highlighter-rouge">bool yperiodic</code> argument: this is no longer supported</li> <li><code class="language-plaintext highlighter-rouge">Mesh::coordinates</code> is deprecated in favour of the more consistently-named <code class="language-plaintext highlighter-rouge">Mesh::getCoordinates</code>. There is also now <code class="language-plaintext highlighter-rouge">Field::getCoordinates</code> which may be more convenient</li> </ul> <h3 id="removed-functions">Removed functions</h3> <ul> <li><code class="language-plaintext highlighter-rouge">PhysicsModel::addToRestart</code> and <code class="language-plaintext highlighter-rouge">Solver::addToRestart</code>: use <code class="language-plaintext highlighter-rouge">restart.add</code> directly instead</li> <li><code class="language-plaintext highlighter-rouge">Solver::addMonitor(MonitorFunc)</code>: use the <code class="language-plaintext highlighter-rouge">Monitor*</code> overloads instead</li> <li>The <code class="language-plaintext highlighter-rouge">get/set</code> <code class="language-plaintext highlighter-rouge">array/data</code> methods in the <code class="language-plaintext highlighter-rouge">Field</code> classes: these methods are no longer supported</li> </ul> <p>See <a href="https://github.com/boutproject/BOUT-dev/blob/v4.2.0/CHANGELOG.md">CHANGELOG.md</a> for more details. You can download the source tarball from https://github.com/boutproject/BOUT-dev/releases/tag/v4.2.0</p> Wed, 17 Oct 2018 00:00:00 +0000 https://boutproject.github.io/announcement/2018/10/17/v4.2.0_released.html https://boutproject.github.io/announcement/2018/10/17/v4.2.0_released.html releases announcement