Main Page   Modules   Compound List   File List   Compound Members   File Members  

3x3matrix.h

Go to the documentation of this file.
00001 
00014 /* This library is free software; you can redistribute it and/or
00015    modify it under the terms of the GNU Lesser General Public
00016    License as published by the Free Software Foundation; either
00017    version 2.1 of the License, or (at your option) any later version.
00018 
00019    This library is distributed in the hope that it will be useful,
00020    but WITHOUT ANY WARRANTY; without even the implied warranty of
00021    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022    Lesser General Public License for more details.
00023 
00024    You should have received a copy of the GNU Lesser General Public
00025    License along with this library; if not, write to the Free Software
00026    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027 */
00028 
00029 #ifndef _GAN_3X3MATRIX_H
00030 #define _GAN_3X3MATRIX_H
00031 
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034 #include <math.h>
00035 #include <gandalf/common/misc_defs.h>
00049 /* This library is free software; you can redistribute it and/or
00050    modify it under the terms of the GNU Lesser General Public
00051    License as published by the Free Software Foundation; either
00052    version 2.1 of the License, or (at your option) any later version.
00053 
00054    This library is distributed in the hope that it will be useful,
00055    but WITHOUT ANY WARRANTY; without even the implied warranty of
00056    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00057    Lesser General Public License for more details.
00058 
00059    You should have received a copy of the GNU Lesser General Public
00060    License along with this library; if not, write to the Free Software
00061    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00062 */
00063 
00064 #ifndef _GAN_REPEAT33_H
00065 #define _GAN_REPEAT33_H
00066 
00080 /* This library is free software; you can redistribute it and/or
00081    modify it under the terms of the GNU Lesser General Public
00082    License as published by the Free Software Foundation; either
00083    version 2.1 of the License, or (at your option) any later version.
00084 
00085    This library is distributed in the hope that it will be useful,
00086    but WITHOUT ANY WARRANTY; without even the implied warranty of
00087    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00088    Lesser General Public License for more details.
00089 
00090    You should have received a copy of the GNU Lesser General Public
00091    License along with this library; if not, write to the Free Software
00092    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00093 */
00094 
00095 #ifndef _GAN_REPEAT1_H
00096 #define _GAN_REPEAT1_H
00097 
00098 #ifdef __cplusplus
00099 extern "C" {
00100 #endif
00101 
00102 /* macros for constructing one-fold repetitions (for consistency) */
00103 #define GAN_REP1_AS(a,b,p1) (a p1 b)
00104 #define GAN_REP1_A(a,p1) (a p1)
00105 #define GAN_REP1_A_C(a,b) GAN_REP1_A(a,b,x)
00106 
00107 #define GAN_FREP1_A(a,b,p1,q1) (a p1 b q1)
00108 #define GAN_FREP1_A_C(a,b,p1) GAN_FREP1_A(a,b,x,p1)
00109 
00110 #define GAN_REP1_ABS(a,b,c,p1,q1) (a p1 b q1 c)
00111 #define GAN_REP1_AAS(a,b,c,p1) GAN_REP1_ABS(a,b,c,p1,p1)
00112 #define GAN_REP1_AAS_C(a,b,c) GAN_REP1_AAS(a,b,c,x)
00113 
00114 #define GAN_REP1_AB(a,b,p1,q1) (a p1 b q1)
00115 #define GAN_REP1_AA(a,b,p1) GAN_REP1_AB(a,b,p1,p1)
00116 #define GAN_REP1_AA_C(a,b) GAN_REP1_AA(a,b,x)
00117 
00118 #define GAN_REP1_ABCS(a,b,c,d,p1,q1,r1) (a p1 b q1 c r1 d)
00119 #define GAN_REP1_ABC(a,b,c,p1,q1,r1) (a p1 b q1 c r1)
00120 #define GAN_REP1_AAA(a,b,c,p1) GAN_REP1_ABC(a,b,c,p1,p1,p1)
00121 #define GAN_REP1_AAA_C(a,b,c) GAN_REP1_AAA(a,b,c,x)
00122 
00123 #define GAN_REP1_OP_AB(a,b,p1,q1,op) (a p1 b q1)
00124 #define GAN_REP1_OP_AA(a,b,p1,op) GAN_REP1_OP_AB(a,b,p1,p1,op)
00125 #define GAN_REP1_OP_AA_C(a,b,op) GAN_REP1_OP_AA(a,b,x,op)
00126 
00127 #ifdef __cplusplus
00128 }
00129 #endif
00130 
00131 #endif /* #ifndef _GAN_REPEAT1_H */
00132 
00145 /* This library is free software; you can redistribute it and/or
00146    modify it under the terms of the GNU Lesser General Public
00147    License as published by the Free Software Foundation; either
00148    version 2.1 of the License, or (at your option) any later version.
00149 
00150    This library is distributed in the hope that it will be useful,
00151    but WITHOUT ANY WARRANTY; without even the implied warranty of
00152    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00153    Lesser General Public License for more details.
00154 
00155    You should have received a copy of the GNU Lesser General Public
00156    License along with this library; if not, write to the Free Software
00157    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00158 */
00159 
00160 #ifndef _GAN_REPEAT2_H
00161 #define _GAN_REPEAT2_H
00162 
00163 #ifdef __cplusplus
00164 extern "C" {
00165 #endif
00166 
00167 /* macros for constructing two-fold repetitions */
00168 #define GAN_REP2_AS(a,b,p1,p2) (a p1 b, a p2 b)
00169 #define GAN_REP2_A(a,p1,p2) (a p1, a p2)
00170 #define GAN_REP2_AS_C(a,b) GAN_REP2_AS(a,b,x,y)
00171 #define GAN_REP2_A_C(a) GAN_REP2_A(a,x,y)
00172 
00173 #define GAN_FREP2_A(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00174 #define GAN_FREP2_A_C(a,b,p1,p2) GAN_FREP2_A(a,b,x,y,p1,p2)
00175 
00176 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00177 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00178 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00179 
00180 #define GAN_REP2_ABS(a,b,c,p1,p2,q1,q2) (a p1 b q1 c, a p2 b q2 c)
00181 #define GAN_REP2_AAS(a,b,c,p1,p2) GAN_REP2_ABS(a,b,c,p1,p2,p1,p2)
00182 #define GAN_REP2_AAS_C(a,b,c) GAN_REP2_AAS(a,b,c,x,y)
00183 
00184 #define GAN_REP2_AB(a,b,p1,p2,q1,q2) (a p1 b q1, a p2 b q2)
00185 #define GAN_REP2_AA(a,b,p1,p2) GAN_REP2_AB(a,b,p1,p2,p1,p2)
00186 #define GAN_REP2_AA_C(a,b) GAN_REP2_AA(a,b,x,y)
00187 
00188 #define GAN_REP2_ABCS(a,b,c,d,p1,p2,q1,q2,r1,r2)\
00189            (a p1 b q1 c r1 d, a p2 b q2 c r2 d)
00190 #define GAN_REP2_ABC(a,b,c,p1,p2,q1,q2,r1,r2)\
00191            (a p1 b q1 c r1, a p2 b q2 c r2)
00192 #define GAN_REP2_AAA(a,b,c,p1,p2) GAN_REP2_ABC(a,b,c,p1,p2,p1,p2,p1,p2)
00193 #define GAN_REP2_AAA_C(a,b,c) GAN_REP2_AAA(a,b,c,x,y)
00194 
00195 #define GAN_REP2_OP_AB(a,b,p1,p2,q1,q2,op)\
00196            (a p1 b q1 op a p2 b q2)
00197 #define GAN_REP2_OP_AA(a,b,p1,p2,op) GAN_REP2_OP_AB(a,b,p1,p2,p1,p2,op)
00198 #define GAN_REP2_OP_AA_C(a,b,op) GAN_REP2_OP_AA(a,b,x,y,op)
00199 
00200 #ifdef __cplusplus
00201 }
00202 #endif
00203 
00204 #endif /* #ifndef _GAN_REPEAT2_H */
00205 
00218 /* This library is free software; you can redistribute it and/or
00219    modify it under the terms of the GNU Lesser General Public
00220    License as published by the Free Software Foundation; either
00221    version 2.1 of the License, or (at your option) any later version.
00222 
00223    This library is distributed in the hope that it will be useful,
00224    but WITHOUT ANY WARRANTY; without even the implied warranty of
00225    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00226    Lesser General Public License for more details.
00227 
00228    You should have received a copy of the GNU Lesser General Public
00229    License along with this library; if not, write to the Free Software
00230    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00231 */
00232 
00233 #ifndef _GAN_REPEAT3_H
00234 #define _GAN_REPEAT3_H
00235 
00236 #ifdef __cplusplus
00237 extern "C" {
00238 #endif
00239 
00240 /* macros for constructing three-fold repetitions */
00241 #define GAN_REP3_AS(a,b,p1,p2,p3) (a p1 b, a p2 b, a p3 b)
00242 #define GAN_REP3_AS_C(a,b) GAN_REP3_AS(a,b,x,y,z)
00243 #define GAN_REP3_A(a,p1,p2,p3) (a p1, a p2, a p3)
00244 #define GAN_REP3_A_C(a) GAN_REP3_A(a,x,y,z)
00245 
00246 #define GAN_FREP3_A(a,b,p1,p2,p3,q1,q2,q3) (a p1 b q1, a p2 b q2, a p3 b q3)
00247 #define GAN_FREP3_A_C(a,b,p1,p2,p3) GAN_FREP3_A(a,b,x,y,z,p1,p2,p3)
00248 
00249 
00250 #define GAN_REP3_ABS(a,b,c,p1,p2,p3,q1,q2,q3)\
00251            (a p1 b q1 c, a p2 b q2 c, a p3 b q3 c)
00252 #define GAN_REP3_AAS(a,b,c,p1,p2,p3) GAN_REP3_ABS(a,b,c,p1,p2,p3,p1,p2,p3)
00253 #define GAN_REP3_AAS_C(a,b,c) GAN_REP3_AAS(a,b,c,x,y,z)
00254 
00255 #define GAN_REP3_AB(a,b,p1,p2,p3,q1,q2,q3)\
00256            (a p1 b q1, a p2 b q2, a p3 b q3)
00257 #define GAN_REP3_AA(a,b,p1,p2,p3) GAN_REP3_AB(a,b,p1,p2,p3,p1,p2,p3)
00258 #define GAN_REP3_AA_C(a,b) GAN_REP3_AA(a,b,x,y,z)
00259 
00260 #define GAN_REP3_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00261            (a p1 b q1 c r1 d, a p2 b q2 c r2 d, a p3 b q3 c r3 d)
00262 #define GAN_REP3_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3)\
00263            (a p1 b q1 c r1, a p2 b q2 c r2, a p3 b q3 c r3)
00264 #define GAN_REP3_AAA(a,b,c,p1,p2,p3)\
00265         GAN_REP3_ABC(a,b,c,p1,p2,p3,p1,p2,p3,p1,p2,p3)
00266 #define GAN_REP3_AAA_C(a,b,c) GAN_REP3_AAA(a,b,c,x,y,z)
00267 
00268 #define GAN_REP3_OP_AB(a,b,p1,p2,p3,q1,q2,q3,op)\
00269            (a p1 b q1 op a p2 b q2 op a p3 b q3)
00270 #define GAN_REP3_OP_AA(a,b,p1,p2,p3,op)\
00271            GAN_REP3_OP_AB(a,b,p1,p2,p3,p1,p2,p3,op)
00272 #define GAN_REP3_OP_AA_C(a,b,op) GAN_REP3_OP_AA(a,b,x,y,z,op)
00273 
00274 #ifdef __cplusplus
00275 }
00276 #endif
00277 
00278 #endif /* #ifndef _GAN_REPEAT3_H */
00279 
00280 #ifdef __cplusplus
00281 extern "C" {
00282 #endif
00283 
00284 /* macros for constructing dual two-fold repetitions */
00285 
00286 #define GAN_FREP33_A(a,b,p1,p2,p3,q1,q2,q3,r11,r12,r13,r21,r22,r23,r31,r32,r33)            (GAN_FREP3_A(a,b,p1##q1,p1##q2,p1##q3,r11,r12,r13),\
00287              GAN_FREP3_A(a,b,p2##q1,p2##q2,p2##q3,r21,r22,r23),\
00288              GAN_FREP3_A(a,b,p3##q1,p3##q2,p3##q3,r31,r32,r33))
00289 #define GAN_FREP33_A_C(a,b,r11,r12,r13,r21,r22,r23,r31,r32,r33) \
00290            GAN_FREP33_A(a,b,x,y,z,x,y,z,r11,r12,r13,r21,r22,r23,r31,r32,r33)
00291 
00292 /* most general macros */
00293 #define GAN_REP33_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00294  (GAN_REP3_ABCS(a,b,c,d,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3,t1##u1,t1##u2,t1##u3),\
00295   GAN_REP3_ABCS(a,b,c,d,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3,t2##u1,t2##u2,t2##u3),\
00296   GAN_REP3_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00297 #define GAN_REP33_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00298  (GAN_REP3_ABC(a,b,c,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3,t1##u1,t1##u2,t1##u3),\
00299   GAN_REP3_ABC(a,b,c,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3,t2##u1,t2##u2,t2##u3),\
00300   GAN_REP3_ABC(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00301 
00302 #define GAN_REP33_AAAS(a,b,c,d,p1,p2,p3,q1,q2,q3)\
00303   GAN_REP33_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00304 #define GAN_REP33_AAA(a,b,c,p1,p2,p3,q1,q2,q3)\
00305    GAN_REP33_ABC(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00306 
00307 #define GAN_REP33_ABS(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00308  (GAN_REP3_ABS(a,b,c,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3),\
00309   GAN_REP3_ABS(a,b,c,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3),\
00310   GAN_REP3_ABS(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00311 #define GAN_REP33_AB(a,b,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00312  (GAN_REP3_AB(a,b,p1##q1,p1##q2,p1##q3,r1##s1,r1##s2,r1##s3),\
00313   GAN_REP3_AB(a,b,p2##q1,p2##q2,p2##q3,r2##s1,r2##s2,r2##s3),\
00314   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00315 
00316 #define GAN_REP33_AAS(a,b,c,p1,p2,p3,q1,q2,q3)\
00317             GAN_REP33_ABS(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00318 #define GAN_REP33_AA(a,b,p1,p2,p3,q1,q2,q3)\
00319             GAN_REP33_AB(a,b,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00320 
00321 #define GAN_REP33_AS(a,b,p1,p2,p3,q1,q2,q3)\
00322  (GAN_REP3_AS(a,b,p1##q1,p1##q2,p1##q3),\
00323   GAN_REP3_AS(a,b,p2##q1,p2##q2,p2##q3),\
00324   GAN_REP3_AS(a,b,p3##q1,p3##q2,p3##q3))
00325 #define GAN_REP33_A(a,p1,p2,p3,q1,q2,q3)\
00326  (GAN_REP3_A(a,p1##q1,p1##q2,p1##q3),\
00327   GAN_REP3_A(a,p2##q1,p2##q2,p2##q3),\
00328   GAN_REP3_A(a,p3##q1,p3##q2,p3##q3))
00329 
00330 /* macros specific to xx, xy etc coordinates */
00331 #define GAN_REP33_AS_C(a,b) GAN_REP33_AS(a,b,x,y,z,x,y,z)
00332 #define GAN_REP33_AAS_C(a,b,c) GAN_REP33_AAS(a,b,c,x,y,z,x,y,z)
00333 #define GAN_REP33_AAAS_C(a,b,c,d) GAN_REP33_AAAS(a,b,c,d,x,y,z,x,y,z)
00334 #define GAN_REP33_A_C(a) GAN_REP33_A(a,x,y,z,x,y,z)
00335 #define GAN_REP33_AA_C(a,b) GAN_REP33_AA(a,b,x,y,z,x,y,z)
00336 #define GAN_REP33_AAA_C(a,b,c) GAN_REP33_AAA(a,b,c,x,y,z,x,y,z)
00337 
00338 /* macro for transpose operation */
00339 #define GAN_REP33_AAT(a,b,p1,p2,p3,q1,q2,q3)\
00340  (GAN_REP3_AB(a,b,p1##q1,p1##q2,p1##q3,p1##q1,p2##q1,p3##q1),\
00341   GAN_REP3_AB(a,b,p2##q1,p2##q2,p2##q3,p1##q2,p2##q2,p3##q2),\
00342   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,p1##q3,p2##q3,p3##q3))
00343 #define GAN_REP33_AAT_C(a,b) GAN_REP33_AAT(a,b,x,y,z,x,y,z)
00344 
00345 /* macros for operations on lower triangle of matrices only */
00346 #define GAN_FREP33L_A(a,b,p1,p2,p3,q1,q2,q3,r11,r21,r22,r31,r32,r33)\
00347  (GAN_FREP1_A(a,b,p1##q1,r11),\
00348   GAN_FREP2_A(a,b,p2##q1,p2##q2,r21,r22),\
00349   GAN_FREP3_A(a,b,p3##q1,p3##q2,p3##q3,r31,r32,r33))
00350 #define GAN_FREP33L_A_C(a,b,r11,r21,r22,r31,r32,r33) \
00351            GAN_FREP33L_A(a,b,x,y,z,x,y,z,r11,r21,r22,r31,r32,r33)
00352 
00353 #define GAN_REP33L_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00354  (GAN_REP1_ABCS(a,b,c,d,p1##q1,r1##s1,t1##u1),\
00355   GAN_REP2_ABCS(a,b,c,d,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00356   GAN_REP3_ABCS(a,b,c,d,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00357 #define GAN_REP33L_ABC(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3,t1,t2,t3,u1,u2,u3)\
00358  (GAN_REP1_ABC(a,b,c,p1##q1,r1##s1,t1##u1),\
00359   GAN_REP2_ABC(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2,t2##u1,t2##u2),\
00360   GAN_REP3_ABC(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3,t3##u1,t3##u2,t3##u3))
00361 #define GAN_REP33L_AAAS(a,b,c,d,p1,p2,p3,q1,q2,q3)\
00362            GAN_REP33L_ABCS(a,b,c,d,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00363 #define GAN_REP33L_AAA(a,b,c,p1,p2,p3,q1,q2,q3)\
00364            GAN_REP33L_ABC(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00365 #define GAN_REP33L_ABS(a,b,c,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00366  (GAN_REP1_ABS(a,b,c,p1##q1,r1##s1),\
00367   GAN_REP2_ABS(a,b,c,p2##q1,p2##q2,r2##s1,r2##s2),\
00368   GAN_REP3_ABS(a,b,c,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00369 #define GAN_REP33L_AB(a,b,p1,p2,p3,q1,q2,q3,r1,r2,r3,s1,s2,s3)\
00370  (GAN_REP1_AB(a,b,p1##q1,r1##s1),\
00371   GAN_REP2_AB(a,b,p2##q1,p2##q2,r2##s1,r2##s2),\
00372   GAN_REP3_AB(a,b,p3##q1,p3##q2,p3##q3,r3##s1,r3##s2,r3##s3))
00373 #define GAN_REP33L_AAS(a,b,c,p1,p2,p3,q1,q2,q3)\
00374            GAN_REP33L_ABS(a,b,c,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00375 #define GAN_REP33L_AA(a,b,p1,p2,p3,q1,q2,q3)\
00376            GAN_REP33L_AB(a,b,p1,p2,p3,q1,q2,q3,p1,p2,p3,q1,q2,q3)
00377 #define GAN_REP33L_AS(a,b,p1,p2,p3,q1,q2,q3)\
00378  (GAN_REP1_AS(a,b,p1##q1),\
00379   GAN_REP2_AS(a,b,p2##q1,p2##q2),\
00380   GAN_REP3_AS(a,b,p3##q1,p3##q2,p3##q3))
00381 #define GAN_REP33L_A(a,p1,p2,p3,q1,q2,q3)\
00382  (GAN_REP1_A(a,p1##q1),\
00383   GAN_REP2_A(a,p2##q1,p2##q2),\
00384   GAN_REP3_A(a,p3##q1,p3##q2,p3##q3))
00385 #define GAN_REP33L_AS_C(a,b) GAN_REP33L_AS(a,b,x,y,z,x,y,z)
00386 #define GAN_REP33L_AAS_C(a,b,c) GAN_REP33L_AAS(a,b,c,x,y,z,x,y,z)
00387 #define GAN_REP33L_AAAS_C(a,b,c,d) GAN_REP33L_AAAS(a,b,c,d,x,y,z,x,y,z)
00388 #define GAN_REP33L_A_C(a) GAN_REP33L_A(a,x,y,z,x,y,z)
00389 #define GAN_REP33L_AA_C(a,b) GAN_REP33L_AA(a,b,x,y,z,x,y,z)
00390 #define GAN_REP33L_AAA_C(a,b,c) GAN_REP33L_AAA(a,b,c,x,y,z,x,y,z)
00391 #define GAN_FREP33L_A_C(a,b,r11,r21,r22,r31,r32,r33)\
00392            GAN_FREP33L_A(a,b,x,y,z,x,y,z,r11,r21,r22,r31,r32,r33)
00393 
00394 #ifdef __cplusplus
00395 }
00396 #endif
00397 
00398 #endif /* #ifndef _GAN_REPEAT33_H */
00399 #include <gandalf/linalg/3vector.h>
00400 #include <gandalf/linalg/2x2matrix.h>
00414 /* This library is free software; you can redistribute it and/or
00415    modify it under the terms of the GNU Lesser General Public
00416    License as published by the Free Software Foundation; either
00417    version 2.1 of the License, or (at your option) any later version.
00418 
00419    This library is distributed in the hope that it will be useful,
00420    but WITHOUT ANY WARRANTY; without even the implied warranty of
00421    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00422    Lesser General Public License for more details.
00423 
00424    You should have received a copy of the GNU Lesser General Public
00425    License along with this library; if not, write to the Free Software
00426    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00427 */
00428 
00429 #endif /* #ifndef _GAN_MATVECF_MACROS_H */
00430 #include <gandalf/linalg/mat_gen.h>
00431 #include <gandalf/linalg/mat_square.h>
00432 
00433 #ifdef __cplusplus
00434 extern "C" {
00435 #endif
00436 
00447 
00448 typedef struct Gan_Matrix33
00449 {
00450    double xx, xy, xz,
00451           yx, yy, yz,
00452           zx, zy, zz;
00453 } Gan_Matrix33;
00454 
00455 #ifndef NDEBUG
00456 
00457 typedef enum { GAN_SYMMETRIC_MATRIX33, GAN_LOWER_TRI_MATRIX33 }
00458  Gan_SquMatrix33Type;
00459 #endif /* #ifndef NDEBUG */
00460 
00462 typedef struct Gan_SquMatrix33
00463 {
00464 #ifndef NDEBUG
00465    /* square matrix type, for setting and checking in debug mode */
00466    Gan_SquMatrix33Type type;
00467 #endif /* #ifndef NDEBUG */
00468 
00469    /* matrix data */
00470    double xx,
00471           yx, yy,
00472           zx, zy, zz;
00473 } Gan_SquMatrix33;
00474 
00475 /* matrix definitions specific to 3x3 matrices */
00476 #define GAN_ST33_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ)\
00477            (GAN_TEST_OP1(A,Gan_SquMatrix33),gan_eval((A)->type=t),\
00478             GAN_FREP33L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ)))
00479 #define GAN_ST33_IDENT(A,t)\
00480            (GAN_TEST_OP1(A,Gan_SquMatrix33),gan_eval((A)->type=t),\
00481             GAN_FREP33L_A_C((A)->,=,1.0,0.0,1.0,0.0,0.0,1.0))
00482 
00483 /* generic matrix multiply operations */
00484 #define GAN_MAT33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00485  (a p1 = GAN_REP3_OP_AB(b,* c,xx,xy,xz,q1,q2,q3,+),\
00486   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,yz,q1,q2,q3,+),\
00487   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00488 #define GAN_MAT33T_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00489  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00490   a p2 = GAN_REP3_OP_AB(b,* c,xy,yy,zy,q1,q2,q3,+),\
00491   a p3 = GAN_REP3_OP_AB(b,* c,xz,yz,zz,q1,q2,q3,+))
00492 
00493 /* symmetric matrix multiply operation */
00494 #define GAN_SYM33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00495  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00496   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,zy,q1,q2,q3,+),\
00497   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00498 
00499 /* lower triangular matrix multiply operations */
00500 #define GAN_LOW33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00501  (a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00502   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00503   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00504 #define GAN_LOW33I_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00505  (a p1 =  c q1 / b xx,\
00506   a p2 = (c q2 - b yx * a p1) / b yy,\
00507   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz)
00508 
00509 /* upper triangular matrix multiply operations */
00510 #define GAN_UPP33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00511  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00512   a p2 = GAN_REP2_OP_AB(b,* c,yy,zy,q2,q3,+),\
00513   a p3 = GAN_REP1_OP_AB(b,* c,zz,q3,+))
00514 #define GAN_UPP33I_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00515  (a p3 =  c q3 / b zz,\
00516   a p2 = (c q2 - b zy * a p3) / b yy,\
00517   a p1 = (c q1 - b yx * a p2 - b zx * a p3) / b xx)
00518 
00519 /* symmetric/lower triangular square matrix definitions */
00520 #define GAN_ST33_ZERO(A,t)\
00521            (GAN_TEST_OP1(A,Gan_SquMatrix33), gan_eval((A)->type=t),\
00522             GAN_REP33L_AS_C((A)->,=0.0))
00523 #define GAN_ST33_COPY(A,B,t)\
00524            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00525             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00526             GAN_REP33L_AA_C((B)->,=(A)->))
00527 #define GAN_ST33_SCALE(A,a,B,t)\
00528            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00529             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00530             GAN_REP33L_AAS_C((B)->,=(A)->,*(a)))
00531 #define GAN_ST33_DIVIDE(A,a,B,t)\
00532            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00533             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00534             GAN_REP33L_AAS_C((B)->,=(A)->,/(a)))
00535 #define GAN_ST33_NEGATE(A,B,t)\
00536            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00537             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00538             GAN_REP33L_AA_C((B)->,=-(A)->))
00539 #define GAN_ST33_ADD(A,B,C,t)\
00540          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33,Gan_SquMatrix33,Gan_SquMatrix33),\
00541           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00542           GAN_REP33L_AAA_C((C)->,=(A)->,+(B)->))
00543 #define GAN_ST33_SUB(A,B,C,t)\
00544          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33,Gan_SquMatrix33,Gan_SquMatrix33),\
00545           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00546           GAN_REP33L_AAA_C((C)->,=(A)->,-(B)->))
00547 
00548 /* declare functions specific to generic 3x3 matrices */
00562 /* This library is free software; you can redistribute it and/or
00563    modify it under the terms of the GNU Lesser General Public
00564    License as published by the Free Software Foundation; either
00565    version 2.1 of the License, or (at your option) any later version.
00566 
00567    This library is distributed in the hope that it will be useful,
00568    but WITHOUT ANY WARRANTY; without even the implied warranty of
00569    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00570    Lesser General Public License for more details.
00571 
00572    You should have received a copy of the GNU Lesser General Public
00573    License along with this library; if not, write to the Free Software
00574    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00575 */
00576 
00577 #ifndef _GAN_3X3MAT_H
00578 
00595 Gan_Matrix33 *gan_mat33_fill_q ( Gan_Matrix33 *A,
00596                                  double XX, double XY, double XZ,
00597                                  double YX, double YY, double YZ,
00598                                  double ZX, double ZY, double ZZ );
00599 
00624 Gan_Matrix33 *gan_mat33_cross_q ( Gan_Vector3 *p, Gan_Matrix33 *A );
00625 
00647 void gan_mat33_get_rows_q ( Gan_Matrix33 *A,
00648                             Gan_Vector3 *p, Gan_Vector3 *q, Gan_Vector3 *r );
00649 
00661 void gan_mat33_get_cols_q ( Gan_Matrix33 *A,
00662                             Gan_Vector3 *p, Gan_Vector3 *q, Gan_Vector3 *r );
00663 
00671 Gan_Matrix22 *gan_mat33_get_m22tl_q ( Gan_Matrix33 *A, Gan_Matrix22 *B );
00672 
00680 Gan_Vector2 *gan_mat33_get_v2tr_q ( Gan_Matrix33 *A, Gan_Vector2 *p );
00681 
00695 void gan_mat33_get_parts_q ( Gan_Matrix33 *A, Gan_Matrix22 *B,
00696                              Gan_Vector2 *p, Gan_Vector2 *q, double *s );
00697 
00720 Gan_Matrix33 *gan_mat33_set_parts_q ( Gan_Matrix33 *A, Gan_Matrix22 *B,
00721                                       Gan_Vector2 *p, Gan_Vector2 *q,
00722                                       double s );
00723 
00735 Gan_Matrix33 *gan_mat33_set_cols_q ( Gan_Matrix33 *A,
00736                                      Gan_Vector3 *p, Gan_Vector3 *q,
00737                                      Gan_Vector3 *r );
00738 
00751 Gan_Matrix33 *gan_mat33_set_rows_q ( Gan_Matrix33 *A,
00752                                      Gan_Vector3 *p, Gan_Vector3 *q,
00753                                      Gan_Vector3 *r );
00754 
00760 #endif /* #ifndef _GAN_3X3MAT_H */
00761 
00762 #define GAN_MATTYPE Gan_Matrix33
00763 #define GAN_MATRIX_TYPE Gan_Matrix
00764 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
00765 #define GAN_VECTOR_TYPE Gan_Vector
00766 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
00767 #define GAN_REALTYPE double
00768 #define GAN_VECTYPE1 Gan_Vector3
00769 #define GAN_VECTYPE2 Gan_Vector3
00770 #define GAN_MATTYPEL Gan_Matrix33
00771 #define GAN_MATTYPER Gan_Matrix33
00772 #define GAN_SQUMATTYPEL Gan_SquMatrix33
00773 #define GAN_SQUMATTYPER Gan_SquMatrix33
00774 #define GAN_MAT_FPRINT                     gan_mat33_fprint
00775 #define GAN_MAT_PRINT                      gan_mat33_print
00776 #define GAN_MAT_FSCANF                     gan_mat33_fscanf
00777 #define GAN_MAT_FWRITE                     gan_mat33_fwrite
00778 #define GAN_MAT_FREAD                      gan_mat33_fread
00779 #define GAN_MAT_ZERO_Q                     gan_mat33_zero_q
00780 #define GAN_MAT_ZERO_S                     gan_mat33_zero_s
00781 #define GAN_MAT_COPY_Q                     gan_mat33_copy_q
00782 #define GAN_MAT_COPY_S                     gan_mat33_copy_s
00783 #define GAN_MAT_SCALE_Q                    gan_mat33_scale_q
00784 #define GAN_MAT_SCALE_I                    gan_mat33_scale_i
00785 #define GAN_MAT_SCALE_S                    gan_mat33_scale_s
00786 #define GAN_MAT_DIVIDE_Q                   gan_mat33_divide_q
00787 #define GAN_MAT_DIVIDE_I                   gan_mat33_divide_i
00788 #define GAN_MAT_DIVIDE_S                   gan_mat33_divide_s
00789 #define GAN_MAT_NEGATE_Q                   gan_mat33_negate_q
00790 #define GAN_MAT_NEGATE_I                   gan_mat33_negate_i
00791 #define GAN_MAT_NEGATE_S                   gan_mat33_negate_s
00792 #define GAN_MAT_UNIT_Q                     gan_mat33_unit_q
00793 #define GAN_MAT_UNIT_I                     gan_mat33_unit_i
00794 #define GAN_MAT_UNIT_S                     gan_mat33_unit_s
00795 #define GAN_MAT_ADD_Q                      gan_mat33_add_q
00796 #define GAN_MAT_ADD_I1                     gan_mat33_add_i1
00797 #define GAN_MAT_ADD_I2                     gan_mat33_add_i2
00798 #define GAN_MAT_INCREMENT                  gan_mat33_increment
00799 #define GAN_MAT_ADD_S                      gan_mat33_add_s
00800 #define GAN_MAT_SUB_Q                      gan_mat33_sub_q
00801 #define GAN_MAT_SUB_I1                     gan_mat33_sub_i1
00802 #define GAN_MAT_SUB_I2                     gan_mat33_sub_i2
00803 #define GAN_MAT_DECREMENT                  gan_mat33_decrement
00804 #define GAN_MAT_SUB_S                      gan_mat33_sub_s
00805 #define GAN_VEC_OUTER_Q                    gan_vec33_outer_q
00806 #define GAN_VEC_OUTER_S                    gan_vec33_outer_s
00807 #define GAN_MAT_MULTV_Q                    gan_mat33_multv3_q
00808 #define GAN_MAT_MULTV_S                    gan_mat33_multv3_s
00809 #define GAN_MATT_MULTV_Q                   gan_mat33T_multv3_q
00810 #define GAN_MATT_MULTV_S                   gan_mat33T_multv3_s
00811 #define GAN_MAT_LMULTMT_Q                  gan_mat33_lmultm33T_q
00812 #define GAN_MAT_LMULTMT_S                  gan_mat33_lmultm33T_s
00813 #define GAN_MAT_RMULTM_Q                   gan_mat33_rmultm33_q
00814 #define GAN_MAT_RMULTM_S                   gan_mat33_rmultm33_s
00815 #define GAN_MAT_RMULTMT_Q                  gan_mat33_rmultm33T_q
00816 #define GAN_MAT_RMULTMT_S                  gan_mat33_rmultm33T_s
00817 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat33_lmultm33T_sym_q
00818 #define GAN_MAT_LMULTMT_SYM_S              gan_mat33_lmultm33T_sym_s
00819 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat33_rmultm33T_sym_q
00820 #define GAN_MAT_RMULTMT_SYM_S              gan_mat33_rmultm33T_sym_s
00821 #define GAN_MAT_SLMULTT_Q                  gan_mat33_slmultT_q
00822 #define GAN_MAT_SLMULTT_S                  gan_mat33_slmultT_s
00823 #define GAN_MAT_SRMULTT_Q                  gan_mat33_srmultT_q
00824 #define GAN_MAT_SRMULTT_S                  gan_mat33_srmultT_s
00825 #define GAN_MAT_LMULTS_Q                   gan_mat33_lmults33_q
00826 #define GAN_MAT_LMULTS_S                   gan_mat33_lmults33_s
00827 #define GAN_MAT_RMULTS_Q                   gan_mat33_rmults33_q
00828 #define GAN_MAT_RMULTS_S                   gan_mat33_rmults33_s
00829 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33_lrmultm33T_q
00830 #define GAN_SYMMATL_LRMULT_S               gan_symmat33_lrmultm33T_s
00831 #define GAN_SYMMATR_LRMULT_Q               gan_symmat33_lrmultm33_q
00832 #define GAN_SYMMATR_LRMULT_S               gan_symmat33_lrmultm33_s
00833 #define GAN_MAT_LMULTL_Q                   gan_mat33_lmultl33_q
00834 #define GAN_MAT_LMULTL_S                   gan_mat33_lmultl33_s
00835 #define GAN_MAT_LMULTL_I                   gan_mat33_lmultl33_i
00836 #define GAN_MAT_LMULTLI_Q                  gan_mat33_lmultl33I_q
00837 #define GAN_MAT_LMULTLI_S                  gan_mat33_lmultl33I_s
00838 #define GAN_MAT_LMULTLI_I                  gan_mat33_lmultl33I_i
00839 #define GAN_MAT_LMULTLT_Q                  gan_mat33_lmultl33T_q
00840 #define GAN_MAT_LMULTLT_S                  gan_mat33_lmultl33T_s
00841 #define GAN_MAT_LMULTLT_I                  gan_mat33_lmultl33T_i
00842 #define GAN_MAT_LMULTLIT_Q                 gan_mat33_lmultl33IT_q
00843 #define GAN_MAT_LMULTLIT_S                 gan_mat33_lmultl33IT_s
00844 #define GAN_MAT_LMULTLIT_I                 gan_mat33_lmultl33IT_i
00845 #define GAN_MAT_RMULTL_Q                   gan_mat33_rmultl33_q
00846 #define GAN_MAT_RMULTL_S                   gan_mat33_rmultl33_s
00847 #define GAN_MAT_RMULTL_I                   gan_mat33_rmultl33_i
00848 #define GAN_MAT_RMULTLI_Q                  gan_mat33_rmultl33I_q
00849 #define GAN_MAT_RMULTLI_S                  gan_mat33_rmultl33I_s
00850 #define GAN_MAT_RMULTLI_I                  gan_mat33_rmultl33I_i
00851 #define GAN_MAT_RMULTLT_Q                  gan_mat33_rmultl33T_q
00852 #define GAN_MAT_RMULTLT_S                  gan_mat33_rmultl33T_s
00853 #define GAN_MAT_RMULTLT_I                  gan_mat33_rmultl33T_i
00854 #define GAN_MAT_RMULTLIT_Q                 gan_mat33_rmultl33IT_q
00855 #define GAN_MAT_RMULTLIT_S                 gan_mat33_rmultl33IT_s
00856 #define GAN_MAT_RMULTLIT_I                 gan_mat33_rmultl33IT_i
00857 #define GAN_MAT_SUMSQR_Q                   gan_mat33_sumsqr_q
00858 #define GAN_MAT_SUMSQR_S                   gan_mat33_sumsqr_s
00859 #define GAN_MAT_FNORM_Q                    gan_mat33_Fnorm_q
00860 #define GAN_MAT_FNORM_S                    gan_mat33_Fnorm_s
00861 #define GAN_MAT_FROM_MAT_Q                 gan_mat33_from_mat_q
00862 #define GAN_MAT_FROM_MAT_S                 gan_mat33_from_mat_s
00863 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat33_from_squmat_q
00864 #define GAN_MAT_FROM_SQUMAT_S              gan_mat33_from_squmat_s
00865 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat33_from_squmat_q
00866 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat33_from_squmat_s
00867 
00868 #define GAN_SQUMAT_IDENT_Q    gan_mat33_ident_q
00869 #define GAN_SQUMAT_IDENT_S    gan_mat33_ident_s
00870 #define GAN_SQUMAT_TPOSE_Q    gan_mat33_tpose_q
00871 #define GAN_SQUMAT_TPOSE_S    gan_mat33_tpose_s
00872 #define GAN_SQUMAT_TPOSE_I    gan_mat33_tpose_i
00873 #define GAN_MAT_SADDT_Q       gan_mat33_saddT_q
00874 #define GAN_MAT_SADDT_S       gan_mat33_saddT_s
00875 #define GAN_SQUMAT_INVERT     gan_mat33_invert
00876 #define GAN_SQUMAT_INVERT_Q   gan_mat33_invert_q
00877 #define GAN_SQUMAT_INVERT_S   gan_mat33_invert_s
00878 #define GAN_SQUMAT_INVERT_I   gan_mat33_invert_i
00879 #define GAN_SQUMAT_ADJOINT_Q  gan_mat33_adjoint_q
00880 #define GAN_SQUMAT_ADJOINT_S  gan_mat33_adjoint_s
00881 #define GAN_SQUMAT_ADJOINTT_Q gan_mat33_adjointT_q
00882 #define GAN_SQUMAT_ADJOINTT_S gan_mat33_adjointT_s
00883 #define GAN_SQUMAT_DET_Q      gan_mat33_det_q
00884 #define GAN_SQUMAT_DET_S      gan_mat33_det_s
00885 #define GAN_SQUMAT_TRACE_Q    gan_mat33_trace_q
00886 #define GAN_SQUMAT_TRACE_S    gan_mat33_trace_s
00887 
00888 #ifndef _GAN_3X3MAT_H
00889 #define _GAN_3X3MAT_H
00890 
00891 
00892 #endif /* #ifndef _GAN_3X3MAT_H */
00893 
00906 /* This library is free software; you can redistribute it and/or
00907    modify it under the terms of the GNU Lesser General Public
00908    License as published by the Free Software Foundation; either
00909    version 2.1 of the License, or (at your option) any later version.
00910 
00911    This library is distributed in the hope that it will be useful,
00912    but WITHOUT ANY WARRANTY; without even the implied warranty of
00913    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00914    Lesser General Public License for more details.
00915 
00916    You should have received a copy of the GNU Lesser General Public
00917    License along with this library; if not, write to the Free Software
00918    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00919 */
00920 
00921 /* function declarations for functions common to all small square matrix
00922  * types */
00923 
00924 
00925 
00926 /* documentation for macros defined in individual header files */
00927 
00940 Gan_Matrix33 *gan_mat33_ident_q ( Gan_Matrix33 *A );
00941 
00959 Gan_Matrix33 *gan_mat33_tpose_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
00960 
00978 Gan_SquMatrix33 *gan_mat33_saddT_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
00979 
01010 Gan_Matrix33 *gan_mat33_invert_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01011 
01020 Gan_Matrix33 *gan_mat33_invert_i ( Gan_Matrix33 *A );
01021 
01036 double gan_mat33_det_q ( Gan_Matrix33 *A );
01037 
01043 double gan_mat33_trace_q ( Gan_Matrix33 *A );
01044 
01050 #undef GAN_SQUMAT_IDENT_Q
01051 #undef GAN_SQUMAT_IDENT_S
01052 #undef GAN_SQUMAT_TPOSE_Q
01053 #undef GAN_SQUMAT_TPOSE_S
01054 #undef GAN_SQUMAT_TPOSE_I
01055 #undef GAN_MAT_SADDT_Q
01056 #undef GAN_MAT_SADDT_S
01057 #undef GAN_SQUMATI_MULTV_Q
01058 #undef GAN_SQUMATI_MULTV_S
01059 #undef GAN_SQUMATI_MULTV_I
01060 #undef GAN_SQUMATIT_MULTV_Q
01061 #undef GAN_SQUMATIT_MULTV_S
01062 #undef GAN_SQUMATIT_MULTV_I
01063 #undef GAN_SQUMAT_INVERT
01064 #undef GAN_SQUMAT_INVERT_Q
01065 #undef GAN_SQUMAT_INVERT_S
01066 #undef GAN_SQUMAT_INVERT_I
01067 #undef GAN_SQUMAT_ADJOINT_Q
01068 #undef GAN_SQUMAT_ADJOINT_S
01069 #undef GAN_SQUMAT_ADJOINTT_Q
01070 #undef GAN_SQUMAT_ADJOINTT_S
01071 #undef GAN_SQUMAT_DET_Q
01072 #undef GAN_SQUMAT_DET_S
01073 #undef GAN_SQUMAT_TRACE_Q
01074 #undef GAN_SQUMAT_TRACE_S
01075 
01088 /* This library is free software; you can redistribute it and/or
01089    modify it under the terms of the GNU Lesser General Public
01090    License as published by the Free Software Foundation; either
01091    version 2.1 of the License, or (at your option) any later version.
01092 
01093    This library is distributed in the hope that it will be useful,
01094    but WITHOUT ANY WARRANTY; without even the implied warranty of
01095    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01096    Lesser General Public License for more details.
01097 
01098    You should have received a copy of the GNU Lesser General Public
01099    License along with this library; if not, write to the Free Software
01100    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01101 */
01102 
01103 /* function declarations for functions common to all small vector types */
01104 
01105 
01106 
01107 /* documentation for macros defined in individual header files */
01108 
01119 Gan_Matrix33 *gan_mat33_zero_q ( Gan_Matrix33 *A );
01120 
01137 Gan_Matrix33 *gan_mat33_copy_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01138 
01156 Gan_Matrix33 *gan_mat33_scale_q ( Gan_Matrix33 *A, double a,
01157                                Gan_Matrix33 *B );
01158 
01166 Gan_Matrix33 *gan_mat33_scale_i ( Gan_Matrix33 *A, double a );
01167 
01176 Gan_Matrix33 *gan_mat33_divide_q ( Gan_Matrix33 *A, double a,
01177                                 Gan_Matrix33 *B );
01178 
01186 Gan_Matrix33 *gan_mat33_divide_i ( Gan_Matrix33 *A, double a );
01187 
01195 Gan_Matrix33 *gan_mat33_negate_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01196 
01204 Gan_Matrix33 *gan_mat33_negate_i ( Gan_Matrix33 *A );
01205 
01213 Gan_Matrix33 *gan_mat33_unit_i ( Gan_Matrix33 *A );
01214 
01232 Gan_Matrix33 *gan_mat33_add_q ( Gan_Matrix33 *A, Gan_Matrix33 *B, Gan_Matrix33 *C );
01233 
01242 Gan_Matrix33 *gan_mat33_add_i1 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01243 
01252 Gan_Matrix33 *gan_mat33_add_i2 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01253 
01262 Gan_Matrix33 *gan_mat33_increment ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01263 
01281 Gan_Matrix33 *gan_mat33_sub_q ( Gan_Matrix33 *A, Gan_Matrix33 *B, Gan_Matrix33 *C );
01282 
01291 Gan_Matrix33 *gan_mat33_sub_i1 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01292 
01301 Gan_Matrix33 *gan_mat33_sub_i2 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01302 
01311 Gan_Matrix33 *gan_mat33_decrement ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01312 
01330 Gan_Matrix33 *gan_vec33_outer_q ( Gan_Vector3 *p, Gan_Vector3 *q,
01331                                Gan_Matrix33 *A );
01332 
01341 Gan_Vector3 *gan_mat33_multv3_q ( Gan_Matrix33 *A, Gan_Vector3 *p,
01342                                 Gan_Vector3 *q );
01343 
01344 
01353 Gan_Vector3 *gan_mat33T_multv3_q ( Gan_Matrix33 *A, Gan_Vector3 *p,
01354                                  Gan_Vector3 *q );
01355 
01356 
01376 Gan_Matrix33 *gan_mat33_lmultm33T_q ( Gan_Matrix33 *A, Gan_Matrix33 *B,
01377                                  Gan_Matrix33 *C );
01378 
01388 Gan_Matrix33 *gan_mat33_rmultm33_q ( Gan_Matrix33 *A, Gan_Matrix33 *B,
01389                                 Gan_Matrix33 *C );
01390 
01400 Gan_Matrix33 *gan_mat33_rmultm33T_q ( Gan_Matrix33 *A, Gan_Matrix33 *B,
01401                                  Gan_Matrix33 *C );
01402 
01414 Gan_SquMatrix33 *gan_mat33_lmultm33T_sym_q ( Gan_Matrix33 *A, Gan_Matrix33 *B,
01415                                          Gan_SquMatrix33 *C );
01416 
01428 Gan_SquMatrix33 *gan_mat33_rmultm33T_sym_q ( Gan_Matrix33 *A, Gan_Matrix33 *B,
01429                                          Gan_SquMatrix33 *C );
01430 
01439 Gan_Matrix33 *gan_mat33_lmults33_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01440                                 Gan_Matrix33 *C );
01441 
01450 Gan_Matrix33 *gan_mat33_rmults33_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01451                                 Gan_Matrix33 *C );
01452 
01472 Gan_SquMatrix33 *gan_symmat33_lrmultm33T_q ( Gan_SquMatrix33 *A, Gan_Matrix33 *B,
01473                                         Gan_Matrix33 *C, Gan_SquMatrix33 *D );
01474 
01485 Gan_SquMatrix33 *gan_symmat33_lrmultm33_q ( Gan_SquMatrix33 *A, Gan_Matrix33 *B,
01486                                         Gan_Matrix33 *C, Gan_SquMatrix33 *D );
01487 
01506 Gan_Matrix33 *gan_mat33_lmultl33_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01507                                 Gan_Matrix33 *C );
01508 
01518 Gan_Matrix33 *gan_mat33_lmultl33I_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01519                                  Gan_Matrix33 *C );
01520 
01530 Gan_Matrix33 *gan_mat33_lmultl33T_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01531                                  Gan_Matrix33 *C );
01532 
01542 Gan_Matrix33 *gan_mat33_lmultl33IT_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01543                                   Gan_Matrix33 *C );
01544 
01554 Gan_Matrix33 *gan_mat33_rmultl33_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01555                                 Gan_Matrix33 *C );
01556 
01566 Gan_Matrix33 *gan_mat33_rmultl33I_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01567                                  Gan_Matrix33 *C );
01568 
01578 Gan_Matrix33 *gan_mat33_rmultl33T_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01579                                  Gan_Matrix33 *C );
01580 
01590 Gan_Matrix33 *gan_mat33_rmultl33IT_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B,
01591                                   Gan_Matrix33 *C );
01592 
01602 Gan_Matrix33 *gan_mat33_lmultl33_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01603 
01613 Gan_Matrix33 *gan_mat33_lmultl33I_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01614 
01624 Gan_Matrix33 *gan_mat33_lmultl33T_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01625 
01635 Gan_Matrix33 *gan_mat33_lmultl33IT_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01636 
01646 Gan_Matrix33 *gan_mat33_rmultl33_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01647 
01657 Gan_Matrix33 *gan_mat33_rmultl33I_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01658 
01668 Gan_Matrix33 *gan_mat33_rmultl33T_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01669 
01679 Gan_Matrix33 *gan_mat33_rmultl33IT_i ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01680 
01689 Gan_SquMatrix33 *gan_mat33_slmultT_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01690 
01691 
01700 Gan_SquMatrix33 *gan_mat33_srmultT_q ( Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01701 
01702 
01717 double gan_mat33_sumsqr_q ( Gan_Matrix33 *A );
01718 
01725 double gan_mat33_Fnorm_q ( Gan_Matrix33 *A );
01726 
01744 Gan_Matrix33 *gan_mat33_from_mat_q ( Gan_Matrix *A, Gan_Matrix33 *B );
01745 
01754 Gan_Matrix33 *gan_mat33_from_squmat_q ( Gan_SquMatrix *A, Gan_Matrix33 *B );
01755 
01764 Gan_SquMatrix33 *gan_squmat33_from_squmat_q ( Gan_SquMatrix *A,
01765                                             Gan_SquMatrix33 *B );
01766 
01785 /* This library is free software; you can redistribute it and/or
01786    modify it under the terms of the GNU Lesser General Public
01787    License as published by the Free Software Foundation; either
01788    version 2.1 of the License, or (at your option) any later version.
01789 
01790    This library is distributed in the hope that it will be useful,
01791    but WITHOUT ANY WARRANTY; without even the implied warranty of
01792    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01793    Lesser General Public License for more details.
01794 
01795    You should have received a copy of the GNU Lesser General Public
01796    License along with this library; if not, write to the Free Software
01797    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01798 */
01799 
01800 #undef GAN_MATTYPE
01801 #undef GAN_MATRIX_TYPE
01802 #undef GAN_SQUMATRIX_TYPE
01803 #undef GAN_VECTOR_TYPE
01804 #undef GAN_MAT_ELEMENT_TYPE
01805 #undef GAN_REALTYPE
01806 #undef GAN_VECTYPE1
01807 #undef GAN_VECTYPE2
01808 #undef GAN_MATTYPEL
01809 #undef GAN_MATTYPER
01810 #undef GAN_SQUMATTYPEL
01811 #undef GAN_SQUMATTYPER
01812 #undef GAN_FIXED_MATRIX_TYPE
01813 #undef GAN_MAT_FPRINT
01814 #undef GAN_MAT_PRINT
01815 #undef GAN_MAT_FSCANF
01816 #undef GAN_MAT_FWRITE
01817 #undef GAN_MAT_FREAD
01818 #undef GAN_MAT_ZERO_Q
01819 #undef GAN_MAT_ZERO_S
01820 #undef GAN_MAT_COPY_Q
01821 #undef GAN_MAT_COPY_S
01822 #undef GAN_MAT_SCALE_Q
01823 #undef GAN_MAT_SCALE_S
01824 #undef GAN_MAT_SCALE_I
01825 #undef GAN_MAT_DIVIDE_Q
01826 #undef GAN_MAT_DIVIDE_S
01827 #undef GAN_MAT_DIVIDE_I
01828 #undef GAN_MAT_NEGATE_Q
01829 #undef GAN_MAT_NEGATE_S
01830 #undef GAN_MAT_NEGATE_I
01831 #undef GAN_MAT_UNIT_Q
01832 #undef GAN_MAT_UNIT_S
01833 #undef GAN_MAT_UNIT_I
01834 #undef GAN_MAT_ADD_Q
01835 #undef GAN_MAT_ADD_I1
01836 #undef GAN_MAT_ADD_I2
01837 #undef GAN_MAT_INCREMENT
01838 #undef GAN_MAT_ADD_S
01839 #undef GAN_MAT_SUB_Q
01840 #undef GAN_MAT_SUB_I1
01841 #undef GAN_MAT_SUB_I2
01842 #undef GAN_MAT_DECREMENT
01843 #undef GAN_MAT_SUB_S
01844 #undef GAN_VEC_OUTER_Q
01845 #undef GAN_VEC_OUTER_S
01846 #undef GAN_MAT_MULTV_Q
01847 #undef GAN_MAT_MULTV_S
01848 #undef GAN_MAT_MULTV_I
01849 #undef GAN_MATT_MULTV_Q
01850 #undef GAN_MATT_MULTV_S
01851 #undef GAN_MATT_MULTV_I
01852 #undef GAN_MAT_LMULTM_Q
01853 #undef GAN_MAT_LMULTM_S
01854 #undef GAN_MAT_LMULTMT_Q
01855 #undef GAN_MAT_LMULTMT_S
01856 #undef GAN_MAT_RMULTM_Q
01857 #undef GAN_MAT_RMULTM_S
01858 #undef GAN_MAT_RMULTMT_Q
01859 #undef GAN_MAT_RMULTMT_S
01860 #undef GAN_MAT_LMULTMT_SYM_Q
01861 #undef GAN_MAT_LMULTMT_SYM_S
01862 #undef GAN_MAT_RMULTMT_SYM_Q
01863 #undef GAN_MAT_RMULTMT_SYM_S
01864 #undef GAN_MAT_LMULTS_Q
01865 #undef GAN_MAT_LMULTS_S
01866 #undef GAN_MAT_RMULTS_Q
01867 #undef GAN_MAT_RMULTS_S
01868 #undef GAN_SYMMATL_LRMULT_Q
01869 #undef GAN_SYMMATL_LRMULT_S
01870 #undef GAN_SYMMATR_LRMULT_Q
01871 #undef GAN_SYMMATR_LRMULT_S
01872 #undef GAN_MAT_LMULTL_Q
01873 #undef GAN_MAT_LMULTL_S
01874 #undef GAN_MAT_LMULTL_I
01875 #undef GAN_MAT_LMULTLI_Q
01876 #undef GAN_MAT_LMULTLI_S
01877 #undef GAN_MAT_LMULTLI_I
01878 #undef GAN_MAT_LMULTLT_Q
01879 #undef GAN_MAT_LMULTLT_S
01880 #undef GAN_MAT_LMULTLT_I
01881 #undef GAN_MAT_LMULTLIT_Q
01882 #undef GAN_MAT_LMULTLIT_S
01883 #undef GAN_MAT_LMULTLIT_I
01884 #undef GAN_MAT_RMULTL_Q
01885 #undef GAN_MAT_RMULTL_S
01886 #undef GAN_MAT_RMULTL_I
01887 #undef GAN_MAT_RMULTLI_Q
01888 #undef GAN_MAT_RMULTLI_S
01889 #undef GAN_MAT_RMULTLI_I
01890 #undef GAN_MAT_RMULTLT_Q
01891 #undef GAN_MAT_RMULTLT_S
01892 #undef GAN_MAT_RMULTLT_I
01893 #undef GAN_MAT_RMULTLIT_Q
01894 #undef GAN_MAT_RMULTLIT_S
01895 #undef GAN_MAT_RMULTLIT_I
01896 #undef GAN_MAT_SRMULTT_Q
01897 #undef GAN_MAT_SRMULTT_S
01898 #undef GAN_MAT_SRMULTT_I
01899 #undef GAN_MAT_SLMULTT_Q
01900 #undef GAN_MAT_SLMULTT_S
01901 #undef GAN_MAT_SLMULTT_I
01902 #undef GAN_MAT_RMULTLIT_S
01903 #undef GAN_MAT_SUMSQR_Q
01904 #undef GAN_MAT_SUMSQR_S
01905 #undef GAN_MAT_FNORM_Q
01906 #undef GAN_MAT_FNORM_S
01907 #undef GAN_MAT_FROM_MAT_Q
01908 #undef GAN_MAT_FROM_MAT_S
01909 #undef GAN_MAT_FROM_SQUMAT_Q
01910 #undef GAN_MAT_FROM_SQUMAT_S
01911 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01912 #undef GAN_SQUMAT_FROM_SQUMAT_S
01913 
01914 /* declare functions specific to symmetric 3x3 matrices */
01928 /* This library is free software; you can redistribute it and/or
01929    modify it under the terms of the GNU Lesser General Public
01930    License as published by the Free Software Foundation; either
01931    version 2.1 of the License, or (at your option) any later version.
01932 
01933    This library is distributed in the hope that it will be useful,
01934    but WITHOUT ANY WARRANTY; without even the implied warranty of
01935    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01936    Lesser General Public License for more details.
01937 
01938    You should have received a copy of the GNU Lesser General Public
01939    License along with this library; if not, write to the Free Software
01940    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01941 */
01942 
01943 #ifndef _GAN_3X3SYMMAT_H
01944 
01958 Gan_SquMatrix33 *gan_symmat33_fill_q ( Gan_SquMatrix33 *A,
01959                                        double XX,
01960                                        double YX, double YY,
01961                                        double ZX, double ZY, double ZZ );
01962 
01984 void gan_symmat33_get_parts_q ( Gan_SquMatrix33 *A,
01985                                 Gan_SquMatrix22 *B, Gan_Vector2 *p, double *s);
01986 
02009 Gan_SquMatrix33 *gan_symmat33_set_parts_q ( Gan_SquMatrix33 *A,
02010                                             Gan_SquMatrix22 *B,
02011                                             Gan_Vector2 *p, double s );
02012 
02018 #endif /* #ifndef _GAN_3X3SYMMAT_H */
02019 
02020 #define GAN_MATTYPE Gan_SquMatrix33
02021 #define GAN_MATRIX_TYPE Gan_SquMatrix
02022 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
02023 #define GAN_VECTOR_TYPE Gan_Vector
02024 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
02025 #define GAN_REALTYPE double
02026 #define GAN_VECTYPE1 Gan_Vector3
02027 #define GAN_VECTYPE2 Gan_Vector3
02028 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX33
02029 #define GAN_MAT_FPRINT      gan_symmat33_fprint
02030 #define GAN_MAT_PRINT       gan_symmat33_print
02031 #define GAN_MAT_FSCANF      gan_symmat33_fscanf
02032 #define GAN_MAT_FWRITE      gan_symmat33_fwrite
02033 #define GAN_MAT_FREAD       gan_symmat33_fread
02034 #define GAN_MAT_ZERO_Q      gan_symmat33_zero_q
02035 #define GAN_MAT_ZERO_S      gan_symmat33_zero_s
02036 #define GAN_MAT_COPY_Q      gan_symmat33_copy_q
02037 #define GAN_MAT_COPY_S      gan_symmat33_copy_s
02038 #define GAN_MAT_SCALE_Q     gan_symmat33_scale_q
02039 #define GAN_MAT_SCALE_S     gan_symmat33_scale_s
02040 #define GAN_MAT_SCALE_I     gan_symmat33_scale_i
02041 #define GAN_MAT_DIVIDE_Q    gan_symmat33_divide_q
02042 #define GAN_MAT_DIVIDE_S    gan_symmat33_divide_s
02043 #define GAN_MAT_DIVIDE_I    gan_symmat33_divide_i
02044 #define GAN_MAT_NEGATE_Q    gan_symmat33_negate_q
02045 #define GAN_MAT_NEGATE_S    gan_symmat33_negate_s
02046 #define GAN_MAT_NEGATE_I    gan_symmat33_negate_i
02047 #define GAN_MAT_UNIT_Q      gan_symmat33_unit_q
02048 #define GAN_MAT_UNIT_S      gan_symmat33_unit_s
02049 #define GAN_MAT_UNIT_I      gan_symmat33_unit_i
02050 #define GAN_MAT_ADD_Q       gan_symmat33_add_q
02051 #define GAN_MAT_ADD_I1      gan_symmat33_add_i1
02052 #define GAN_MAT_ADD_I2      gan_symmat33_add_i2
02053 #define GAN_MAT_INCREMENT   gan_symmat33_increment
02054 #define GAN_MAT_ADD_S       gan_symmat33_add_s
02055 #define GAN_MAT_SUB_Q       gan_symmat33_sub_q
02056 #define GAN_MAT_SUB_I1      gan_symmat33_sub_i1
02057 #define GAN_MAT_SUB_I2      gan_symmat33_sub_i2
02058 #define GAN_MAT_DECREMENT   gan_symmat33_decrement
02059 #define GAN_MAT_SUB_S       gan_symmat33_sub_s
02060 #define GAN_MAT_MULTV_Q     gan_symmat33_multv3_q
02061 #define GAN_MAT_MULTV_S     gan_symmat33_multv3_s
02062 #define GAN_MAT_SUMSQR_Q    gan_symmat33_sumsqr_q
02063 #define GAN_MAT_SUMSQR_S    gan_symmat33_sumsqr_s
02064 #define GAN_MAT_FNORM_Q     gan_symmat33_Fnorm_q
02065 #define GAN_MAT_FNORM_S     gan_symmat33_Fnorm_s
02066 
02067 #define GAN_SQUMAT_IDENT_Q    gan_symmat33_ident_q
02068 #define GAN_SQUMAT_IDENT_S    gan_symmat33_ident_s
02069 #define GAN_SQUMAT_INVERT     gan_symmat33_invert
02070 #define GAN_SQUMAT_INVERT_Q   gan_symmat33_invert_q
02071 #define GAN_SQUMAT_INVERT_S   gan_symmat33_invert_s
02072 #define GAN_SQUMAT_INVERT_I   gan_symmat33_invert_i
02073 #define GAN_SQUMAT_DET_Q      gan_symmat33_det_q
02074 #define GAN_SQUMAT_DET_S      gan_symmat33_det_s
02075 #define GAN_SQUMAT_TRACE_Q    gan_symmat33_trace_q
02076 #define GAN_SQUMAT_TRACE_S    gan_symmat33_trace_s
02077 
02078 #define GAN_VEC_OUTER_SYM_Q gan_vec33_outer_sym_q
02079 #define GAN_VEC_OUTER_SYM_S gan_vec33_outer_sym_s
02080 #define GAN_SYMMAT_CHOLESKY   gan_symmat33_cholesky
02081 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat33_cholesky_q
02082 #define GAN_SYMMAT_CHOLESKY_S gan_symmat33_cholesky_s
02083 #define GAN_SYMMAT_CHOLESKY_I gan_symmat33_cholesky_i
02084 
02085 #ifndef _GAN_3X3SYMMAT_H
02086 #define _GAN_3X3SYMMAT_H
02087 
02088 
02089 #endif /* #ifndef _GAN_3X3SYMMAT_H */
02090 
02103 /* This library is free software; you can redistribute it and/or
02104    modify it under the terms of the GNU Lesser General Public
02105    License as published by the Free Software Foundation; either
02106    version 2.1 of the License, or (at your option) any later version.
02107 
02108    This library is distributed in the hope that it will be useful,
02109    but WITHOUT ANY WARRANTY; without even the implied warranty of
02110    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02111    Lesser General Public License for more details.
02112 
02113    You should have received a copy of the GNU Lesser General Public
02114    License along with this library; if not, write to the Free Software
02115    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02116 */
02117 
02118 /* function declarations for functions common to all small symmetric matrix
02119  * types */
02120 
02121 
02122 
02123 /* documentation for macros defined in individual header files */
02124 
02135 Gan_SquMatrix33 *gan_vec33_outer_sym_q ( Gan_Vector3 *p, Gan_SquMatrix33 *A );
02136 
02158 Gan_SquMatrix33 *gan_symmat33_cholesky_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02159 
02168 Gan_SquMatrix33 *gan_symmat33_cholesky_i ( Gan_SquMatrix33 *A );
02169 
02175 #undef GAN_VEC_OUTER_SYM_Q
02176 #undef GAN_VEC_OUTER_SYM_S
02177 #undef GAN_SYMMAT_CHOLESKY
02178 #undef GAN_SYMMAT_CHOLESKY_Q
02179 #undef GAN_SYMMAT_CHOLESKY_S
02180 #undef GAN_SYMMAT_CHOLESKY_I
02181 
02194 /* This library is free software; you can redistribute it and/or
02195    modify it under the terms of the GNU Lesser General Public
02196    License as published by the Free Software Foundation; either
02197    version 2.1 of the License, or (at your option) any later version.
02198 
02199    This library is distributed in the hope that it will be useful,
02200    but WITHOUT ANY WARRANTY; without even the implied warranty of
02201    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02202    Lesser General Public License for more details.
02203 
02204    You should have received a copy of the GNU Lesser General Public
02205    License along with this library; if not, write to the Free Software
02206    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02207 */
02208 
02209 /* function declarations for functions common to all small square matrix
02210  * types */
02211 
02212 
02213 
02214 /* documentation for macros defined in individual header files */
02215 
02228 Gan_SquMatrix33 *gan_symmat33_ident_q ( Gan_SquMatrix33 *A );
02229 
02280 Gan_SquMatrix33 *gan_symmat33_invert_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02281 
02290 Gan_SquMatrix33 *gan_symmat33_invert_i ( Gan_SquMatrix33 *A );
02291 
02306 double gan_symmat33_det_q ( Gan_SquMatrix33 *A );
02307 
02313 double gan_symmat33_trace_q ( Gan_SquMatrix33 *A );
02314 
02320 #undef GAN_SQUMAT_IDENT_Q
02321 #undef GAN_SQUMAT_IDENT_S
02322 #undef GAN_SQUMAT_TPOSE_Q
02323 #undef GAN_SQUMAT_TPOSE_S
02324 #undef GAN_SQUMAT_TPOSE_I
02325 #undef GAN_MAT_SADDT_Q
02326 #undef GAN_MAT_SADDT_S
02327 #undef GAN_SQUMATI_MULTV_Q
02328 #undef GAN_SQUMATI_MULTV_S
02329 #undef GAN_SQUMATI_MULTV_I
02330 #undef GAN_SQUMATIT_MULTV_Q
02331 #undef GAN_SQUMATIT_MULTV_S
02332 #undef GAN_SQUMATIT_MULTV_I
02333 #undef GAN_SQUMAT_INVERT
02334 #undef GAN_SQUMAT_INVERT_Q
02335 #undef GAN_SQUMAT_INVERT_S
02336 #undef GAN_SQUMAT_INVERT_I
02337 #undef GAN_SQUMAT_ADJOINT_Q
02338 #undef GAN_SQUMAT_ADJOINT_S
02339 #undef GAN_SQUMAT_ADJOINTT_Q
02340 #undef GAN_SQUMAT_ADJOINTT_S
02341 #undef GAN_SQUMAT_DET_Q
02342 #undef GAN_SQUMAT_DET_S
02343 #undef GAN_SQUMAT_TRACE_Q
02344 #undef GAN_SQUMAT_TRACE_S
02345 
02358 /* This library is free software; you can redistribute it and/or
02359    modify it under the terms of the GNU Lesser General Public
02360    License as published by the Free Software Foundation; either
02361    version 2.1 of the License, or (at your option) any later version.
02362 
02363    This library is distributed in the hope that it will be useful,
02364    but WITHOUT ANY WARRANTY; without even the implied warranty of
02365    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02366    Lesser General Public License for more details.
02367 
02368    You should have received a copy of the GNU Lesser General Public
02369    License along with this library; if not, write to the Free Software
02370    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02371 */
02372 
02373 /* function declarations for functions common to all small vector types */
02374 
02375 
02376 
02377 /* documentation for macros defined in individual header files */
02378 
02389 Gan_SquMatrix33 *gan_symmat33_zero_q ( Gan_SquMatrix33 *A );
02390 
02407 Gan_SquMatrix33 *gan_symmat33_copy_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02408 
02426 Gan_SquMatrix33 *gan_symmat33_scale_q ( Gan_SquMatrix33 *A, double a,
02427                                Gan_SquMatrix33 *B );
02428 
02436 Gan_SquMatrix33 *gan_symmat33_scale_i ( Gan_SquMatrix33 *A, double a );
02437 
02446 Gan_SquMatrix33 *gan_symmat33_divide_q ( Gan_SquMatrix33 *A, double a,
02447                                 Gan_SquMatrix33 *B );
02448 
02456 Gan_SquMatrix33 *gan_symmat33_divide_i ( Gan_SquMatrix33 *A, double a );
02457 
02465 Gan_SquMatrix33 *gan_symmat33_negate_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02466 
02474 Gan_SquMatrix33 *gan_symmat33_negate_i ( Gan_SquMatrix33 *A );
02475 
02483 Gan_SquMatrix33 *gan_symmat33_unit_i ( Gan_SquMatrix33 *A );
02484 
02502 Gan_SquMatrix33 *gan_symmat33_add_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
02503 
02512 Gan_SquMatrix33 *gan_symmat33_add_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02513 
02522 Gan_SquMatrix33 *gan_symmat33_add_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02523 
02532 Gan_SquMatrix33 *gan_symmat33_increment ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02533 
02551 Gan_SquMatrix33 *gan_symmat33_sub_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
02552 
02561 Gan_SquMatrix33 *gan_symmat33_sub_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02562 
02571 Gan_SquMatrix33 *gan_symmat33_sub_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02572 
02581 Gan_SquMatrix33 *gan_symmat33_decrement ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02582 
02601 Gan_Vector3 *gan_symmat33_multv3_q ( Gan_SquMatrix33 *A, Gan_Vector3 *p,
02602                                 Gan_Vector3 *q );
02603 
02604 
02605 
02606 
02678 double gan_symmat33_sumsqr_q ( Gan_SquMatrix33 *A );
02679 
02686 double gan_symmat33_Fnorm_q ( Gan_SquMatrix33 *A );
02687 
02718 /* This library is free software; you can redistribute it and/or
02719    modify it under the terms of the GNU Lesser General Public
02720    License as published by the Free Software Foundation; either
02721    version 2.1 of the License, or (at your option) any later version.
02722 
02723    This library is distributed in the hope that it will be useful,
02724    but WITHOUT ANY WARRANTY; without even the implied warranty of
02725    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02726    Lesser General Public License for more details.
02727 
02728    You should have received a copy of the GNU Lesser General Public
02729    License along with this library; if not, write to the Free Software
02730    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02731 */
02732 
02733 #undef GAN_MATTYPE
02734 #undef GAN_MATRIX_TYPE
02735 #undef GAN_SQUMATRIX_TYPE
02736 #undef GAN_VECTOR_TYPE
02737 #undef GAN_MAT_ELEMENT_TYPE
02738 #undef GAN_REALTYPE
02739 #undef GAN_VECTYPE1
02740 #undef GAN_VECTYPE2
02741 #undef GAN_MATTYPEL
02742 #undef GAN_MATTYPER
02743 #undef GAN_SQUMATTYPEL
02744 #undef GAN_SQUMATTYPER
02745 #undef GAN_FIXED_MATRIX_TYPE
02746 #undef GAN_MAT_FPRINT
02747 #undef GAN_MAT_PRINT
02748 #undef GAN_MAT_FSCANF
02749 #undef GAN_MAT_FWRITE
02750 #undef GAN_MAT_FREAD
02751 #undef GAN_MAT_ZERO_Q
02752 #undef GAN_MAT_ZERO_S
02753 #undef GAN_MAT_COPY_Q
02754 #undef GAN_MAT_COPY_S
02755 #undef GAN_MAT_SCALE_Q
02756 #undef GAN_MAT_SCALE_S
02757 #undef GAN_MAT_SCALE_I
02758 #undef GAN_MAT_DIVIDE_Q
02759 #undef GAN_MAT_DIVIDE_S
02760 #undef GAN_MAT_DIVIDE_I
02761 #undef GAN_MAT_NEGATE_Q
02762 #undef GAN_MAT_NEGATE_S
02763 #undef GAN_MAT_NEGATE_I
02764 #undef GAN_MAT_UNIT_Q
02765 #undef GAN_MAT_UNIT_S
02766 #undef GAN_MAT_UNIT_I
02767 #undef GAN_MAT_ADD_Q
02768 #undef GAN_MAT_ADD_I1
02769 #undef GAN_MAT_ADD_I2
02770 #undef GAN_MAT_INCREMENT
02771 #undef GAN_MAT_ADD_S
02772 #undef GAN_MAT_SUB_Q
02773 #undef GAN_MAT_SUB_I1
02774 #undef GAN_MAT_SUB_I2
02775 #undef GAN_MAT_DECREMENT
02776 #undef GAN_MAT_SUB_S
02777 #undef GAN_VEC_OUTER_Q
02778 #undef GAN_VEC_OUTER_S
02779 #undef GAN_MAT_MULTV_Q
02780 #undef GAN_MAT_MULTV_S
02781 #undef GAN_MAT_MULTV_I
02782 #undef GAN_MATT_MULTV_Q
02783 #undef GAN_MATT_MULTV_S
02784 #undef GAN_MATT_MULTV_I
02785 #undef GAN_MAT_LMULTM_Q
02786 #undef GAN_MAT_LMULTM_S
02787 #undef GAN_MAT_LMULTMT_Q
02788 #undef GAN_MAT_LMULTMT_S
02789 #undef GAN_MAT_RMULTM_Q
02790 #undef GAN_MAT_RMULTM_S
02791 #undef GAN_MAT_RMULTMT_Q
02792 #undef GAN_MAT_RMULTMT_S
02793 #undef GAN_MAT_LMULTMT_SYM_Q
02794 #undef GAN_MAT_LMULTMT_SYM_S
02795 #undef GAN_MAT_RMULTMT_SYM_Q
02796 #undef GAN_MAT_RMULTMT_SYM_S
02797 #undef GAN_MAT_LMULTS_Q
02798 #undef GAN_MAT_LMULTS_S
02799 #undef GAN_MAT_RMULTS_Q
02800 #undef GAN_MAT_RMULTS_S
02801 #undef GAN_SYMMATL_LRMULT_Q
02802 #undef GAN_SYMMATL_LRMULT_S
02803 #undef GAN_SYMMATR_LRMULT_Q
02804 #undef GAN_SYMMATR_LRMULT_S
02805 #undef GAN_MAT_LMULTL_Q
02806 #undef GAN_MAT_LMULTL_S
02807 #undef GAN_MAT_LMULTL_I
02808 #undef GAN_MAT_LMULTLI_Q
02809 #undef GAN_MAT_LMULTLI_S
02810 #undef GAN_MAT_LMULTLI_I
02811 #undef GAN_MAT_LMULTLT_Q
02812 #undef GAN_MAT_LMULTLT_S
02813 #undef GAN_MAT_LMULTLT_I
02814 #undef GAN_MAT_LMULTLIT_Q
02815 #undef GAN_MAT_LMULTLIT_S
02816 #undef GAN_MAT_LMULTLIT_I
02817 #undef GAN_MAT_RMULTL_Q
02818 #undef GAN_MAT_RMULTL_S
02819 #undef GAN_MAT_RMULTL_I
02820 #undef GAN_MAT_RMULTLI_Q
02821 #undef GAN_MAT_RMULTLI_S
02822 #undef GAN_MAT_RMULTLI_I
02823 #undef GAN_MAT_RMULTLT_Q
02824 #undef GAN_MAT_RMULTLT_S
02825 #undef GAN_MAT_RMULTLT_I
02826 #undef GAN_MAT_RMULTLIT_Q
02827 #undef GAN_MAT_RMULTLIT_S
02828 #undef GAN_MAT_RMULTLIT_I
02829 #undef GAN_MAT_SRMULTT_Q
02830 #undef GAN_MAT_SRMULTT_S
02831 #undef GAN_MAT_SRMULTT_I
02832 #undef GAN_MAT_SLMULTT_Q
02833 #undef GAN_MAT_SLMULTT_S
02834 #undef GAN_MAT_SLMULTT_I
02835 #undef GAN_MAT_RMULTLIT_S
02836 #undef GAN_MAT_SUMSQR_Q
02837 #undef GAN_MAT_SUMSQR_S
02838 #undef GAN_MAT_FNORM_Q
02839 #undef GAN_MAT_FNORM_S
02840 #undef GAN_MAT_FROM_MAT_Q
02841 #undef GAN_MAT_FROM_MAT_S
02842 #undef GAN_MAT_FROM_SQUMAT_Q
02843 #undef GAN_MAT_FROM_SQUMAT_S
02844 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02845 #undef GAN_SQUMAT_FROM_SQUMAT_S
02846 
02847 /* declare functions specific to lower triangular 3x3 matrices */
02861 /* This library is free software; you can redistribute it and/or
02862    modify it under the terms of the GNU Lesser General Public
02863    License as published by the Free Software Foundation; either
02864    version 2.1 of the License, or (at your option) any later version.
02865 
02866    This library is distributed in the hope that it will be useful,
02867    but WITHOUT ANY WARRANTY; without even the implied warranty of
02868    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02869    Lesser General Public License for more details.
02870 
02871    You should have received a copy of the GNU Lesser General Public
02872    License along with this library; if not, write to the Free Software
02873    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02874 */
02875 
02876 #ifndef _GAN_3X3LTMAT_H
02877 
02893 Gan_SquMatrix33 *gan_ltmat33_fill_q ( Gan_SquMatrix33 *A,
02894                                       double XX,
02895                                       double YX, double YY,
02896                                       double ZX, double ZY, double ZZ );
02897 
02917 void gan_ltmat33_get_parts_q ( Gan_SquMatrix33 *A,
02918                               Gan_SquMatrix22 *B, Gan_Vector2 *p, double *s );
02919 
02942 Gan_SquMatrix33 * gan_ltmat33_set_parts_q ( Gan_SquMatrix33 *A,
02943                                             Gan_SquMatrix22 *B,
02944                                             Gan_Vector2 *p, double s );
02945 
02951 #endif /* #ifndef _GAN_3X3LTMAT_H */
02952 
02953 #define GAN_MATTYPE Gan_SquMatrix33
02954 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
02955 #define GAN_REALTYPE double
02956 #define GAN_VECTYPE1 Gan_Vector3
02957 #define GAN_VECTYPE2 Gan_Vector3
02958 #define GAN_SQUMATTYPEL Gan_SquMatrix33
02959 #define GAN_SQUMATTYPER Gan_SquMatrix33
02960 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33
02961 #define GAN_MAT_FPRINT     gan_ltmat33_fprint
02962 #define GAN_MAT_PRINT      gan_ltmat33_print
02963 #define GAN_MAT_FSCANF     gan_ltmat33_fscanf
02964 #define GAN_MAT_FWRITE     gan_ltmat33_fwrite
02965 #define GAN_MAT_FREAD      gan_ltmat33_fread
02966 #define GAN_MAT_ZERO_Q     gan_ltmat33_zero_q
02967 #define GAN_MAT_ZERO_S     gan_ltmat33_zero_s
02968 #define GAN_MAT_COPY_Q     gan_ltmat33_copy_q
02969 #define GAN_MAT_COPY_S     gan_ltmat33_copy_s
02970 #define GAN_MAT_SCALE_Q    gan_ltmat33_scale_q
02971 #define GAN_MAT_SCALE_S    gan_ltmat33_scale_s
02972 #define GAN_MAT_SCALE_I    gan_ltmat33_scale_i
02973 #define GAN_MAT_DIVIDE_Q   gan_ltmat33_divide_q
02974 #define GAN_MAT_DIVIDE_S   gan_ltmat33_divide_s
02975 #define GAN_MAT_DIVIDE_I   gan_ltmat33_divide_i
02976 #define GAN_MAT_NEGATE_Q   gan_ltmat33_negate_q
02977 #define GAN_MAT_NEGATE_S   gan_ltmat33_negate_s
02978 #define GAN_MAT_NEGATE_I   gan_ltmat33_negate_i
02979 #define GAN_MAT_UNIT_Q     gan_ltmat33_unit_q
02980 #define GAN_MAT_UNIT_S     gan_ltmat33_unit_s
02981 #define GAN_MAT_UNIT_I     gan_ltmat33_unit_i
02982 #define GAN_MAT_ADD_Q      gan_ltmat33_add_q
02983 #define GAN_MAT_ADD_I1     gan_ltmat33_add_i1
02984 #define GAN_MAT_ADD_I2     gan_ltmat33_add_i2
02985 #define GAN_MAT_INCREMENT  gan_ltmat33_increment
02986 #define GAN_MAT_ADD_S      gan_ltmat33_add_s
02987 #define GAN_MAT_SUB_Q      gan_ltmat33_sub_q
02988 #define GAN_MAT_SUB_I1     gan_ltmat33_sub_i1
02989 #define GAN_MAT_SUB_I2     gan_ltmat33_sub_i2
02990 #define GAN_MAT_DECREMENT  gan_ltmat33_decrement
02991 #define GAN_MAT_SUB_S      gan_ltmat33_sub_s
02992 #define GAN_MAT_MULTV_Q    gan_ltmat33_multv3_q
02993 #define GAN_MAT_MULTV_S    gan_ltmat33_multv3_s
02994 #define GAN_MAT_MULTV_I    gan_ltmat33_multv3_i
02995 #define GAN_MATT_MULTV_Q   gan_ltmat33T_multv3_q
02996 #define GAN_MATT_MULTV_S   gan_ltmat33T_multv3_s
02997 #define GAN_MATT_MULTV_I   gan_ltmat33T_multv3_i
02998 #define GAN_MAT_SRMULTT_Q  gan_ltmat33_srmultT_q
02999 #define GAN_MAT_SRMULTT_S  gan_ltmat33_srmultT_s
03000 #define GAN_MAT_SRMULTT_I  gan_ltmat33_srmultT_i
03001 #define GAN_MAT_SLMULTT_Q  gan_ltmat33_slmultT_q
03002 #define GAN_MAT_SLMULTT_S  gan_ltmat33_slmultT_s
03003 #define GAN_MAT_SLMULTT_I  gan_ltmat33_slmultT_i
03004 #define GAN_MAT_SUMSQR_Q   gan_ltmat33_sumsqr_q
03005 #define GAN_MAT_SUMSQR_S   gan_ltmat33_sumsqr_s
03006 #define GAN_MAT_FNORM_Q    gan_ltmat33_Fnorm_q
03007 #define GAN_MAT_FNORM_S    gan_ltmat33_Fnorm_s
03008 
03009 #define GAN_SQUMAT_IDENT_Q    gan_ltmat33_ident_q
03010 #define GAN_SQUMAT_IDENT_S    gan_ltmat33_ident_s
03011 #define GAN_SQUMATI_MULTV_Q   gan_ltmat33I_multv3_q
03012 #define GAN_SQUMATI_MULTV_S   gan_ltmat33I_multv3_s
03013 #define GAN_SQUMATI_MULTV_I   gan_ltmat33I_multv3_i
03014 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat33IT_multv3_q
03015 #define GAN_SQUMATIT_MULTV_S  gan_ltmat33IT_multv3_s
03016 #define GAN_SQUMATIT_MULTV_I  gan_ltmat33IT_multv3_i
03017 #define GAN_SQUMAT_INVERT     gan_ltmat33_invert
03018 #define GAN_SQUMAT_INVERT_Q   gan_ltmat33_invert_q
03019 #define GAN_SQUMAT_INVERT_S   gan_ltmat33_invert_s
03020 #define GAN_SQUMAT_INVERT_I   gan_ltmat33_invert_i
03021 #define GAN_SQUMAT_DET_Q      gan_ltmat33_det_q
03022 #define GAN_SQUMAT_DET_S      gan_ltmat33_det_s
03023 #define GAN_SQUMAT_TRACE_Q    gan_ltmat33_trace_q
03024 #define GAN_SQUMAT_TRACE_S    gan_ltmat33_trace_s
03025 
03026 #ifndef _GAN_3X3LTMAT_H
03027 #define _GAN_3X3LTMAT_H
03028 
03029 
03030 #endif /* #ifndef _GAN_3X3LTMAT_H */
03031 
03044 /* This library is free software; you can redistribute it and/or
03045    modify it under the terms of the GNU Lesser General Public
03046    License as published by the Free Software Foundation; either
03047    version 2.1 of the License, or (at your option) any later version.
03048 
03049    This library is distributed in the hope that it will be useful,
03050    but WITHOUT ANY WARRANTY; without even the implied warranty of
03051    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03052    Lesser General Public License for more details.
03053 
03054    You should have received a copy of the GNU Lesser General Public
03055    License along with this library; if not, write to the Free Software
03056    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03057 */
03058 
03059 /* function declarations for functions common to all small square matrix
03060  * types */
03061 
03062 
03063 
03064 /* documentation for macros defined in individual header files */
03065 
03078 Gan_SquMatrix33 *gan_ltmat33_ident_q ( Gan_SquMatrix33 *A );
03079 
03117 Gan_Vector3 *gan_ltmat33I_multv3_q ( Gan_SquMatrix33 *A, Gan_Vector3 *p,
03118                                     Gan_Vector3 *q );
03119 
03128 Gan_Vector3 *gan_ltmat33I_multv3_i ( Gan_SquMatrix33 *A, Gan_Vector3 *p );
03129 
03138 Gan_Vector3 *gan_ltmat33IT_multv3_q ( Gan_SquMatrix33 *A, Gan_Vector3 *p,
03139                                      Gan_Vector3 *q );
03140 
03149 Gan_Vector3 *gan_ltmat33IT_multv3_i ( Gan_SquMatrix33 *A, Gan_Vector3 *p );
03150 
03168 Gan_SquMatrix33 *gan_ltmat33_invert_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03169 
03178 Gan_SquMatrix33 *gan_ltmat33_invert_i ( Gan_SquMatrix33 *A );
03179 
03194 double gan_ltmat33_det_q ( Gan_SquMatrix33 *A );
03195 
03201 double gan_ltmat33_trace_q ( Gan_SquMatrix33 *A );
03202 
03208 #undef GAN_SQUMAT_IDENT_Q
03209 #undef GAN_SQUMAT_IDENT_S
03210 #undef GAN_SQUMAT_TPOSE_Q
03211 #undef GAN_SQUMAT_TPOSE_S
03212 #undef GAN_SQUMAT_TPOSE_I
03213 #undef GAN_MAT_SADDT_Q
03214 #undef GAN_MAT_SADDT_S
03215 #undef GAN_SQUMATI_MULTV_Q
03216 #undef GAN_SQUMATI_MULTV_S
03217 #undef GAN_SQUMATI_MULTV_I
03218 #undef GAN_SQUMATIT_MULTV_Q
03219 #undef GAN_SQUMATIT_MULTV_S
03220 #undef GAN_SQUMATIT_MULTV_I
03221 #undef GAN_SQUMAT_INVERT
03222 #undef GAN_SQUMAT_INVERT_Q
03223 #undef GAN_SQUMAT_INVERT_S
03224 #undef GAN_SQUMAT_INVERT_I
03225 #undef GAN_SQUMAT_ADJOINT_Q
03226 #undef GAN_SQUMAT_ADJOINT_S
03227 #undef GAN_SQUMAT_ADJOINTT_Q
03228 #undef GAN_SQUMAT_ADJOINTT_S
03229 #undef GAN_SQUMAT_DET_Q
03230 #undef GAN_SQUMAT_DET_S
03231 #undef GAN_SQUMAT_TRACE_Q
03232 #undef GAN_SQUMAT_TRACE_S
03233 
03246 /* This library is free software; you can redistribute it and/or
03247    modify it under the terms of the GNU Lesser General Public
03248    License as published by the Free Software Foundation; either
03249    version 2.1 of the License, or (at your option) any later version.
03250 
03251    This library is distributed in the hope that it will be useful,
03252    but WITHOUT ANY WARRANTY; without even the implied warranty of
03253    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03254    Lesser General Public License for more details.
03255 
03256    You should have received a copy of the GNU Lesser General Public
03257    License along with this library; if not, write to the Free Software
03258    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03259 */
03260 
03261 /* function declarations for functions common to all small vector types */
03262 
03263 
03264 
03265 /* documentation for macros defined in individual header files */
03266 
03277 Gan_SquMatrix33 *gan_ltmat33_zero_q ( Gan_SquMatrix33 *A );
03278 
03295 Gan_SquMatrix33 *gan_ltmat33_copy_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03296 
03314 Gan_SquMatrix33 *gan_ltmat33_scale_q ( Gan_SquMatrix33 *A, double a,
03315                                Gan_SquMatrix33 *B );
03316 
03324 Gan_SquMatrix33 *gan_ltmat33_scale_i ( Gan_SquMatrix33 *A, double a );
03325 
03334 Gan_SquMatrix33 *gan_ltmat33_divide_q ( Gan_SquMatrix33 *A, double a,
03335                                 Gan_SquMatrix33 *B );
03336 
03344 Gan_SquMatrix33 *gan_ltmat33_divide_i ( Gan_SquMatrix33 *A, double a );
03345 
03353 Gan_SquMatrix33 *gan_ltmat33_negate_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03354 
03362 Gan_SquMatrix33 *gan_ltmat33_negate_i ( Gan_SquMatrix33 *A );
03363 
03371 Gan_SquMatrix33 *gan_ltmat33_unit_i ( Gan_SquMatrix33 *A );
03372 
03390 Gan_SquMatrix33 *gan_ltmat33_add_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
03391 
03400 Gan_SquMatrix33 *gan_ltmat33_add_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03401 
03410 Gan_SquMatrix33 *gan_ltmat33_add_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03411 
03420 Gan_SquMatrix33 *gan_ltmat33_increment ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03421 
03439 Gan_SquMatrix33 *gan_ltmat33_sub_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
03440 
03449 Gan_SquMatrix33 *gan_ltmat33_sub_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03450 
03459 Gan_SquMatrix33 *gan_ltmat33_sub_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03460 
03469 Gan_SquMatrix33 *gan_ltmat33_decrement ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03470 
03489 Gan_Vector3 *gan_ltmat33_multv3_q ( Gan_SquMatrix33 *A, Gan_Vector3 *p,
03490                                 Gan_Vector3 *q );
03491 
03500 Gan_Vector3 *gan_ltmat33_multv3_i ( Gan_SquMatrix33 *A, Gan_Vector3 *p );
03501 
03510 Gan_Vector3 *gan_ltmat33T_multv3_q ( Gan_SquMatrix33 *A, Gan_Vector3 *p,
03511                                  Gan_Vector3 *q );
03512 
03521 Gan_Vector3 *gan_ltmat33T_multv3_i ( Gan_SquMatrix33 *A, Gan_Vector3 *p );
03522 
03584 Gan_SquMatrix33 *gan_ltmat33_slmultT_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03585 
03595 Gan_SquMatrix33 *gan_ltmat33_slmultT_i ( Gan_SquMatrix33 *A );
03596 
03605 Gan_SquMatrix33 *gan_ltmat33_srmultT_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03606 
03616 Gan_SquMatrix33 *gan_ltmat33_srmultT_i ( Gan_SquMatrix33 *A );
03617 
03632 double gan_ltmat33_sumsqr_q ( Gan_SquMatrix33 *A );
03633 
03640 double gan_ltmat33_Fnorm_q ( Gan_SquMatrix33 *A );
03641 
03672 /* This library is free software; you can redistribute it and/or
03673    modify it under the terms of the GNU Lesser General Public
03674    License as published by the Free Software Foundation; either
03675    version 2.1 of the License, or (at your option) any later version.
03676 
03677    This library is distributed in the hope that it will be useful,
03678    but WITHOUT ANY WARRANTY; without even the implied warranty of
03679    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03680    Lesser General Public License for more details.
03681 
03682    You should have received a copy of the GNU Lesser General Public
03683    License along with this library; if not, write to the Free Software
03684    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03685 */
03686 
03687 #undef GAN_MATTYPE
03688 #undef GAN_MATRIX_TYPE
03689 #undef GAN_SQUMATRIX_TYPE
03690 #undef GAN_VECTOR_TYPE
03691 #undef GAN_MAT_ELEMENT_TYPE
03692 #undef GAN_REALTYPE
03693 #undef GAN_VECTYPE1
03694 #undef GAN_VECTYPE2
03695 #undef GAN_MATTYPEL
03696 #undef GAN_MATTYPER
03697 #undef GAN_SQUMATTYPEL
03698 #undef GAN_SQUMATTYPER
03699 #undef GAN_FIXED_MATRIX_TYPE
03700 #undef GAN_MAT_FPRINT
03701 #undef GAN_MAT_PRINT
03702 #undef GAN_MAT_FSCANF
03703 #undef GAN_MAT_FWRITE
03704 #undef GAN_MAT_FREAD
03705 #undef GAN_MAT_ZERO_Q
03706 #undef GAN_MAT_ZERO_S
03707 #undef GAN_MAT_COPY_Q
03708 #undef GAN_MAT_COPY_S
03709 #undef GAN_MAT_SCALE_Q
03710 #undef GAN_MAT_SCALE_S
03711 #undef GAN_MAT_SCALE_I
03712 #undef GAN_MAT_DIVIDE_Q
03713 #undef GAN_MAT_DIVIDE_S
03714 #undef GAN_MAT_DIVIDE_I
03715 #undef GAN_MAT_NEGATE_Q
03716 #undef GAN_MAT_NEGATE_S
03717 #undef GAN_MAT_NEGATE_I
03718 #undef GAN_MAT_UNIT_Q
03719 #undef GAN_MAT_UNIT_S
03720 #undef GAN_MAT_UNIT_I
03721 #undef GAN_MAT_ADD_Q
03722 #undef GAN_MAT_ADD_I1
03723 #undef GAN_MAT_ADD_I2
03724 #undef GAN_MAT_INCREMENT
03725 #undef GAN_MAT_ADD_S
03726 #undef GAN_MAT_SUB_Q
03727 #undef GAN_MAT_SUB_I1
03728 #undef GAN_MAT_SUB_I2
03729 #undef GAN_MAT_DECREMENT
03730 #undef GAN_MAT_SUB_S
03731 #undef GAN_VEC_OUTER_Q
03732 #undef GAN_VEC_OUTER_S
03733 #undef GAN_MAT_MULTV_Q
03734 #undef GAN_MAT_MULTV_S
03735 #undef GAN_MAT_MULTV_I
03736 #undef GAN_MATT_MULTV_Q
03737 #undef GAN_MATT_MULTV_S
03738 #undef GAN_MATT_MULTV_I
03739 #undef GAN_MAT_LMULTM_Q
03740 #undef GAN_MAT_LMULTM_S
03741 #undef GAN_MAT_LMULTMT_Q
03742 #undef GAN_MAT_LMULTMT_S
03743 #undef GAN_MAT_RMULTM_Q
03744 #undef GAN_MAT_RMULTM_S
03745 #undef GAN_MAT_RMULTMT_Q
03746 #undef GAN_MAT_RMULTMT_S
03747 #undef GAN_MAT_LMULTMT_SYM_Q
03748 #undef GAN_MAT_LMULTMT_SYM_S
03749 #undef GAN_MAT_RMULTMT_SYM_Q
03750 #undef GAN_MAT_RMULTMT_SYM_S
03751 #undef GAN_MAT_LMULTS_Q
03752 #undef GAN_MAT_LMULTS_S
03753 #undef GAN_MAT_RMULTS_Q
03754 #undef GAN_MAT_RMULTS_S
03755 #undef GAN_SYMMATL_LRMULT_Q
03756 #undef GAN_SYMMATL_LRMULT_S
03757 #undef GAN_SYMMATR_LRMULT_Q
03758 #undef GAN_SYMMATR_LRMULT_S
03759 #undef GAN_MAT_LMULTL_Q
03760 #undef GAN_MAT_LMULTL_S
03761 #undef GAN_MAT_LMULTL_I
03762 #undef GAN_MAT_LMULTLI_Q
03763 #undef GAN_MAT_LMULTLI_S
03764 #undef GAN_MAT_LMULTLI_I
03765 #undef GAN_MAT_LMULTLT_Q
03766 #undef GAN_MAT_LMULTLT_S
03767 #undef GAN_MAT_LMULTLT_I
03768 #undef GAN_MAT_LMULTLIT_Q
03769 #undef GAN_MAT_LMULTLIT_S
03770 #undef GAN_MAT_LMULTLIT_I
03771 #undef GAN_MAT_RMULTL_Q
03772 #undef GAN_MAT_RMULTL_S
03773 #undef GAN_MAT_RMULTL_I
03774 #undef GAN_MAT_RMULTLI_Q
03775 #undef GAN_MAT_RMULTLI_S
03776 #undef GAN_MAT_RMULTLI_I
03777 #undef GAN_MAT_RMULTLT_Q
03778 #undef GAN_MAT_RMULTLT_S
03779 #undef GAN_MAT_RMULTLT_I
03780 #undef GAN_MAT_RMULTLIT_Q
03781 #undef GAN_MAT_RMULTLIT_S
03782 #undef GAN_MAT_RMULTLIT_I
03783 #undef GAN_MAT_SRMULTT_Q
03784 #undef GAN_MAT_SRMULTT_S
03785 #undef GAN_MAT_SRMULTT_I
03786 #undef GAN_MAT_SLMULTT_Q
03787 #undef GAN_MAT_SLMULTT_S
03788 #undef GAN_MAT_SLMULTT_I
03789 #undef GAN_MAT_RMULTLIT_S
03790 #undef GAN_MAT_SUMSQR_Q
03791 #undef GAN_MAT_SUMSQR_S
03792 #undef GAN_MAT_FNORM_Q
03793 #undef GAN_MAT_FNORM_S
03794 #undef GAN_MAT_FROM_MAT_Q
03795 #undef GAN_MAT_FROM_MAT_S
03796 #undef GAN_MAT_FROM_SQUMAT_Q
03797 #undef GAN_MAT_FROM_SQUMAT_S
03798 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03799 #undef GAN_SQUMAT_FROM_SQUMAT_S
03800 
03801 /* declare functions specific to upper triangular 3x3 matrices */
03815 /* This library is free software; you can redistribute it and/or
03816    modify it under the terms of the GNU Lesser General Public
03817    License as published by the Free Software Foundation; either
03818    version 2.1 of the License, or (at your option) any later version.
03819 
03820    This library is distributed in the hope that it will be useful,
03821    but WITHOUT ANY WARRANTY; without even the implied warranty of
03822    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03823    Lesser General Public License for more details.
03824 
03825    You should have received a copy of the GNU Lesser General Public
03826    License along with this library; if not, write to the Free Software
03827    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03828 */
03829 
03830 #define GAN_MATTYPE Gan_SquMatrix33
03831 #define GAN_MATRIX_TYPE Gan_SquMatrix
03832 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
03833 #define GAN_VECTOR_TYPE Gan_Vector
03834 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
03835 #define GAN_REALTYPE double
03836 #define GAN_MAT_FPRINT   gan_ltmat33T_fprint
03837 #define GAN_MAT_PRINT    gan_ltmat33T_print
03838 #define GAN_MAT_FSCANF   gan_ltmat33T_fscanf
03839 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33
03840 
03841 #define gan_ltmat33T_fwrite gan_ltmat33_fwrite
03842 #define gan_ltmat33T_fread  gan_ltmat33_fread
03843 
03856 /* This library is free software; you can redistribute it and/or
03857    modify it under the terms of the GNU Lesser General Public
03858    License as published by the Free Software Foundation; either
03859    version 2.1 of the License, or (at your option) any later version.
03860 
03861    This library is distributed in the hope that it will be useful,
03862    but WITHOUT ANY WARRANTY; without even the implied warranty of
03863    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03864    Lesser General Public License for more details.
03865 
03866    You should have received a copy of the GNU Lesser General Public
03867    License along with this library; if not, write to the Free Software
03868    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03869 */
03870 
03871 /* function declarations for functions common to all small square matrix
03872  * types */
03873 
03874 
03875 
03876 /* documentation for macros defined in individual header files */
03877 
03944 #undef GAN_SQUMAT_IDENT_Q
03945 #undef GAN_SQUMAT_IDENT_S
03946 #undef GAN_SQUMAT_TPOSE_Q
03947 #undef GAN_SQUMAT_TPOSE_S
03948 #undef GAN_SQUMAT_TPOSE_I
03949 #undef GAN_MAT_SADDT_Q
03950 #undef GAN_MAT_SADDT_S
03951 #undef GAN_SQUMATI_MULTV_Q
03952 #undef GAN_SQUMATI_MULTV_S
03953 #undef GAN_SQUMATI_MULTV_I
03954 #undef GAN_SQUMATIT_MULTV_Q
03955 #undef GAN_SQUMATIT_MULTV_S
03956 #undef GAN_SQUMATIT_MULTV_I
03957 #undef GAN_SQUMAT_INVERT
03958 #undef GAN_SQUMAT_INVERT_Q
03959 #undef GAN_SQUMAT_INVERT_S
03960 #undef GAN_SQUMAT_INVERT_I
03961 #undef GAN_SQUMAT_ADJOINT_Q
03962 #undef GAN_SQUMAT_ADJOINT_S
03963 #undef GAN_SQUMAT_ADJOINTT_Q
03964 #undef GAN_SQUMAT_ADJOINTT_S
03965 #undef GAN_SQUMAT_DET_Q
03966 #undef GAN_SQUMAT_DET_S
03967 #undef GAN_SQUMAT_TRACE_Q
03968 #undef GAN_SQUMAT_TRACE_S
03969 
03982 /* This library is free software; you can redistribute it and/or
03983    modify it under the terms of the GNU Lesser General Public
03984    License as published by the Free Software Foundation; either
03985    version 2.1 of the License, or (at your option) any later version.
03986 
03987    This library is distributed in the hope that it will be useful,
03988    but WITHOUT ANY WARRANTY; without even the implied warranty of
03989    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03990    Lesser General Public License for more details.
03991 
03992    You should have received a copy of the GNU Lesser General Public
03993    License along with this library; if not, write to the Free Software
03994    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03995 */
03996 
03997 /* function declarations for functions common to all small vector types */
03998 
03999 
04000 
04001 /* documentation for macros defined in individual header files */
04002 
04173 /* This library is free software; you can redistribute it and/or
04174    modify it under the terms of the GNU Lesser General Public
04175    License as published by the Free Software Foundation; either
04176    version 2.1 of the License, or (at your option) any later version.
04177 
04178    This library is distributed in the hope that it will be useful,
04179    but WITHOUT ANY WARRANTY; without even the implied warranty of
04180    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04181    Lesser General Public License for more details.
04182 
04183    You should have received a copy of the GNU Lesser General Public
04184    License along with this library; if not, write to the Free Software
04185    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04186 */
04187 
04188 #undef GAN_MATTYPE
04189 #undef GAN_MATRIX_TYPE
04190 #undef GAN_SQUMATRIX_TYPE
04191 #undef GAN_VECTOR_TYPE
04192 #undef GAN_MAT_ELEMENT_TYPE
04193 #undef GAN_REALTYPE
04194 #undef GAN_VECTYPE1
04195 #undef GAN_VECTYPE2
04196 #undef GAN_MATTYPEL
04197 #undef GAN_MATTYPER
04198 #undef GAN_SQUMATTYPEL
04199 #undef GAN_SQUMATTYPER
04200 #undef GAN_FIXED_MATRIX_TYPE
04201 #undef GAN_MAT_FPRINT
04202 #undef GAN_MAT_PRINT
04203 #undef GAN_MAT_FSCANF
04204 #undef GAN_MAT_FWRITE
04205 #undef GAN_MAT_FREAD
04206 #undef GAN_MAT_ZERO_Q
04207 #undef GAN_MAT_ZERO_S
04208 #undef GAN_MAT_COPY_Q
04209 #undef GAN_MAT_COPY_S
04210 #undef GAN_MAT_SCALE_Q
04211 #undef GAN_MAT_SCALE_S
04212 #undef GAN_MAT_SCALE_I
04213 #undef GAN_MAT_DIVIDE_Q
04214 #undef GAN_MAT_DIVIDE_S
04215 #undef GAN_MAT_DIVIDE_I
04216 #undef GAN_MAT_NEGATE_Q
04217 #undef GAN_MAT_NEGATE_S
04218 #undef GAN_MAT_NEGATE_I
04219 #undef GAN_MAT_UNIT_Q
04220 #undef GAN_MAT_UNIT_S
04221 #undef GAN_MAT_UNIT_I
04222 #undef GAN_MAT_ADD_Q
04223 #undef GAN_MAT_ADD_I1
04224 #undef GAN_MAT_ADD_I2
04225 #undef GAN_MAT_INCREMENT
04226 #undef GAN_MAT_ADD_S
04227 #undef GAN_MAT_SUB_Q
04228 #undef GAN_MAT_SUB_I1
04229 #undef GAN_MAT_SUB_I2
04230 #undef GAN_MAT_DECREMENT
04231 #undef GAN_MAT_SUB_S
04232 #undef GAN_VEC_OUTER_Q
04233 #undef GAN_VEC_OUTER_S
04234 #undef GAN_MAT_MULTV_Q
04235 #undef GAN_MAT_MULTV_S
04236 #undef GAN_MAT_MULTV_I
04237 #undef GAN_MATT_MULTV_Q
04238 #undef GAN_MATT_MULTV_S
04239 #undef GAN_MATT_MULTV_I
04240 #undef GAN_MAT_LMULTM_Q
04241 #undef GAN_MAT_LMULTM_S
04242 #undef GAN_MAT_LMULTMT_Q
04243 #undef GAN_MAT_LMULTMT_S
04244 #undef GAN_MAT_RMULTM_Q
04245 #undef GAN_MAT_RMULTM_S
04246 #undef GAN_MAT_RMULTMT_Q
04247 #undef GAN_MAT_RMULTMT_S
04248 #undef GAN_MAT_LMULTMT_SYM_Q
04249 #undef GAN_MAT_LMULTMT_SYM_S
04250 #undef GAN_MAT_RMULTMT_SYM_Q
04251 #undef GAN_MAT_RMULTMT_SYM_S
04252 #undef GAN_MAT_LMULTS_Q
04253 #undef GAN_MAT_LMULTS_S
04254 #undef GAN_MAT_RMULTS_Q
04255 #undef GAN_MAT_RMULTS_S
04256 #undef GAN_SYMMATL_LRMULT_Q
04257 #undef GAN_SYMMATL_LRMULT_S
04258 #undef GAN_SYMMATR_LRMULT_Q
04259 #undef GAN_SYMMATR_LRMULT_S
04260 #undef GAN_MAT_LMULTL_Q
04261 #undef GAN_MAT_LMULTL_S
04262 #undef GAN_MAT_LMULTL_I
04263 #undef GAN_MAT_LMULTLI_Q
04264 #undef GAN_MAT_LMULTLI_S
04265 #undef GAN_MAT_LMULTLI_I
04266 #undef GAN_MAT_LMULTLT_Q
04267 #undef GAN_MAT_LMULTLT_S
04268 #undef GAN_MAT_LMULTLT_I
04269 #undef GAN_MAT_LMULTLIT_Q
04270 #undef GAN_MAT_LMULTLIT_S
04271 #undef GAN_MAT_LMULTLIT_I
04272 #undef GAN_MAT_RMULTL_Q
04273 #undef GAN_MAT_RMULTL_S
04274 #undef GAN_MAT_RMULTL_I
04275 #undef GAN_MAT_RMULTLI_Q
04276 #undef GAN_MAT_RMULTLI_S
04277 #undef GAN_MAT_RMULTLI_I
04278 #undef GAN_MAT_RMULTLT_Q
04279 #undef GAN_MAT_RMULTLT_S
04280 #undef GAN_MAT_RMULTLT_I
04281 #undef GAN_MAT_RMULTLIT_Q
04282 #undef GAN_MAT_RMULTLIT_S
04283 #undef GAN_MAT_RMULTLIT_I
04284 #undef GAN_MAT_SRMULTT_Q
04285 #undef GAN_MAT_SRMULTT_S
04286 #undef GAN_MAT_SRMULTT_I
04287 #undef GAN_MAT_SLMULTT_Q
04288 #undef GAN_MAT_SLMULTT_S
04289 #undef GAN_MAT_SLMULTT_I
04290 #undef GAN_MAT_RMULTLIT_S
04291 #undef GAN_MAT_SUMSQR_Q
04292 #undef GAN_MAT_SUMSQR_S
04293 #undef GAN_MAT_FNORM_Q
04294 #undef GAN_MAT_FNORM_S
04295 #undef GAN_MAT_FROM_MAT_Q
04296 #undef GAN_MAT_FROM_MAT_S
04297 #undef GAN_MAT_FROM_SQUMAT_Q
04298 #undef GAN_MAT_FROM_SQUMAT_S
04299 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04300 #undef GAN_SQUMAT_FROM_SQUMAT_S
04301 
04310 #ifdef __cplusplus
04311 }
04312 #endif
04313 
04314 #endif /* #ifndef _GAN_3X3MATRIX_H */

Generated on Mon Oct 13 16:14:31 2003 by doxygen1.3-rc1