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