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.
45 lines
1.7 KiB
45 lines
1.7 KiB
/*
|
|
* Copyright(C) 1999-2020, 2022, 2023 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
|
|
*/
|
|
|
|
#include "defs.h" // for TRUE
|
|
#include "smalloc.h" // for sfree, smalloc
|
|
#include "structs.h"
|
|
|
|
void inertial1d(struct vtx_data **graph, /* graph data structure */
|
|
int nvtxs, /* number of vtxs in graph */
|
|
int cube_or_mesh, /* 0 => hypercube, d => d-dimensional mesh */
|
|
int nsets, /* number of sets to divide into */
|
|
float *x, /* x coordinates of vertices */
|
|
int *sets, /* set each vertex gets assigned to */
|
|
double *goal, /* desired set sizes */
|
|
int using_vwgts /* are vertex weights being used? */
|
|
)
|
|
{
|
|
extern double median_time; /* time to find medians */
|
|
double *value; /* values passed to median routine */
|
|
double time; /* timing variables */
|
|
int *space; /* space required by median routine */
|
|
int i; /* loop counter */
|
|
|
|
value = smalloc((nvtxs + 1) * sizeof(double));
|
|
|
|
/* Copy values into double precision array. */
|
|
for (i = 1; i <= nvtxs; i++) {
|
|
value[i] = x[i];
|
|
}
|
|
|
|
/* Now find the median value and partition based upon it. */
|
|
space = smalloc(nvtxs * sizeof(int));
|
|
|
|
time = seconds();
|
|
rec_median_1(graph, value, nvtxs, space, cube_or_mesh, nsets, goal, using_vwgts, sets, TRUE);
|
|
median_time += seconds() - time;
|
|
|
|
sfree(space);
|
|
sfree(value);
|
|
}
|
|
|