Files
ThirdParty-6/ParaView-5.0.1/VTK/Parallel/Core/vtkProcessGroup.h

135 lines
4.9 KiB
C++

// -*- c++ -*-
/*=========================================================================
Program: Visualization Toolkit
Module: vtkProcessGroup.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
// .NAME vtkProcessGroup - A subgroup of processes from a communicator.
//
// .SECTION Description
//
// This class is used for creating groups of processes. A vtkProcessGroup is
// initialized by passing the controller or communicator on which the group is
// based off of. You can then use the group to subset and reorder the the
// processes. Eventually, you can pass the group object to the
// CreateSubController method of vtkMultiProcessController to create a
// controller for the defined group of processes. You must use the same
// controller (or attached communicator) from which this group was initialized
// with.
//
// .SECTION See Also
// vtkMultiProcessController, vtkCommunicator
//
// .SECTION Thanks
// This class was originally written by Kenneth Moreland (kmorel@sandia.gov)
// from Sandia National Laboratories.
//
#ifndef vtkProcessGroup_h
#define vtkProcessGroup_h
#include "vtkParallelCoreModule.h" // For export macro
#include "vtkObject.h"
class vtkMultiProcessController;
class vtkCommunicator;
class VTKPARALLELCORE_EXPORT vtkProcessGroup : public vtkObject
{
public:
vtkTypeMacro(vtkProcessGroup, vtkObject);
static vtkProcessGroup *New();
virtual void PrintSelf(ostream &os, vtkIndent indent);
// Description:
// Initialize the group to the given controller or communicator. The group
// will be set to contain all of the processes in the controller/communicator
// in the same order.
void Initialize(vtkMultiProcessController *controller);
void Initialize(vtkCommunicator *communicator);
// Description:
// Get the communicator on which this group is based on.
vtkGetObjectMacro(Communicator, vtkCommunicator);
// Description:
// Set the communicator. This has the same effect as Initialize except that
// the contents of the group will not be modified (although they may be
// truncated if the new communicator is smaller than the current group).
// Note that this can lead to an invalid group if there are values in the
// group that are not valid in the new communicator.
void SetCommunicator(vtkCommunicator *communicator);
// Description:
// Returns the size of this group (the number of processes defined in it).
vtkGetMacro(NumberOfProcessIds, int);
// Description:
// Given a position in the group, returns the id of the process in the
// communicator this group is based on. For example, if this group contains
// {6, 2, 8, 1}, then GetProcessId(2) will return 8 and GetProcessId(3) will
// return 1.
int GetProcessId(int pos) { return this->ProcessIds[pos]; }
// Description:
// Get the process id for the local process (as defined by the group's
// communicator). Returns -1 if the local process is not in the group.
int GetLocalProcessId();
// Description:
// Given a process id in the communicator, this method returns its location in
// the group or -1 if it is not in the group. For example, if this group
// contains {6, 2, 8, 1}, then FindProcessId(2) will return 1 and
// FindProcessId(3) will return -1.
int FindProcessId(int processId);
// Description:
// Add a process id to the end of the group (if it is not already in the
// group). Returns the location where the id was stored.
int AddProcessId(int processId);
// Description:
// Remove the given process id from the group (assuming it is in the group).
// All ids to the "right" of the removed id are shifted over. Returns 1
// if the process id was removed, 0 if the process id was not in the group
// in the first place.
int RemoveProcessId(int processId);
// Description:
// Removes all the processes ids from the group, leaving the group empty.
void RemoveAllProcessIds();
// Description:
// Copies the given group's communicator and process ids.
void Copy(vtkProcessGroup *group);
protected:
vtkProcessGroup();
virtual ~vtkProcessGroup();
int *ProcessIds;
int NumberOfProcessIds;
vtkCommunicator *Communicator;
private:
vtkProcessGroup(const vtkProcessGroup &); // Not implemented
void operator=(const vtkProcessGroup &); // Not implemented
};
#endif //vtkProcessGroup_h