File surfaceiter.hxx#
Defines a class for iterating over flux surfaces (surfaces of constant x)
-
class SurfaceIter#
- #include <surfaceiter.hxx>
Iterates over Y-Z surfaces, optionally distributing work between processors
Example
SurfaceIter si(mesh);
for( si.first(); !si.isDone(); si.next() ) { // Perform operation at x = si.xpos if(si.closed()) { // A closed flux surface (no boundaries in Y) }else { // Open, so boundaries in Y if(si.firstY()) { // Boundary at lower Y on this processor } if(si.lastY()) { // Boundary at upper Y on this processor } } }
Public Functions
-
inline SurfaceIter(Mesh *mesh, bool include_guards = false)#
Constructor, needs a mesh to iterate over
- Parameters:
mesh – [in] The mesh to iterate over
-
int ySize()#
Return the length of the current surface in Y.
-
bool closed()#
Test if the current surface is closed.
-
bool closed(BoutReal &ts)#
Test if the current surface (x = xpos) is closed
- Parameters:
ts – [out] The twist-shift angle by which points are shifted in Z between the end and beginning of Y
-
MPI_Comm communicator()#
Communicator for this surface.
-
int yGlobal(int yloc)#
Return global y index of given local index
yloc
.
-
bool firstY()#
Is this processor at the lower end?
-
bool lastY()#
Is this processor at the upper end?
-
void first()#
Begin iteration.
-
void next()#
Move to next flux surface.
-
bool isDone()#
Are we done iterating?
Public Members
-
int xpos#
X position where iteration is currently at.
-
inline SurfaceIter(Mesh *mesh, bool include_guards = false)#