2017-04-26 17:20:15 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Copyright (c) 1994 Stanford University */
|
|
|
|
/* */
|
|
|
|
/* All rights reserved. */
|
|
|
|
/* */
|
|
|
|
/* Permission is given to use, copy, and modify this software for any */
|
|
|
|
/* non-commercial purpose as long as this copyright notice is not */
|
|
|
|
/* removed. All other uses, including redistribution in whole or in */
|
|
|
|
/* part, are forbidden without prior written permission. */
|
|
|
|
/* */
|
|
|
|
/* This software is provided with absolutely no warranty and no */
|
|
|
|
/* support. */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
EXTERN_ENV
|
|
|
|
|
2017-04-26 18:03:02 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <math.h>
|
2017-04-26 17:20:15 +02:00
|
|
|
#include "decs.h"
|
|
|
|
|
|
|
|
void subblock()
|
|
|
|
|
|
|
|
{
|
|
|
|
long i;
|
|
|
|
long j;
|
|
|
|
long k;
|
|
|
|
long xportion;
|
|
|
|
long xextra;
|
|
|
|
long yportion;
|
|
|
|
long yextra;
|
|
|
|
long my_num;
|
|
|
|
|
|
|
|
/* Determine starting coord and number of points to process in */
|
|
|
|
/* each direction */
|
|
|
|
|
|
|
|
for (i=0;i<numlev;i++) {
|
|
|
|
xportion = (jmx[i] - 2) / xprocs;
|
|
|
|
xextra = (jmx[i] - 2) % xprocs;
|
|
|
|
for (j=0;j<xprocs;j++) {
|
|
|
|
for (k=0;k<yprocs;k++) {
|
|
|
|
gp[k*xprocs+j].rel_num_x[i] = xportion;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
yportion = (imx[i] - 2) / yprocs;
|
|
|
|
yextra = (imx[i] - 2) % yprocs;
|
|
|
|
for (j=0;j<yprocs;j++) {
|
|
|
|
for (k=0;k<xprocs;k++) {
|
|
|
|
gp[j*xprocs+k].rel_num_y[i] = yportion;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (my_num=0;my_num<nprocs;my_num++) {
|
|
|
|
for (i=0;i<numlev;i++) {
|
|
|
|
gp[my_num].rlist[i] = 1;
|
|
|
|
gp[my_num].rljst[i] = 1;
|
|
|
|
gp[my_num].rlien[i] = gp[my_num].rlist[i] + gp[my_num].rel_num_y[i];
|
|
|
|
gp[my_num].rljen[i] = gp[my_num].rljst[i] + gp[my_num].rel_num_x[i];
|
|
|
|
gp[my_num].eist[i] = gp[my_num].rlist[i] + 1;
|
|
|
|
gp[my_num].oist[i] = gp[my_num].rlist[i];
|
|
|
|
gp[my_num].ejst[i] = gp[my_num].rljst[i] + 1;
|
|
|
|
gp[my_num].ojst[i] = gp[my_num].rljst[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (i=0;i<nprocs;i++) {
|
|
|
|
gp[i].neighbors[LEFT] = -1;
|
|
|
|
gp[i].neighbors[RIGHT] = -1;
|
|
|
|
gp[i].neighbors[UP] = -1;
|
|
|
|
gp[i].neighbors[DOWN] = -1;
|
|
|
|
gp[i].neighbors[UPLEFT] = -1;
|
|
|
|
gp[i].neighbors[UPRIGHT] = -1;
|
|
|
|
gp[i].neighbors[DOWNLEFT] = -1;
|
|
|
|
gp[i].neighbors[DOWNRIGHT] = -1;
|
|
|
|
if (i >= xprocs) {
|
|
|
|
gp[i].neighbors[UP] = i-xprocs;
|
|
|
|
}
|
|
|
|
if (i < nprocs-xprocs) {
|
|
|
|
gp[i].neighbors[DOWN] = i+xprocs;
|
|
|
|
}
|
|
|
|
if ((i % xprocs) > 0) {
|
|
|
|
gp[i].neighbors[LEFT] = i-1;
|
|
|
|
}
|
|
|
|
if ((i % xprocs) < (xprocs-1)) {
|
|
|
|
gp[i].neighbors[RIGHT] = i+1;
|
|
|
|
}
|
|
|
|
j = gp[i].neighbors[UP];
|
|
|
|
if (j != -1) {
|
|
|
|
if ((j % xprocs) > 0) {
|
|
|
|
gp[i].neighbors[UPLEFT] = j-1;
|
|
|
|
}
|
|
|
|
if ((j % xprocs) < (xprocs-1)) {
|
|
|
|
gp[i].neighbors[UPRIGHT] = j+1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
j = gp[i].neighbors[DOWN];
|
|
|
|
if (j != -1) {
|
|
|
|
if ((j % xprocs) > 0) {
|
|
|
|
gp[i].neighbors[DOWNLEFT] = j-1;
|
|
|
|
}
|
|
|
|
if ((j % xprocs) < (xprocs-1)) {
|
|
|
|
gp[i].neighbors[DOWNRIGHT] = j+1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (i=0;i<nprocs;i++) {
|
|
|
|
gp[i].rownum = i/xprocs;
|
|
|
|
gp[i].colnum = i%xprocs;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|