XGC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Public Attributes | List of all members
DomainDecomposition< Device > Class Template Reference

#include <domain_decomposition.hpp>

Collaboration diagram for DomainDecomposition< Device >:
Collaboration graph
[legend]

Public Member Functions

 DomainDecomposition (NLReader::NamelistReader &nlr)
 
 DomainDecomposition (NLReader::NamelistReader &nlr, int nnodes_in)
 
 DomainDecomposition (int nranks_in)
 
void setup_gvid0_pid (NLReader::NamelistReader &nlr, int nnodes_in)
 
void update (int new_f0_inode1)
 
void update_pol_decomp ()
 
void update_flux_surf (const View< int **, CLayout, HostType > &surf_idx, const View< int *, CLayout, HostType > &nnodes_on_surface)
 
KOKKOS_INLINE_FUNCTION int node_to_plane_rank (int node) const
 
KOKKOS_INLINE_FUNCTION void node_to_rank (const SimdGridWeights< Order::Zero, PIT_GLOBAL > &grid_wts0, const Simd< int > &iphi, bool plane_sort_only, Simd< int > &pid) const
 
int node_to_plane_rank_h (int node, int initial_guess) const
 

Public Attributes

int nplanes
 
bool pol_decomp
 Use poloidal decomposition. More...
 
int pe_per_plane
 Processors per plane. More...
 
int plane_totalpe
 Processors per plane? More...
 
int n_pids
 Processors per plane? More...
 
int my_pid
 ID of this processor. More...
 
int my_plane_pid
 Poloidal ID of this processor. More...
 
int plane_index
 Offset of local plane. More...
 
int nnodes_on_plane
 Number of nodes on local plane. More...
 
bool decompose_fields
 Whether to decompose fields. More...
 
FieldDecomposition< Device > field_decomp
 
int node_offset
 Offset of first mesh node belonging to this MPI rank. More...
 
int nnodes
 Number of nodes belonging to this MPI rank. More...
 
Kokkos::View< int
*, Kokkos::LayoutRight,
HostType
gvid0_pid_h
 Which processors get which vertices (host) More...
 
Kokkos::View< int
*, Kokkos::LayoutRight, Device > 
gvid0_pid
 Which processors get which vertices. More...
 
View< int *, CLayout, HostTypesurfs
 Which surfaces are at least partially on this rank. More...
 
View< int *, CLayout, HostTyperanks_sharing_flux_surf
 Which processors share a flux surface with this one. More...
 

Constructor & Destructor Documentation

template<class Device >
DomainDecomposition< Device >::DomainDecomposition ( NLReader::NamelistReader nlr)

Constructor for DomainDecomposition class

template<class Device >
DomainDecomposition< Device >::DomainDecomposition ( NLReader::NamelistReader nlr,
int  nnodes_in 
)

Constructor for DomainDecomposition class

Here is the call graph for this function:

template<class Device >
DomainDecomposition< Device >::DomainDecomposition ( int  nranks_in)

Member Function Documentation

template<class Device >
KOKKOS_INLINE_FUNCTION int DomainDecomposition< Device >::node_to_plane_rank ( int  node) const

Determine which processor a given mesh vertex belongs

Parameters
[in]nodeThe mesh vertex (one indexed)
Returns
The processor the the vertex belongs to
template<class Device >
int DomainDecomposition< Device >::node_to_plane_rank_h ( int  node,
int  initial_guess 
) const
inline

Determine which processor a given mesh vertex belongs, on CPU

Parameters
[in]nodeThe mesh vertex (one indexed)
[in]initial_guessProvide an initial starting guess for the processor rank
Returns
The processor the the vertex belongs to
template<class Device >
KOKKOS_INLINE_FUNCTION void DomainDecomposition< Device >::node_to_rank ( const SimdGridWeights< Order::Zero, PIT_GLOBAL > &  grid_wts0,
const Simd< int > &  iphi,
bool  plane_sort_only,
Simd< int > &  pid 
) const

Here is the caller graph for this function:

template<class Device >
void DomainDecomposition< Device >::setup_gvid0_pid ( NLReader::NamelistReader nlr,
int  nnodes_in 
)

Here is the call graph for this function:

Here is the caller graph for this function:

template<class Device >
void DomainDecomposition< Device >::update ( int  new_f0_inode1)

Update the vertex offset of the local rank with the provided value, then do an allgather to update all ranks

Here is the caller graph for this function:

template<class Device >
void DomainDecomposition< Device >::update_flux_surf ( const View< int **, CLayout, HostType > &  surf_idx,
const View< int *, CLayout, HostType > &  nnodes_on_surface 
)

Update the list of poloidal plane ranks that share a flux surface with this one

template<class Device >
void DomainDecomposition< Device >::update_pol_decomp ( )

Update the poloidal decomposition. Pretty sure that gvid0_pid is the only thing that actually needs to be updated

Here is the caller graph for this function:

Member Data Documentation

template<class Device>
bool DomainDecomposition< Device >::decompose_fields

Whether to decompose fields.

template<class Device>
FieldDecomposition<Device> DomainDecomposition< Device >::field_decomp
template<class Device>
Kokkos::View<int*,Kokkos::LayoutRight,Device> DomainDecomposition< Device >::gvid0_pid

Which processors get which vertices.

template<class Device>
Kokkos::View<int*,Kokkos::LayoutRight,HostType> DomainDecomposition< Device >::gvid0_pid_h

Which processors get which vertices (host)

template<class Device>
int DomainDecomposition< Device >::my_pid

ID of this processor.

template<class Device>
int DomainDecomposition< Device >::my_plane_pid

Poloidal ID of this processor.

template<class Device>
int DomainDecomposition< Device >::n_pids

Processors per plane?

template<class Device>
int DomainDecomposition< Device >::nnodes

Number of nodes belonging to this MPI rank.

template<class Device>
int DomainDecomposition< Device >::nnodes_on_plane

Number of nodes on local plane.

template<class Device>
int DomainDecomposition< Device >::node_offset

Offset of first mesh node belonging to this MPI rank.

template<class Device>
int DomainDecomposition< Device >::nplanes
template<class Device>
int DomainDecomposition< Device >::pe_per_plane

Processors per plane.

template<class Device>
int DomainDecomposition< Device >::plane_index

Offset of local plane.

template<class Device>
int DomainDecomposition< Device >::plane_totalpe

Processors per plane?

template<class Device>
bool DomainDecomposition< Device >::pol_decomp

Use poloidal decomposition.

template<class Device>
View<int*,CLayout,HostType> DomainDecomposition< Device >::ranks_sharing_flux_surf

Which processors share a flux surface with this one.

template<class Device>
View<int*,CLayout,HostType> DomainDecomposition< Device >::surfs

Which surfaces are at least partially on this rank.


The documentation for this class was generated from the following files: