30                     const size_t global_rank ,
 
   31                     const size_t global_box[][2] ,
 
   34   box[0][0] = global_box[0][0] ; box[0][1] = global_box[0][1] ;
 
   35   box[1][0] = global_box[1][0] ; box[1][1] = global_box[1][1] ;
 
   36   box[2][0] = global_box[2][0] ; box[2][1] = global_box[2][1] ;
 
   39   size_t np = global_size ;
 
   48       const size_t part = ( 0 == ( np % 5 ) ) ? 5 : (
 
   49                           ( 0 == ( np % 3 ) ) ? 3 : 2 );
 
   51       const size_t portion = np / part ;
 
   53       if ( 2 < part || global_rank < ip + portion ) {
 
   54         jip = portion * size_t( 
double( global_rank - ip ) / 
double(portion) );
 
   65     const size_t nb[3] = {
 
   66       box[0][1] - box[0][0] ,
 
   67       box[1][1] - box[1][0] ,
 
   68       box[2][1] - box[2][0] };
 
   70     const int axis = nb[2] > nb[1] ? ( nb[2] > nb[0] ? 2 : 0 )
 
   71                                         : ( nb[1] > nb[0] ? 1 : 0 );
 
   73     box[ axis ][1] = box[ axis ][0] + size_t( 
double(nb[axis]) * ( 
double(jup) / 
double(np) ));
 
   74     box[ axis ][0] = box[ axis ][0] + size_t( 
double(nb[axis]) * ( 
double(jip) / 
double(np) ));
 
   90                                size_t  uses_elem[][2] ,
 
   91                                size_t  owns_node[][2] ,
 
   92                                size_t  uses_node[][2] )
 const 
   98     for ( 
int i = 0 ; i < 3 ; ++i ) {
 
   99       owns_node[i][0] = uses_elem[i][0] ;
 
  100       owns_node[i][1] = uses_elem[i][1] + ( 
m_global_elem_box[i][1] == uses_elem[i][1] ? 1 : 0 );
 
  105     const size_t global_vert[3][2] =
 
  112     for ( 
int i = 0 ; i < 3 ; ++i ) {
 
  113       uses_elem[i][0] = global_vert[i][0] == owns_node[i][0] ? owns_node[i][0] : owns_node[i][0] - 1 ;
 
  114       uses_elem[i][1] = global_vert[i][1] == owns_node[i][1] ? owns_node[i][1] - 1 : owns_node[i][1] ;
 
  118   for ( 
int i = 0 ; i < 3 ; ++i ) {
 
  119     uses_node[i][0] = uses_elem[i][0] ;
 
  120     uses_node[i][1] = uses_elem[i][1] + 1 ;
 
  124     for ( 
int i = 0 ; i < 3 ; ++i ) {
 
  125       owns_node[i][0] = 2 * owns_node[i][0] ;
 
  126       uses_node[i][0] = 2 * uses_node[i][0] ;
 
  127       owns_node[i][1] = 2 * owns_node[i][1] - 1 ;
 
  128       uses_node[i][1] = 2 * uses_node[i][1] - 1 ;
 
  136   const size_t global_size ,
 
  137   const size_t global_rank ,
 
  138   const size_t elem_nx ,
 
  139   const size_t elem_ny ,
 
  140   const size_t elem_nz )
 
  194     size_t elem_box[3][2] , o_node_box[3][2] , u_node_box[3][2] ;
 
  197     local( rank , elem_box , o_node_box , u_node_box );
 
  207         std::cout << 
"BoxElemPart exceeded maximum neighbor count" << std::endl ;
 
  225         std::cout << 
"BoxElemPart exceeded maximum neighbor count" << std::endl ;
 
  236     size_t test_box[3][2] ;
 
  245         std::cout << 
"Box partitioning error" << std::endl ;
 
  251                   << 
" owns_node[" << rank << 
"]{" 
  252                   << 
" [" << o_node_box[0][0] << 
"," << o_node_box[0][1] << 
")" 
  253                   << 
" [" << o_node_box[1][0] << 
"," << o_node_box[1][1] << 
")" 
  254                   << 
" [" << o_node_box[2][0] << 
"," << o_node_box[2][1] << 
")" 
  255                   << 
"}" << std::endl ;
 
  266         std::cout << 
"Box partitioning error" << std::endl ;
 
  272                   << 
" ElemBox[" << rank << 
"]{" 
  273                   << 
" [" << elem_box[0][0] << 
"," << elem_box[0][1] << 
")" 
  274                   << 
" [" << elem_box[1][0] << 
"," << elem_box[1][1] << 
")" 
  275                   << 
" [" << elem_box[2][0] << 
"," << elem_box[2][1] << 
")" 
  276                   << 
"}" << std::endl ;
 
  304                 << 
" error count = " << count << std::endl ;
 
  309   if ( global_node_count != node_count ) {
 
  310     std::cout << 
"Node count = " << global_node_count << 
" overlap error count = " << node_count << std::endl ;
 
  314   if ( 
DecomposeElem == decompose && global_elem_count != elem_count ) {
 
  315     std::cout << 
"Elem count = " << global_elem_count << 
" overlap error count = " << elem_count << std::endl ;
 
  320     for ( 
int i = 0 ; i < 3 ; ++i ) { 
for ( 
int j = 0 ; 
j < 2 ; ++
j ) {
 
  362       << 
" recv node_box {" 
  372       << 
" send node_box {" 
unsigned m_send_node_count
 
unsigned m_send_node_box[PROC_NEIGH_MAX][3][2]
 
KOKKOS_INLINE_FUNCTION size_t global_elem_count() const 
 
unsigned m_owns_node[PROC_NEIGH_MAX][2]
 
unsigned m_uses_elem_box[3][2]
 
void print(std::ostream &s) const 
 
unsigned m_owns_node_count
 
BoxElemPart(const ElemOrder elem_order, const Decompose decompose, const unsigned global_size, const unsigned global_rank, const unsigned elem_nx, const unsigned elem_ny, const unsigned elem_nz)
 
unsigned m_global_elem_box[3][2]
 
KOKKOS_INLINE_FUNCTION size_t box_count(const unsigned box[][2])
 
void box_partition(const unsigned global_size, const unsigned global_rank, const unsigned global_box[][2], unsigned box[][2])
 
KOKKOS_INLINE_FUNCTION void box_intersect(unsigned box[][2], const unsigned boxA[][2], const unsigned boxB[][2])
 
unsigned m_global_node_box[3][2]
 
unsigned m_uses_node_box[3][2]
 
unsigned m_owns_node_box[PROC_NEIGH_MAX][3][2]
 
void local(const unsigned rank, unsigned uses_elem[][2], unsigned owns_node[][2], unsigned uses_node[][2]) const 
 
KOKKOS_INLINE_FUNCTION size_t global_node_count() const 
 
unsigned m_send_node[PROC_NEIGH_MAX][2]