File bout.hxx#


int BoutInitialise(int &argc, char **&argv)

BOUT++ initialisation. This function must be called first, passing command-line arguments.

This will call MPI_Initialize, and if BOUT++ has been configured with external libraries such as PETSc then these will be initialised as well.


A minimal BOUT++ program consists of:

int main(int argc, char** argv) {
  BoutInitialise(argc, argv);

Usually this function is called in a standard main() function, either by including boutmain.hxx or by including bout/physicsmodel.hxx and using the BOUTMAIN macro.

Initialise BOUT++


The command-line arguments argc and argv are passed by reference, and pointers to these will be stored in various places in BOUT++.


Any non-zero return value should halt the simulation. If the return value is less than zero, the exit status from BOUT++ is 0, otherwise it is the return value of BoutInitialise.

int BoutFinalise(bool write_settings = true)

BOUT++ finalisation. This should be called at the end of the program.

Frees memory, flushes buffers, and closes files. If BOUT++ initialised MPI or external libraries, then these are also finalised.

If write_settings is true, output the settings, showing which options were used. This overwrites the file written during initialisation (BOUT.settings by default)

class BoutMonitor : public Monitor#
#include <bout.hxx>

Monitor class for output. Called by the solver every output timestep.

This is added to the solver in bout/physicsmodel.hxx

Public Functions

BoutMonitor(BoutReal timestep = -1)#


Called each timestep by the solver

BoutMonitor(BoutReal timestep, Options &options)#

Private Functions

virtual int call(Solver *solver, BoutReal t, int iter, int NOUT) override#

Callback function for the solver, called after timestep_ has passed

  • solver[in] The solver calling this monitor

  • time[in] The current simulation time

  • iter[in] The current simulation iteration

  • nout[in] The total number of iterations for this simulation


non-zero if simulation should be stopped

Private Members

RunMetrics run_data#
BoutReal wall_limit#

Wall time limit in seconds.

BoutReal mpi_start_time#

Starting time.

bool stop_check#

Stop if file stop_check_name exists.

std::string stop_check_name#

Filename for stop_check

namespace bout

Provides access to the Hypre library, handling initialisation and finalisation.


#include <bout/hyprelib.hxx>

class MyClass { public:

private: HypreLib lib; };

This will then automatically initialise Hypre the first time an object is created, and finalise it when the last object is destroyed.

Copyright 2012 B.D.Dudson, S.Farley, M.V.Umansky, X.Q.Xu

Contact: Ben Dudson,

This file is part of BOUT++.

BOUT++ is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

BOUT++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with BOUT++. If not, see

Information about the version of BOUT++

The build system will update this file on every commit, which may result in files that include it getting rebuilt. Therefore it should be included in as few places as possible

Information about the version of BOUT++

The build system will update this file at configure-time

SNB model

namespace experimental


using SignalHandler = void (*)(int)#

Function type for handling signals.

struct CommandLineArgs#
#include <bout.hxx>

Results of parsing the command line arguments.

Public Members

int verbosity = {4}#
bool color_output = {false}#
std::string data_dir = {"data"}#

Directory for data input/output.

std::string opt_file = {"BOUT.inp"}#

Filename for the options file.

std::string set_file = {"BOUT.settings"}#

Filename for the options file.

std::string log_file = {"BOUT.log"}#

File name for the log file

std::vector<std::string> original_argv#

The original set of command line arguments.

std::vector<std::string> argv#

The “canonicalised” command line arguments, with single-letter arguments expanded