Tuesday merger of Orange branch with bf-blender
[blender.git] / intern / opennl / extern / ONL_opennl.h
1 /*
2  *  $Id$
3  *
4  *  OpenNL: Numerical Library
5  *  Copyright (C) 2004 Bruno Levy
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  *  If you modify this software, you should include a notice giving the
22  *  name of the person performing the modification, the date of modification,
23  *  and the reason for such modification.
24  *
25  *  Contact: Bruno Levy
26  *
27  *     levy@loria.fr
28  *
29  *     ISA Project
30  *     LORIA, INRIA Lorraine, 
31  *     Campus Scientifique, BP 239
32  *     54506 VANDOEUVRE LES NANCY CEDEX 
33  *     FRANCE
34  *
35  *  Note that the GNU General Public License does not permit incorporating
36  *  the Software into proprietary programs. 
37  */
38
39 /*
40 #define NL_DEBUG
41 #define NL_PARANOID
42 */
43
44 #define NL_USE_SUPERLU
45
46 #ifndef nlOPENNL_H
47 #define nlOPENNL_H
48
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52
53 #define NL_VERSION_0_0 1
54
55 /* Datatypes */
56
57 typedef unsigned int    NLenum;
58 typedef unsigned char   NLboolean;
59 typedef unsigned int    NLbitfield;
60 typedef void                    NLvoid;
61 typedef signed char             NLbyte;         /* 1-byte signed */
62 typedef short                   NLshort;        /* 2-byte signed */
63 typedef int                             NLint;          /* 4-byte signed */
64 typedef unsigned char   NLubyte;        /* 1-byte unsigned */
65 typedef unsigned short  NLushort;       /* 2-byte unsigned */
66 typedef unsigned int    NLuint;         /* 4-byte unsigned */
67 typedef int                             NLsizei;        /* 4-byte signed */
68 typedef float                   NLfloat;        /* single precision float */
69 typedef double                  NLdouble;       /* double precision float */
70
71 typedef void* NLContext;
72
73 /* Constants */
74
75 #define NL_FALSE   0x0
76 #define NL_TRUE    0x1
77
78 /* Primitives */
79
80 #define NL_SYSTEM  0x0
81 #define NL_MATRIX  0x1
82 #define NL_ROW     0x2
83
84 /* Solver Parameters */
85
86 #define NL_SOLVER           0x100
87 #define NL_NB_VARIABLES     0x101
88 #define NL_LEAST_SQUARES    0x102
89 #define NL_SYMMETRIC        0x106
90 #define NL_ERROR            0x108
91
92 /* Row parameters */
93
94 #define NL_RIGHT_HAND_SIDE 0x500
95 #define NL_ROW_SCALING     0x501
96
97 /* Contexts */
98
99 NLContext nlNewContext(void);
100 void nlDeleteContext(NLContext context);
101 void nlMakeCurrent(NLContext context);
102 NLContext nlGetCurrent(void);
103
104 /* State get/set */
105
106 void nlSolverParameterf(NLenum pname, NLfloat param);
107 void nlSolverParameteri(NLenum pname, NLint param);
108
109 void nlRowParameterf(NLenum pname, NLfloat param);
110 void nlRowParameteri(NLenum pname, NLint param);
111
112 void nlGetBooleanv(NLenum pname, NLboolean* params);
113 void nlGetFloatv(NLenum pname, NLfloat* params);
114 void nlGetIntergerv(NLenum pname, NLint* params);
115
116 void nlEnable(NLenum pname);
117 void nlDisable(NLenum pname);
118 NLboolean nlIsEnabled(NLenum pname);
119
120 /* Variables */
121
122 void nlSetVariable(NLuint index, NLfloat value);
123 NLfloat nlGetVariable(NLuint index);
124 void nlLockVariable(NLuint index);
125 void nlUnlockVariable(NLuint index);
126 NLboolean nlVariableIsLocked(NLuint index);
127
128 /* Begin/End */
129
130 void nlBegin(NLenum primitive);
131 void nlEnd(NLenum primitive);
132 void nlCoefficient(NLuint index, NLfloat value);
133
134 /* Setting random elements matrix/vector - not for least squares! */
135
136 void nlMatrixAdd(NLuint row, NLuint col, NLfloat value);
137 void nlRightHandSideAdd(NLuint index, NLfloat value);
138
139 /* Solve */
140
141 void nlPrintMatrix(void);
142 NLboolean nlSolve();
143 NLboolean nlSolveAdvanced(NLint *permutation, NLboolean solveAgain);
144
145 #ifdef __cplusplus
146 }
147 #endif
148
149 #endif
150