#include "pargrid.h"
/*@ ex3_freel2g - Free a local to global mapping
Input Parameters:
. data - the structure to be freed
Returns:
void
@*/
void ex3_freel2g(int *data)
{
}
/*@ ex3_loc2glob - Map local row numbers to global row numbers
Input Parameters:
. length - the number of row numbers to map
. req_array - the row numbers to map
. procinfo - the usual processor information
. map - the map to use
Output Parameters:
. ans_array - on exit, the corresponding global row numbers
Returns:
void
Notes:
Only valid for local row numbers that reside on the calling processor
@*/
void ex3_loc2glob(int length,int *req_array,int *ans_array,
BSprocinfo *procinfo, BSmapping *map)
{
int i;
par_grid *grid;
int x_offset, y_offset, l_x_pos, l_y_pos;
grid = (par_grid *) map->vlocal2global;
x_offset = Mxpos(grid,procinfo)*grid->l_num_x;
y_offset = Mypos(grid,procinfo)*grid->l_num_y;
for (i=0;i<length;i++) {
l_x_pos = req_array[i] / grid->l_num_y;
l_y_pos = req_array[i] % grid->l_num_y;
ans_array[i] = ((x_offset+l_x_pos)*grid->worker_y*grid->l_num_y) +
y_offset+l_y_pos;
}
}
/*@ ex3_glob2proc - Map global row numbers to processor id's
Input Parameters:
. length - the number of row numbers to map
. req_array - the row numbers to map
. procinfo - the usual processor information
. map - the map to use
Output Parameters:
. ans_array - on exit, the corresponding processor id's
Returns:
void
@*/
void ex3_glob2proc(int length, int *req_array, int *ans_array,
BSprocinfo *procinfo, BSmapping *map)
{
int i;
par_grid *grid;
int proc_x, proc_y;
grid = (par_grid *) map->vlocal2global;
for (i=0;i<length;i++) {
proc_y = (req_array[i] % (grid->l_num_y*grid->worker_y))
/ grid->l_num_y;
proc_x = (req_array[i] / (grid->l_num_y*grid->worker_y))
/ grid->l_num_x;
ans_array[i] = (proc_y*grid->worker_x) + proc_x;
}
}
/*@ ex3_freeg2l - Free a global to local mapping
Input Parameters:
. data - the structure to be freed
Returns:
void
@*/
void ex3_freeg2l(int *data)
{
}
/*@ ex3_glob2loc - Map global row numbers to local row numbers
Input Parameters:
. length - the number of row numbers to map
. req_array - the row numbers to map
. procinfo - the usual processor information
. map - the map to use
Output Parameters:
. ans_array - on exit, the corresponding local row numbers or
a -1 if the row does not reside on the calling processor
Returns:
void
@*/
void ex3_glob2loc(int length, int *req_array, int *ans_array,
BSprocinfo *procinfo, BSmapping *map)
{
int i;
par_grid *grid;
int x_offset, y_offset, l_x_pos, l_y_pos;
grid = (par_grid *) map->vlocal2global;
x_offset = Mxpos(grid,procinfo)*grid->l_num_x;
y_offset = Mypos(grid,procinfo)*grid->l_num_y;
ex3_glob2proc(length,req_array,ans_array,procinfo,map); CHKERR(0);
for (i=0;i<length;i++) {
if (ans_array[i] != procinfo->my_id) {
ans_array[i] = -1;
} else {
l_y_pos = (req_array[i] % (grid->worker_y*grid->l_num_y)) -
y_offset;
l_x_pos = (req_array[i] / (grid->worker_y*grid->l_num_y)) -
x_offset;
ans_array[i] = (l_x_pos*grid->l_num_y) + l_y_pos;
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1