File boundary_region.hxx#

Enums

enum class BndryLoc#

Location of boundary.

Values:

enumerator xin#
enumerator xout#
enumerator ydown#
enumerator yup#
enumerator all#
enumerator par_fwd_xin#
enumerator par_bkwd_xin#
enumerator par_fwd_xout#
enumerator par_bkwd_xout#

Variables

constexpr BndryLoc BNDRY_XIN = BndryLoc::xin#
constexpr BndryLoc BNDRY_XOUT = BndryLoc::xout#
constexpr BndryLoc BNDRY_YDOWN = BndryLoc::ydown#
constexpr BndryLoc BNDRY_YUP = BndryLoc::yup#
constexpr BndryLoc BNDRY_ALL = BndryLoc::all#
constexpr BndryLoc BNDRY_PAR_FWD_XIN = BndryLoc::par_fwd_xin#
constexpr BndryLoc BNDRY_PAR_BKWD_XIN = BndryLoc::par_bkwd_xin#
constexpr BndryLoc BNDRY_PAR_FWD_XOUT = BndryLoc::par_fwd_xout#
constexpr BndryLoc BNDRY_PAR_BKWD_XOUT = BndryLoc::par_bkwd_xout#
class BoundaryRegionBase#

Subclassed by BoundaryRegion, BoundaryRegionPar

Public Functions

BoundaryRegionBase() = delete#
inline BoundaryRegionBase(std::string name, Mesh *passmesh = nullptr)#
inline BoundaryRegionBase(std::string name, BndryLoc loc, Mesh *passmesh = nullptr)#
virtual ~BoundaryRegionBase() = default#
virtual void first() = 0#

Move the region iterator to the start.

virtual void next() = 0#

Get the next element in the loop over every element from inside out (in X or Y first)

virtual bool isDone() = 0#

Returns true if outside domain. Can use this with nested nextX, nextY.

Public Members

Mesh *localmesh#

Mesh does this boundary region belongs to.

std::string label#

Label for this boundary region.

BndryLoc location#

Which side of the domain is it on?

bool isParallel = false#

Is this a parallel boundary?

class BoundaryRegion : public BoundaryRegionBase#
#include <boundary_region.hxx>

Describes a region of the boundary, and a means of iterating over it.

Subclassed by BoundaryRegionXIn, BoundaryRegionXOut, BoundaryRegionYDown, BoundaryRegionYUp

Public Functions

BoundaryRegion() = delete#
inline BoundaryRegion(std::string name, BndryLoc loc, Mesh *passmesh = nullptr)#
inline BoundaryRegion(std::string name, int xd, int yd, Mesh *passmesh = nullptr)#
~BoundaryRegion() override = default#
virtual void next1d() = 0#

Loop over the innermost elements.

virtual void nextX() = 0#

Just loop over X.

virtual void nextY() = 0#

Just loop over Y.

Public Members

int x#
int y#

Indices of the point in the boundary.

int bx#
int by#

Direction of the boundary [x+bx][y+by] is going outwards.

int width#

Width of the boundary.

class BoundaryRegionXIn : public BoundaryRegion#

Public Functions

BoundaryRegionXIn(std::string name, int ymin, int ymax, Mesh *passmesh = nullptr)#
virtual void first() override#

Move the region iterator to the start.

virtual void next() override#

Get the next element in the loop over every element from inside out (in X or Y first)

virtual void next1d() override#

Loop over the innermost elements.

virtual void nextX() override#

Just loop over X.

virtual void nextY() override#

Just loop over Y.

virtual bool isDone() override#

Returns true if outside domain. Can use this with nested nextX, nextY.

Private Members

int ys#
int ye#
class BoundaryRegionXOut : public BoundaryRegion#

Public Functions

BoundaryRegionXOut(std::string name, int ymin, int ymax, Mesh *passmesh = nullptr)#
virtual void first() override#

Move the region iterator to the start.

virtual void next() override#

Get the next element in the loop over every element from inside out (in X or Y first)

virtual void next1d() override#

Loop over the innermost elements.

virtual void nextX() override#

Just loop over X.

virtual void nextY() override#

Just loop over Y.

virtual bool isDone() override#

Returns true if outside domain. Can use this with nested nextX, nextY.

Private Members

int ys#
int ye#
class BoundaryRegionYDown : public BoundaryRegion#

Public Functions

BoundaryRegionYDown(std::string name, int xmin, int xmax, Mesh *passmesh = nullptr)#
virtual void first() override#

Move the region iterator to the start.

virtual void next() override#

Get the next element in the loop over every element from inside out (in X or Y first)

virtual void next1d() override#

Loop over the innermost elements.

virtual void nextX() override#

Just loop over X.

virtual void nextY() override#

Just loop over Y.

virtual bool isDone() override#

Returns true if outside domain. Can use this with nested nextX, nextY.

Private Members

int xs#
int xe#
class BoundaryRegionYUp : public BoundaryRegion#

Public Functions

BoundaryRegionYUp(std::string name, int xmin, int xmax, Mesh *passmesh = nullptr)#
virtual void first() override#

Move the region iterator to the start.

virtual void next() override#

Get the next element in the loop over every element from inside out (in X or Y first)

virtual void next1d() override#

Loop over the innermost elements.

virtual void nextX() override#

Just loop over X.

virtual void nextY() override#

Just loop over Y.

virtual bool isDone() override#

Returns true if outside domain. Can use this with nested nextX, nextY.

Private Members

int xs#
int xe#
namespace bout#

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

Usage

#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, bd512@york.ac.uk

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 http://www.gnu.org/licenses/.

Explicit inversion of a 3x3 matrix a

If the matrix is singular (ill conditioned), the determinant is return. Otherwise, an empty std::optional is return

SNB model

namespace globals#

Variables

Mesh *mesh#

Global mesh.

The mesh object.