Cloned SEACAS for EXODUS library with extra build files for internal package management.
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.
 
 
 
 
 
 

56 lines
2.0 KiB

/*
* Copyright(C) 1999-2020, 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 "structs.h"
#include <stdio.h> // for printf
/* Find a maximal matching in a graph using one of several algorithms. */
int maxmatch(struct vtx_data **graph, /* array of vtx data for graph */
int nvtxs, /* number of vertices in graph */
int nedges, /* number of edges in graph */
int *mflag, /* flag indicating vtx selected or not */
int using_ewgts, /* are edge weights being used? */
int igeom, /* geometric dimensionality */
float **coords /* coordinates for each vertex */
)
{
extern int DEBUG_COARSEN; /* debug output for coarsening? */
extern int MATCH_TYPE; /* which matching routine to use */
int nmerged = 0; /* number of matching edges found */
if (MATCH_TYPE == 1 || (MATCH_TYPE == 5 && coords == NULL)) {
/* Dumb, fast routine. */
nmerged = maxmatch1(graph, nvtxs, mflag, using_ewgts);
}
else if (MATCH_TYPE == 2) { /* More random but somewhat slower. */
nmerged = maxmatch2(graph, nvtxs, mflag, using_ewgts);
}
else if (MATCH_TYPE == 3) { /* Much more random but slower still. */
nmerged = maxmatch3(graph, nvtxs, mflag, using_ewgts);
}
else if (MATCH_TYPE == 4) { /* Truly random but very slow. */
nmerged = maxmatch4(graph, nvtxs, nedges, mflag, using_ewgts);
}
else if (MATCH_TYPE == 5 && coords != NULL) { /* Geometric nearness. */
nmerged = maxmatch5(graph, nvtxs, mflag, igeom, coords);
}
else if (MATCH_TYPE == 9) { /* Minimum degree of merged vertex */
nmerged = maxmatch9(graph, nvtxs, mflag, using_ewgts);
}
if (DEBUG_COARSEN > 0) {
printf("Number of matching edges = %d\n", nmerged);
}
return (nmerged);
}