#ifndef __FVM_DEFS_H__
#define __FVM_DEFS_H__
/*============================================================================
* Definitions, global variables, and base functions
*============================================================================*/
/*
This file is part of the "Finite Volume Mesh" library, intended to provide
finite volume mesh and associated fields I/O and manipulation services.
Copyright (C) 2004-2006 EDF
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*----------------------------------------------------------------------------*/
#include <fvm_config.h>
/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#if 0
} /* Fake brace to force back Emacs auto-indentation back to column 0 */
#endif
#endif /* __cplusplus */
/*=============================================================================
* Macro definitions
*============================================================================*/
/* System name */
#if defined(__sgi__) || defined(__sgi) || defined(sgi)
#define _FVM_ARCH_IRIX_64
#elif defined(__hpux__) || defined(__hpux) || defined(hpux)
#define _FVM_ARCH_HP_UX
#elif defined(__linux__) || defined(__linux) || defined(linux)
#define _FVM_ARCH_Linux
#elif defined(__sun__) || defined(__sun) || defined(sun)
#define _FVM_ARCH_SunOS
#elif defined(__uxpv__) || defined(__uxpv) || defined(uxpv)
#define _FVM_ARCH_UNIX_System_V
#endif
/* "Classical" macros */
/*--------------------*/
#define FVM_ABS(a) ((a) < 0 ? -(a) : (a)) /* Absolute value of a */
#define FVM_MIN(a,b) ((a) > (b) ? (b) : (a)) /* Minimum of a et b */
#define FVM_MAX(a,b) ((a) < (b) ? (b) : (a)) /* Maximum of a et b */
/*============================================================================
* Type definitions
*============================================================================*/
/*----------------------------------------------------------------------------
* Element types
*----------------------------------------------------------------------------*/
typedef enum {
FVM_EDGE, /* Edge */
FVM_FACE_TRIA, /* Triangle */
FVM_FACE_QUAD, /* Quadrangle */
FVM_FACE_POLY, /* Simple Polygon */
FVM_CELL_TETRA, /* Tetrahedron */
FVM_CELL_PYRAM, /* Pyramid */
FVM_CELL_PRISM, /* Prism (pentahedron) */
FVM_CELL_HEXA, /* Hexahedron (brick) */
FVM_CELL_POLY, /* Simple Polyhedron (convex or quasi-convex) */
FVM_N_ELEMENT_TYPES /* Number of element types */
} fvm_element_t;
/*----------------------------------------------------------------------------
* Variable interlace type:
* {x1, y1, z1, x2, y2, z2, ...,xn, yn, zn} if interlaced
* {x1, x2, ..., xn, y1, y2, ..., yn, z1, z2, ..., zn} if non interlaced
*----------------------------------------------------------------------------*/
typedef enum {
FVM_INTERLACE, /* Variable is interlaced */
FVM_NO_INTERLACE /* Variable is not interlaced */
} fvm_interlace_t;
/*----------------------------------------------------------------------------
* Variable value type.
*----------------------------------------------------------------------------*/
typedef enum {
FVM_DATATYPE_NULL, /* empty datatype */
FVM_DOUBLE, /* 8-byte floating point values */
FVM_FLOAT, /* 4-byte floating point values */
FVM_INT32, /* 4-byte signed integer values */
FVM_INT64, /* 8-byte signed integer values */
FVM_UINT32, /* 4-byte unsigned integer values */
FVM_UINT64 /* 8-byte unsigned integer values */
} fvm_datatype_t;
/*----------------------------------------------------------------------------
* Basic types used by FVM.
* They may be modified here to better map to a given library, with the
* following constraints:
* - fvm_lnum_t must be signed
* - fvm_gnum_t may be signed or unsigned
*----------------------------------------------------------------------------*/
typedef unsigned fvm_gnum_t; /* Global integer index or number */
typedef int fvm_lnum_t; /* Local integer index or number */
typedef double fvm_coord_t; /* Real number (coordinate value) */
/* Set associated data types here */
#define FVM_COORD FVM_DOUBLE
#if (FVM_SIZEOF_INT == 4)
#define FVM_GNUM FVM_UINT_32
#define FVM_LNUM FVM_INT_32
#elif (FVM_SIZEOF_INT == 8)
#define FVM_GNUM FVM_UINT_64
#define FVM_LNUM FVM_INT_64
#else
#error
#endif
/*=============================================================================
* Static global variables
*============================================================================*/
/* Names of (multiple) element types */
extern const char *fvm_elements_type_name[];
/* Names of (single) element types */
extern const char *fvm_element_type_name[];
/* Sizes associated with datatypes */
extern const size_t fvm_datatype_size[];
/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __FVM_DEFS_H__ */
syntax highlighted by Code2HTML, v. 0.9.1