Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Typedefs | Enumerations | Functions
Gs Namespace Reference

Classes

struct  array
struct  comm
struct  pw_comm_data
struct  pw_data
struct  cr_stage
struct  cr_data
struct  allreduce_data
struct  gs_remote
struct  gs_data

Typedefs

typedef array buffer
typedef int comm_ext
typedef int comm_req
typedef void exec_fun (void *data, gs_mode mode, unsigned vn, gs_dom dom, gs_op op, unsigned transpose, const void *execdata, const struct comm *comm, char *buf)
typedef void fin_fun (void *data)

Enumerations

enum  gs_dom {
  gs_double, gs_float, gs_int, gs_long,
  gs_dom_n
}
enum  gs_op {
  gs_add, gs_mul, gs_min, gs_max,
  gs_bpr, gs_op_n
}
enum  gs_mode { mode_plain, mode_vec, mode_many, mode_dry_run }
enum  gs_method { gs_auto, gs_pairwise, gs_crystal_router, gs_all_reduce }

Functions

void nektar_gs (void *u, gs_dom dom, gs_op op, unsigned transpose, gs_data *gsh, buffer *buf)
gs_datanektar_gs_setup (const long *id, unsigned int n, const struct comm *comm, int unique, gs_method method, int verbose)
void nektar_gs_free (gs_data *gsh)
void nektar_gs_unique (const long *id, unsigned int n, const struct comm *comm)
static gs_dataInit (const Nektar::Array< OneD, long > pId, const LibUtilities::CommSharedPtr &pComm)
 Initialise Gather-Scatter map.
static void Unique (const Nektar::Array< OneD, long > pId, const LibUtilities::CommSharedPtr &pComm)
 Updates pId to negate all-but-one references to each universal ID.
static void Finalise (gs_data *pGsh)
 Deallocates the GSLib mapping data.
static void Gather (Nektar::Array< OneD, NekDouble > pU, gs_op pOp, gs_data *pGsh, Nektar::Array< OneD, NekDouble > pBuffer=NullNekDouble1DArray)
 Performs a gather-scatter operation of the provided values.

Typedef Documentation

typedef array Gs::buffer

Definition at line 56 of file GsLib.hpp.

typedef int Gs::comm_ext

Definition at line 61 of file GsLib.hpp.

typedef int Gs::comm_req

Definition at line 62 of file GsLib.hpp.

typedef void Gs::exec_fun(void *data, gs_mode mode, unsigned vn, gs_dom dom, gs_op op, unsigned transpose, const void *execdata, const struct comm *comm, char *buf)

Definition at line 104 of file GsLib.hpp.

typedef void Gs::fin_fun(void *data)

Definition at line 107 of file GsLib.hpp.

Enumeration Type Documentation

enum Gs::gs_dom
Enumerator:
gs_double 
gs_float 
gs_int 
gs_long 
gs_dom_n 

Definition at line 51 of file GsLib.hpp.

Enumerator:
gs_auto 
gs_pairwise 
gs_crystal_router 
gs_all_reduce 

Definition at line 124 of file GsLib.hpp.

Enumerator:
mode_plain 
mode_vec 
mode_many 
mode_dry_run 

Definition at line 53 of file GsLib.hpp.

enum Gs::gs_op
Enumerator:
gs_add 
gs_mul 
gs_min 
gs_max 
gs_bpr 
gs_op_n 

Definition at line 52 of file GsLib.hpp.

Function Documentation

static void Gs::Finalise ( gs_data *  pGsh)
inlinestatic

Deallocates the GSLib mapping data.

Definition at line 202 of file GsLib.hpp.

References nektar_gs_free().

Referenced by Nektar::LibUtilities::SessionReader::PartitionMesh(), and Nektar::MultiRegions::GlobalLinSysXxt::~GlobalLinSysXxt().

{
#ifdef NEKTAR_USE_MPI
if (pGsh)
{
}
#endif
}
static void Gs::Gather ( Nektar::Array< OneD, NekDouble pU,
gs_op  pOp,
gs_data *  pGsh,
Nektar::Array< OneD, NekDouble pBuffer = NullNekDouble1DArray 
)
inlinestatic
static gs_data* Gs::Init ( const Nektar::Array< OneD, long >  pId,
const LibUtilities::CommSharedPtr pComm 
)
inlinestatic

Initialise Gather-Scatter map.

On each process an array of IDs for each global degree of freedom is supplied which corresponds to a unique numbering of universal degrees of freedom. This is used to initialise the GSLib mapping between process- boundary degrees of freedom on different processes.

Parameters
pIdArray of integers providing universal IDs for each global DOF on the process.
pCommCommunication object used for inter-process communication.
Returns
GSLib data structure containing mapping information.

Definition at line 150 of file GsLib.hpp.

References ASSERTL1, Gs::comm::c, gs_auto, Gs::comm::id, nektar_gs_setup(), and Gs::comm::np.

Referenced by Nektar::MultiRegions::GlobalLinSysXxtFull::AssembleMatrixArrays(), Nektar::MultiRegions::PreconditionerBlock::BlockPreconditioner2D(), Nektar::MultiRegions::PreconditionerBlock::BlockPreconditioner3D(), Nektar::MultiRegions::PreconditionerBlock::BlockPreconditionerHDG(), Nektar::MultiRegions::AssemblyMapCG::CreateGraph(), Nektar::MultiRegions::AssemblyMapCG::SetUpUniversalC0ContMap(), Nektar::MultiRegions::AssemblyMapDG::SetUpUniversalDGMap(), Nektar::MultiRegions::AssemblyMapDG::SetUpUniversalTraceMap(), Nektar::MultiRegions::GlobalLinSysXxtStaticCond::v_AssembleSchurComplement(), Nektar::MultiRegions::PreconditionerLowEnergy::v_BuildPreconditioner(), and Nektar::MultiRegions::AssemblyMapCG::v_LinearSpaceMap().

{
#ifdef NEKTAR_USE_MPI
if (pComm->GetSize() == 1)
{
return 0;
}
LibUtilities::CommMpiSharedPtr vCommMpi = boost::dynamic_pointer_cast<LibUtilities::CommMpi> (pComm);
ASSERTL1(vCommMpi, "Failed to cast MPI Comm object.");
comm vComm;
MPI_Comm_dup(vCommMpi->GetComm(), &vComm.c);
vComm.id = vCommMpi->GetRank();
vComm.np = vCommMpi->GetSize();
return nektar_gs_setup(pId.get(),pId.num_elements(), &vComm, 0, gs_auto, 1);
#else
return 0;
#endif
}
void Gs::nektar_gs ( void *  u,
gs_dom  dom,
gs_op  op,
unsigned  transpose,
gs_data *  gsh,
buffer *  buf 
)

Referenced by Gather().

void Gs::nektar_gs_free ( gs_data *  gsh)

Referenced by Finalise().

gs_data* Gs::nektar_gs_setup ( const long *  id,
unsigned int  n,
const struct comm *  comm,
int  unique,
gs_method  method,
int  verbose 
)

Referenced by Init().

void Gs::nektar_gs_unique ( const long *  id,
unsigned int  n,
const struct comm *  comm 
)

Referenced by Unique().

static void Gs::Unique ( const Nektar::Array< OneD, long >  pId,
const LibUtilities::CommSharedPtr pComm 
)
inlinestatic

Updates pId to negate all-but-one references to each universal ID.

The array of universal IDs corresponding to the process-local DOF are updated such that the ID of only one instance of each universal ID remains positive. This allows the consistent formulation of universally -distributed dot products, for which the contributions of each DOF must be included only once.

Definition at line 180 of file GsLib.hpp.

References ASSERTL1, Gs::comm::c, Gs::comm::id, nektar_gs_unique(), and Gs::comm::np.

Referenced by Nektar::MultiRegions::AssemblyMapCG::SetUpUniversalC0ContMap(), Nektar::MultiRegions::AssemblyMapDG::SetUpUniversalDGMap(), Nektar::MultiRegions::AssemblyMapDG::SetUpUniversalTraceMap(), and Nektar::MultiRegions::AssemblyMapCG::v_LinearSpaceMap().

{
#ifdef NEKTAR_USE_MPI
if (pComm->GetSize() == 1)
{
return;
}
LibUtilities::CommMpiSharedPtr vCommMpi = boost::dynamic_pointer_cast<LibUtilities::CommMpi> (pComm);
ASSERTL1(vCommMpi, "Failed to cast MPI Comm object.");
comm vComm;
vComm.c = vCommMpi->GetComm();
vComm.id = vCommMpi->GetRank();
vComm.np = vCommMpi->GetSize();
nektar_gs_unique(pId.get(), pId.num_elements(), &vComm);
#endif
}