Esempio n. 1
0
int
orderLoad (
Order * const               ordeptr,
FILE * const                stream)
{
  PASTIX_INT               versval;                      /* Version number */
  PASTIX_INT               cblknbr;
  PASTIX_INT               cblknum;
  PASTIX_INT               vertnbr;
  PASTIX_INT               vertnum;
  PASTIX_INT               vertnnd;
  PASTIX_INT *             permtax;
  PASTIX_INT *             peritax;
  int               i;

  if ((intLoad (stream, &versval) +
       intLoad (stream, &cblknbr) +
       intLoad (stream, &vertnbr) != 3) ||
      (versval != 0)                    ||
      (cblknbr > vertnbr)) {
    errorPrint ("orderLoad: bad input (1)");
    return     (1);
  }

  if (((ordeptr->rangtab = (PASTIX_INT *) memAlloc ((cblknbr + 1) * sizeof (PASTIX_INT))) == NULL) ||
      ((ordeptr->permtab = (PASTIX_INT *) memAlloc (vertnbr       * sizeof (PASTIX_INT))) == NULL) ||
      ((ordeptr->peritab = (PASTIX_INT *) memAlloc (vertnbr       * sizeof (PASTIX_INT))) == NULL)) {
    errorPrint ("orderLoad: out of memory");
    orderExit  (ordeptr);
    orderInit  (ordeptr);
    return     (1);
  }
  ordeptr->cblknbr = cblknbr;

  for (cblknum = 0, i = 1; (i == 1) && (cblknum <= cblknbr); cblknum ++) /* Read column-block data */
    i = intLoad (stream, &ordeptr->rangtab[cblknum]);

  for (vertnum = 0; (i == 1) && (vertnum < vertnbr); vertnum ++) /* Read direct permutation */
    i = intLoad (stream, &ordeptr->permtab[vertnum]);

  if (i != 1) {
    errorPrint ("orderLoad: bad input (2)");
    orderExit  (ordeptr);
    orderInit  (ordeptr);
    return     (1);
  }

  permtax = ordeptr->permtab - ordeptr->rangtab[0];
  peritax = ordeptr->peritab - ordeptr->rangtab[0];
  for (vertnum = ordeptr->rangtab[0], vertnnd = vertnum + vertnbr; /* Build inverse permutation */
       vertnum < vertnnd; vertnum ++)
    peritax[permtax[vertnum]] = vertnum;

  return (0);
}
void
SCOTCH_graphOrderExit (
const SCOTCH_Graph * const  grafptr,
SCOTCH_Ordering * const     ordeptr)
{
  orderExit (&((LibOrder *) ordeptr)->o);
}
void
SCOTCH_meshOrderExit (
const SCOTCH_Mesh * const   meshptr,
SCOTCH_Ordering * const     ordeptr)
{
  orderExit (&((LibOrder *) ordeptr)->o);
}
void
SCOTCH_dgraphCorderExit (
const SCOTCH_Dgraph * const grafptr,
SCOTCH_Ordering * const     cordptr)
{
  orderExit (&((LibOrder *) cordptr)->o);
}