You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.0 KiB
61 lines
2.0 KiB
/*
|
|
* Copyright(C) 1999-2020 National Technology & Engineering Solutions
|
|
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
|
* NTESS, the U.S. Government retains certain rights in this software.
|
|
*
|
|
* See packages/seacas/LICENSE for details
|
|
*/
|
|
|
|
/* Use same ratios as original goals, but adjust based on set sizes. */
|
|
/* Note: mesh stuff only works for division into two sets. */
|
|
|
|
void make_subgoal(double *goal, /* goals for sets */
|
|
double *subgoal, /* goals for subset of sets */
|
|
int nsets, /* number of subsets in one partition */
|
|
int cube_or_mesh, /* 0=> hypercube, d=> d-dimensional mesh */
|
|
int nsets_tot, /* total number of sets to divide into */
|
|
int mesh_dims[3], /* shape of mesh */
|
|
int set, /* which set am I in? */
|
|
double sub_vwgt_sum /* sum of subgraph vertex weights */
|
|
)
|
|
{
|
|
double tweight; /* total weight among all subgoals */
|
|
double ratio; /* scaling factor */
|
|
int index; /* x, y or z location of a processor */
|
|
int sub_nsets; /* largest number of processors in submesh */
|
|
int xstart, xwidth; /* parameters describing submesh */
|
|
int i, j, x; /* loop counters */
|
|
|
|
if (!cube_or_mesh) { /* First do hypercube case. */
|
|
tweight = 0;
|
|
for (j = 0, i = set; i < nsets_tot; i += nsets, j++) {
|
|
subgoal[j] = goal[i];
|
|
tweight += goal[i];
|
|
}
|
|
sub_nsets = nsets_tot / nsets;
|
|
}
|
|
|
|
else {
|
|
if (set == 0) {
|
|
xstart = 0;
|
|
xwidth = mesh_dims[0] - mesh_dims[0] / 2;
|
|
}
|
|
else {
|
|
xwidth = mesh_dims[0] / 2;
|
|
xstart = mesh_dims[0] - mesh_dims[0] / 2;
|
|
}
|
|
i = 0;
|
|
tweight = 0;
|
|
index = xstart;
|
|
for (x = xstart; x < xstart + xwidth; x++) {
|
|
subgoal[i] = goal[index++];
|
|
tweight += subgoal[i++];
|
|
}
|
|
sub_nsets = xwidth;
|
|
}
|
|
|
|
ratio = sub_vwgt_sum / tweight;
|
|
for (i = 0; i < sub_nsets; i++) {
|
|
subgoal[i] *= ratio;
|
|
}
|
|
}
|
|
|