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.
64 lines
2.6 KiB
64 lines
2.6 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
|
|
*/
|
|
|
|
#include "structs.h" // for bilist, vtx_data
|
|
#include <stdio.h> // for NULL
|
|
|
|
/* Set up data structures for refine_part. */
|
|
void make_maps_ref(struct vtx_data **graph, /* graph data structure */
|
|
struct bilist * set_list, /* lists of vertices in each set */
|
|
struct bilist * vtx_elems, /* start of storage for vertices */
|
|
int * assignment, /* set assignments for graph */
|
|
int * sub_assign, /* assignment file for subgraph */
|
|
int set1, int set2, /* set value denoting subgraph */
|
|
int *glob2loc, /* graph -> subgraph numbering map */
|
|
int *loc2glob, /* subgraph -> graph numbering map */
|
|
int *psub_nvtxs, /* number of vtxs in subgraph */
|
|
int *pvwgt_max, /* returned largest vwgt */
|
|
int *pvwgt_sum1, int *pvwgt_sum2 /* returned set sizes */
|
|
)
|
|
{
|
|
struct bilist *ptr; /* loops through set lists */
|
|
int vwgt_max; /* largest vertex weight in subgraph */
|
|
int vwgt_sum1, vwgt_sum2; /* sum of vertex weights in sets */
|
|
int vtx; /* vertex in subgraph */
|
|
int size; /* array spacing */
|
|
int j; /* loop counter */
|
|
|
|
size = (int)(&(vtx_elems[1]) - &(vtx_elems[0]));
|
|
j = 1;
|
|
vwgt_max = vwgt_sum1 = vwgt_sum2 = 0;
|
|
for (ptr = set_list[set1].next; ptr != NULL; ptr = ptr->next) {
|
|
vtx = ((int)(ptr - vtx_elems)) / size;
|
|
sub_assign[j] = 0;
|
|
glob2loc[vtx] = j;
|
|
loc2glob[j] = vtx;
|
|
if (graph[vtx]->vwgt > vwgt_max) {
|
|
vwgt_max = graph[vtx]->vwgt;
|
|
}
|
|
vwgt_sum1 += graph[vtx]->vwgt;
|
|
j++;
|
|
}
|
|
|
|
for (ptr = set_list[set2].next; ptr != NULL; ptr = ptr->next) {
|
|
vtx = ((int)(ptr - vtx_elems)) / size;
|
|
sub_assign[j] = 1;
|
|
glob2loc[vtx] = j;
|
|
loc2glob[j] = vtx;
|
|
if (graph[vtx]->vwgt > vwgt_max) {
|
|
vwgt_max = graph[vtx]->vwgt;
|
|
}
|
|
vwgt_sum2 += graph[vtx]->vwgt;
|
|
assignment[vtx] = set1;
|
|
j++;
|
|
}
|
|
*pvwgt_sum1 = vwgt_sum1;
|
|
*pvwgt_sum2 = vwgt_sum2;
|
|
*pvwgt_max = vwgt_max;
|
|
*psub_nvtxs = j - 1;
|
|
}
|
|
|