#ifndef _MESH_H
#define _MESH_H
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX(a,b)  ( (a)>(b) ? (a):(b) )

typedef struct mesh{
  int nq; /* Nombre de sommets */
  int nme; /* Nombre de triangles */
  int nbe; /* Nombre d'aretes sur le bord */
  double *q[2]; /* Tableau des points 2*nq : q[il][j] composante il du sommet j */
  int *me[3];/* Tableau des triangles 3*nme
                me[jl][k] indice dans le tableau q du jl-ieme sommet du triangle */
  int *ql; /* 1*nq (0 pour point interieur) */
  int *mel; /* 1*nme ("numero" de la region) */ 
  int *bel; /* 1*nbe ("numero" du bord) */
  int *be[2]; /* Tableau des aretes (2*be)
                 be[il][j] indice dans le tableau q du il-ieme sommet de l'arete j  */
  double *areas; /* Aire des triangles */ 
  double h; /* maximum des longueurs des aretes de tous les triangles */
} Mesh;

/* Mesh.c */
Mesh ReadMesh(char * nom_fichier);
double *MeshElementsAreas(Mesh M);
double MeshElementsMaxEdgesLengths(Mesh M);
void InitMesh(Mesh *pM);
Mesh ReadAndInitMesh(char * nom_fichier);
void PrintMesh(Mesh M);
void FreeMesh(Mesh M);
#endif
