/*
 * Copyright 1997, Regents of the University of Minnesota
 *
 * fortran.c
 *
 * This file contains code for the fortran to C interface
 *
 * Started 8/19/97
 * George
 *
 */

#include "metislib.h"


/*************************************************************************/
/*! This function changes the numbering to start from 0 instead of 1 */
/*************************************************************************/
void Change2CNumbering(idx_t nvtxs, idx_t *xadj, idx_t *adjncy)
{
  idx_t i;

  for (i=0; i<=nvtxs; i++)
    xadj[i]--;

  for (i=0; i<xadj[nvtxs]; i++)
    adjncy[i]--;
}


/*************************************************************************/
/*! This function changes the numbering to start from 1 instead of 0 */
/*************************************************************************/
void Change2FNumbering(idx_t nvtxs, idx_t *xadj, idx_t *adjncy, idx_t *vector)
{
  idx_t i;

  for (i=0; i<nvtxs; i++)
    vector[i]++;

  for (i=0; i<xadj[nvtxs]; i++)
    adjncy[i]++;

  for (i=0; i<=nvtxs; i++)
    xadj[i]++;
}

/*************************************************************************/
/*! This function changes the numbering to start from 1 instead of 0 */
/*************************************************************************/
void Change2FNumbering2(idx_t nvtxs, idx_t *xadj, idx_t *adjncy)
{
  idx_t i, nedges;

  nedges = xadj[nvtxs];
  for (i=0; i<nedges; i++)
    adjncy[i]++;

  for (i=0; i<=nvtxs; i++)
    xadj[i]++;
}



/*************************************************************************/
/*! This function changes the numbering to start from 1 instead of 0 */
/*************************************************************************/
void Change2FNumberingOrder(idx_t nvtxs, idx_t *xadj, idx_t *adjncy, 
         idx_t *v1, idx_t *v2)
{
  idx_t i, nedges;

  for (i=0; i<nvtxs; i++) {
    v1[i]++;
    v2[i]++;
  }

  nedges = xadj[nvtxs];
  for (i=0; i<nedges; i++)
    adjncy[i]++;

  for (i=0; i<=nvtxs; i++)
    xadj[i]++;

}



/*************************************************************************/
/*! This function changes the numbering to start from 0 instead of 1 */
/*************************************************************************/
void ChangeMesh2CNumbering(idx_t n, idx_t *ptr, idx_t *ind)
{
  idx_t i;

  for (i=0; i<=n; i++)
    ptr[i]--;
  for (i=0; i<ptr[n]; i++)
    ind[i]--;
}


/*************************************************************************/
/*! This function changes the numbering to start from 1 instead of 0 */
/*************************************************************************/
void ChangeMesh2FNumbering(idx_t n, idx_t *ptr, idx_t *ind, idx_t nvtxs, 
         idx_t *xadj, idx_t *adjncy)
{
  idx_t i;

  for (i=0; i<ptr[n]; i++)
    ind[i]++;
  for (i=0; i<=n; i++)
    ptr[i]++;

  for (i=0; i<xadj[nvtxs]; i++)
    adjncy[i]++;
  for (i=0; i<=nvtxs; i++)
    xadj[i]++;
}


/*************************************************************************/
/*! This function changes the numbering to start from 1 instead of 0 */
/*************************************************************************/
void ChangeMesh2FNumbering2(idx_t ne, idx_t nn, idx_t *ptr, idx_t *ind, 
         idx_t *epart, idx_t *npart)
{
  idx_t i;

  for (i=0; i<ptr[ne]; i++)
    ind[i]++;
  for (i=0; i<=ne; i++)
    ptr[i]++;

  for (i=0; i<ne; i++)
    epart[i]++;

  for (i=0; i<nn; i++)
    npart[i]++;
}