1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
/* -----------------------------------------------------------------
* Programmer(s): Scott Cohen, Alan Hindmarsh, Radu Serban,
* Aaron Collier, and Slaven Peles @ LLNL
* -----------------------------------------------------------------
* LLNS Copyright Start
* Copyright (c) 2014, Lawrence Livermore National Security
* This work was performed under the auspices of the U.S. Department
* of Energy by Lawrence Livermore National Laboratory in part under
* Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
* Produced at the Lawrence Livermore National Laboratory.
* All rights reserved.
* For details, see the LICENSE file.
* LLNS Copyright End
* -----------------------------------------------------------------
* This header file exports three types: realtype, sunindextype and
* booleantype, as well as the constants SUNTRUE and SUNFALSE.
*
* Users should include the header file sundials_types.h in every
* program file and use the exported name realtype instead of
* float, double or long double.
*
* The constants SUNDIALS_SINGLE_PRECISION, SUNDIALS_DOUBLE_PRECISION
* and SUNDIALS_LONG_DOUBLE_PRECISION indicate the underlying data
* type of realtype.
*
* The legal types for realtype are float, double and long double.
*
* The constants SUNDIALS_INT64_T and SUNDIALS_INT32_T indicate
* the underlying data type of sunindextype -- the integer data type
* used for vector and matrix indices.
*
* Data types are set at the configuration stage.
*
* The macro RCONST gives the user a convenient way to define
* real-valued literal constants. To use the constant 1.0, for example,
* the user should write the following:
*
* #define ONE RCONST(1.0)
*
* If realtype is defined as a double, then RCONST(1.0) expands
* to 1.0. If realtype is defined as a float, then RCONST(1.0)
* expands to 1.0F. If realtype is defined as a long double,
* then RCONST(1.0) expands to 1.0L. There is never a need to
* explicitly cast 1.0 to (realtype). The macro can be used for
* literal constants only. It cannot be used for expressions.
* -----------------------------------------------------------------*/
#ifndef _SUNDIALSTYPES_H
#define _SUNDIALSTYPES_H
#ifndef _SUNDIALS_CONFIG_H
#define _SUNDIALS_CONFIG_H
#include <sundials/sundials_config.h>
#endif
#include <float.h>
#include <stdint.h>
#ifdef __cplusplus /* wrapper to enable C++ usage */
extern "C" {
#endif
/*
*------------------------------------------------------------------
* Type realtype
* Macro RCONST
* Constants BIG_REAL, SMALL_REAL, and UNIT_ROUNDOFF
*------------------------------------------------------------------
*/
#if defined(SUNDIALS_SINGLE_PRECISION)
typedef float realtype;
# define RCONST(x) x##F
# define BIG_REAL FLT_MAX
# define SMALL_REAL FLT_MIN
# define UNIT_ROUNDOFF FLT_EPSILON
#elif defined(SUNDIALS_DOUBLE_PRECISION)
typedef double realtype;
# define RCONST(x) x
# define BIG_REAL DBL_MAX
# define SMALL_REAL DBL_MIN
# define UNIT_ROUNDOFF DBL_EPSILON
#elif defined(SUNDIALS_EXTENDED_PRECISION)
typedef long double realtype;
# define RCONST(x) x##L
# define BIG_REAL LDBL_MAX
# define SMALL_REAL LDBL_MIN
# define UNIT_ROUNDOFF LDBL_EPSILON
#endif
/*
*------------------------------------------------------------------
* Type : sunindextype
*------------------------------------------------------------------
* Defines integer type to be used for vector and matrix indices.
* User can build sundials to use 32- or 64-bit signed integers.
* If compiler does not support portable data types, 'int' is used
* in place of 32- and 'long int' is used in place of 64-bit
* integer.
*------------------------------------------------------------------
*/
#if defined(SUNDIALS_INT64_T)
#if __STDC_VERSION__ >= 199901L
typedef int64_t sunindextype;
#elif _MSC_VER >= 300
typedef __int64 sunindextype;
#else
typedef long int sunindextype;
#endif
#elif defined(SUNDIALS_INT32_T)
#if __STDC_VERSION__ >= 199901L
typedef int32_t sunindextype;
#else
typedef int sunindextype;
#endif
#endif
/*
*------------------------------------------------------------------
* Type : booleantype
*------------------------------------------------------------------
* Constants : SUNFALSE and SUNTRUE
*------------------------------------------------------------------
* ANSI C does not have a built-in boolean data type. Below is the
* definition for a new type called booleantype. The advantage of
* using the name booleantype (instead of int) is an increase in
* code readability. It also allows the programmer to make a
* distinction between int and boolean data. Variables of type
* booleantype are intended to have only the two values SUNFALSE and
* SUNTRUE which are defined below to be equal to 0 and 1,
* respectively.
*------------------------------------------------------------------
*/
#ifndef booleantype
#define booleantype int
#endif
#ifndef SUNFALSE
#define SUNFALSE 0
#endif
#ifndef SUNTRUE
#define SUNTRUE 1
#endif
#ifdef __cplusplus
}
#endif
#endif /* _SUNDIALSTYPES_H */
|