Main Page | Modules | Class List | File List | Class 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 
00452 
00453 typedef struct Gan_Matrix33
00454 {
00455    double xx, xy, xz,
00456           yx, yy, yz,
00457           zx, zy, zz;
00458 } Gan_Matrix33;
00459 
00460 #ifndef NDEBUG
00461 
00462 typedef enum { GAN_SYMMETRIC_MATRIX33, GAN_LOWER_TRI_MATRIX33 }
00463  Gan_SquMatrix33Type;
00464 #endif /* #ifndef NDEBUG */
00465 
00467 typedef struct Gan_SquMatrix33
00468 {
00469 #ifndef NDEBUG
00470    /* square matrix type, for setting and checking in debug mode */
00471    Gan_SquMatrix33Type type;
00472 #endif /* #ifndef NDEBUG */
00473 
00474    /* matrix data */
00475    double xx,
00476           yx, yy,
00477           zx, zy, zz;
00478 } Gan_SquMatrix33;
00479 
00480 /* matrix definitions specific to 3x3 matrices */
00481 #define GAN_ST33_FILL(A,t,XX,YX,YY,ZX,ZY,ZZ)\
00482            (GAN_TEST_OP1(A,Gan_SquMatrix33),gan_eval((A)->type=t),\
00483             GAN_FREP33L_A_C((A)->,=,(XX),(YX),(YY),(ZX),(ZY),(ZZ)))
00484 #define GAN_ST33_IDENT(A,t)\
00485            (GAN_TEST_OP1(A,Gan_SquMatrix33),gan_eval((A)->type=t),\
00486             GAN_FREP33L_A_C((A)->,=,1.0,0.0,1.0,0.0,0.0,1.0))
00487 
00488 /* generic matrix multiply operations */
00489 #define GAN_MAT33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00490  (a p1 = GAN_REP3_OP_AB(b,* c,xx,xy,xz,q1,q2,q3,+),\
00491   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,yz,q1,q2,q3,+),\
00492   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00493 #define GAN_MAT33T_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00494  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00495   a p2 = GAN_REP3_OP_AB(b,* c,xy,yy,zy,q1,q2,q3,+),\
00496   a p3 = GAN_REP3_OP_AB(b,* c,xz,yz,zz,q1,q2,q3,+))
00497 
00498 /* symmetric matrix multiply operation */
00499 #define GAN_SYM33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00500  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00501   a p2 = GAN_REP3_OP_AB(b,* c,yx,yy,zy,q1,q2,q3,+),\
00502   a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+))
00503 
00504 /* lower triangular matrix multiply operations */
00505 #define GAN_LOW33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00506  (a p3 = GAN_REP3_OP_AB(b,* c,zx,zy,zz,q1,q2,q3,+),\
00507   a p2 = GAN_REP2_OP_AB(b,* c,yx,yy,q1,q2,+),\
00508   a p1 = GAN_REP1_OP_AB(b,* c,xx,q1,+))
00509 #define GAN_LOW33I_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00510  (a p1 =  c q1 / b xx,\
00511   a p2 = (c q2 - b yx * a p1) / b yy,\
00512   a p3 = (c q3 - b zx * a p1 - b zy * a p2) / b zz)
00513 
00514 /* upper triangular matrix multiply operations */
00515 #define GAN_UPP33_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00516  (a p1 = GAN_REP3_OP_AB(b,* c,xx,yx,zx,q1,q2,q3,+),\
00517   a p2 = GAN_REP2_OP_AB(b,* c,yy,zy,q2,q3,+),\
00518   a p3 = GAN_REP1_OP_AB(b,* c,zz,q3,+))
00519 #define GAN_UPP33I_MULT1D(a,b,c,p1,p2,p3,q1,q2,q3)\
00520  (a p3 =  c q3 / b zz,\
00521   a p2 = (c q2 - b zy * a p3) / b yy,\
00522   a p1 = (c q1 - b yx * a p2 - b zx * a p3) / b xx)
00523 
00524 /* symmetric/lower triangular square matrix definitions */
00525 #define GAN_ST33_ZERO(A,t)\
00526            (GAN_TEST_OP1(A,Gan_SquMatrix33), gan_eval((A)->type=t),\
00527             GAN_REP33L_AS_C((A)->,=0.0))
00528 #define GAN_ST33_COPY(A,B,t)\
00529            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00530             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00531             GAN_REP33L_AA_C((B)->,=(A)->))
00532 #define GAN_ST33_SCALE(A,a,B,t)\
00533            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00534             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00535             GAN_REP33L_AAS_C((B)->,=(A)->,*(a)))
00536 #define GAN_ST33_DIVIDE(A,a,B,t)\
00537            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00538             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00539             GAN_REP33L_AAS_C((B)->,=(A)->,/(a)))
00540 #define GAN_ST33_NEGATE(A,B,t)\
00541            (GAN_TEST_OP2(A,B,Gan_SquMatrix33,Gan_SquMatrix33),\
00542             assert((A)->type==t), gan_eval((B)->type=(A)->type),\
00543             GAN_REP33L_AA_C((B)->,=-(A)->))
00544 #define GAN_ST33_ADD(A,B,C,t)\
00545          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33,Gan_SquMatrix33,Gan_SquMatrix33),\
00546           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00547           GAN_REP33L_AAA_C((C)->,=(A)->,+(B)->))
00548 #define GAN_ST33_SUB(A,B,C,t)\
00549          (GAN_TEST_OP3(A,B,C,Gan_SquMatrix33,Gan_SquMatrix33,Gan_SquMatrix33),\
00550           assert((A)->type==t && (B)->type==t), gan_eval((C)->type=(A)->type),\
00551           GAN_REP33L_AAA_C((C)->,=(A)->,-(B)->))
00552 
00553 /* declare functions specific to generic 3x3 matrices */
00567 /* This library is free software; you can redistribute it and/or
00568    modify it under the terms of the GNU Lesser General Public
00569    License as published by the Free Software Foundation; either
00570    version 2.1 of the License, or (at your option) any later version.
00571 
00572    This library is distributed in the hope that it will be useful,
00573    but WITHOUT ANY WARRANTY; without even the implied warranty of
00574    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00575    Lesser General Public License for more details.
00576 
00577    You should have received a copy of the GNU Lesser General Public
00578    License along with this library; if not, write to the Free Software
00579    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00580 */
00581 
00582 #ifndef _GAN_3X3MAT_H
00583 
00600  Gan_Matrix33 *gan_mat33_fill_q ( Gan_Matrix33 *A,
00601                                  double XX, double XY, double XZ,
00602                                  double YX, double YY, double YZ,
00603                                  double ZX, double ZY, double ZZ );
00604 
00629  Gan_Matrix33 *gan_mat33_cross_q ( const Gan_Vector3 *p, const Gan_Matrix33 *A );
00630 
00652  void gan_mat33_get_rows_q ( const Gan_Matrix33 *A,
00653                             Gan_Vector3 *p, Gan_Vector3 *q, Gan_Vector3 *r );
00654 
00666  void gan_mat33_get_cols_q ( const Gan_Matrix33 *A,
00667                             Gan_Vector3 *p, Gan_Vector3 *q, Gan_Vector3 *r );
00668 
00676  Gan_Matrix22 *gan_mat33_get_m22tl_q ( const Gan_Matrix33 *A, Gan_Matrix22 *B );
00677 
00685  Gan_Vector2 *gan_mat33_get_v2tr_q ( const Gan_Matrix33 *A, Gan_Vector2 *p );
00686 
00700  void gan_mat33_get_parts_q ( const Gan_Matrix33 *A, Gan_Matrix22 *B,
00701                              Gan_Vector2 *p, Gan_Vector2 *q, double *s );
00702 
00725  Gan_Matrix33 *gan_mat33_set_parts_q ( Gan_Matrix33 *A, const Gan_Matrix22 *B,
00726                                       const Gan_Vector2 *p, const Gan_Vector2 *q,
00727                                       double s );
00728 
00740  Gan_Matrix33 *gan_mat33_set_cols_q ( Gan_Matrix33 *A,
00741                                      const Gan_Vector3 *p, const Gan_Vector3 *q,
00742                                      const Gan_Vector3 *r );
00743 
00756  Gan_Matrix33 *gan_mat33_set_rows_q ( Gan_Matrix33 *A,
00757                                      const Gan_Vector3 *p, const Gan_Vector3 *q,
00758                                      const Gan_Vector3 *r );
00759 
00765 #endif /* #ifndef _GAN_3X3MAT_H */
00766 
00767 #define GAN_MATTYPE Gan_Matrix33
00768 #define GAN_MATRIX_TYPE Gan_Matrix
00769 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
00770 #define GAN_VECTOR_TYPE Gan_Vector
00771 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
00772 #define GAN_REALTYPE double
00773 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64
00774 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f64
00775 #define GAN_VECTYPE1 Gan_Vector3
00776 #define GAN_VECTYPE2 Gan_Vector3
00777 #define GAN_MATTYPEL Gan_Matrix33
00778 #define GAN_MATTYPER Gan_Matrix33
00779 #define GAN_SQUMATTYPEL Gan_SquMatrix33
00780 #define GAN_SQUMATTYPER Gan_SquMatrix33
00781 #define GAN_MAT_FPRINT                     gan_mat33_fprint
00782 #define GAN_MAT_PRINT                      gan_mat33_print
00783 #define GAN_MAT_FSCANF                     gan_mat33_fscanf
00784 #define GAN_MAT_FWRITE                     gan_mat33_fwrite
00785 #define GAN_MAT_FREAD                      gan_mat33_fread
00786 #define GAN_MAT_ZERO_Q                     gan_mat33_zero_q
00787 #define GAN_MAT_ZERO_S                     gan_mat33_zero_s
00788 #define GAN_MAT_COPY_Q                     gan_mat33_copy_q
00789 #define GAN_MAT_COPY_S                     gan_mat33_copy_s
00790 #define GAN_MAT_SCALE_Q                    gan_mat33_scale_q
00791 #define GAN_MAT_SCALE_I                    gan_mat33_scale_i
00792 #define GAN_MAT_SCALE_S                    gan_mat33_scale_s
00793 #define GAN_MAT_DIVIDE_Q                   gan_mat33_divide_q
00794 #define GAN_MAT_DIVIDE_I                   gan_mat33_divide_i
00795 #define GAN_MAT_DIVIDE_S                   gan_mat33_divide_s
00796 #define GAN_MAT_NEGATE_Q                   gan_mat33_negate_q
00797 #define GAN_MAT_NEGATE_I                   gan_mat33_negate_i
00798 #define GAN_MAT_NEGATE_S                   gan_mat33_negate_s
00799 #define GAN_MAT_UNIT_Q                     gan_mat33_unit_q
00800 #define GAN_MAT_UNIT_I                     gan_mat33_unit_i
00801 #define GAN_MAT_UNIT_S                     gan_mat33_unit_s
00802 #define GAN_MAT_ADD_Q                      gan_mat33_add_q
00803 #define GAN_MAT_ADD_I1                     gan_mat33_add_i1
00804 #define GAN_MAT_ADD_I2                     gan_mat33_add_i2
00805 #define GAN_MAT_INCREMENT                  gan_mat33_increment
00806 #define GAN_MAT_ADD_S                      gan_mat33_add_s
00807 #define GAN_MAT_SUB_Q                      gan_mat33_sub_q
00808 #define GAN_MAT_SUB_I1                     gan_mat33_sub_i1
00809 #define GAN_MAT_SUB_I2                     gan_mat33_sub_i2
00810 #define GAN_MAT_DECREMENT                  gan_mat33_decrement
00811 #define GAN_MAT_SUB_S                      gan_mat33_sub_s
00812 #define GAN_VEC_OUTER_Q                    gan_vec33_outer_q
00813 #define GAN_VEC_OUTER_S                    gan_vec33_outer_s
00814 #define GAN_MAT_MULTV_Q                    gan_mat33_multv3_q
00815 #define GAN_MAT_MULTV_S                    gan_mat33_multv3_s
00816 #define GAN_MATT_MULTV_Q                   gan_mat33T_multv3_q
00817 #define GAN_MATT_MULTV_S                   gan_mat33T_multv3_s
00818 #define GAN_MAT_LMULTMT_Q                  gan_mat33_lmultm33T_q
00819 #define GAN_MAT_LMULTMT_S                  gan_mat33_lmultm33T_s
00820 #define GAN_MAT_RMULTM_Q                   gan_mat33_rmultm33_q
00821 #define GAN_MAT_RMULTM_S                   gan_mat33_rmultm33_s
00822 #define GAN_MAT_RMULTMT_Q                  gan_mat33_rmultm33T_q
00823 #define GAN_MAT_RMULTMT_S                  gan_mat33_rmultm33T_s
00824 #define GAN_MAT_LMULTMT_SYM_Q              gan_mat33_lmultm33T_sym_q
00825 #define GAN_MAT_LMULTMT_SYM_S              gan_mat33_lmultm33T_sym_s
00826 #define GAN_MAT_RMULTMT_SYM_Q              gan_mat33_rmultm33T_sym_q
00827 #define GAN_MAT_RMULTMT_SYM_S              gan_mat33_rmultm33T_sym_s
00828 #define GAN_MAT_SLMULTT_Q                  gan_mat33_slmultT_q
00829 #define GAN_MAT_SLMULTT_S                  gan_mat33_slmultT_s
00830 #define GAN_MAT_SRMULTT_Q                  gan_mat33_srmultT_q
00831 #define GAN_MAT_SRMULTT_S                  gan_mat33_srmultT_s
00832 #define GAN_MAT_LMULTS_Q                   gan_mat33_lmults33_q
00833 #define GAN_MAT_LMULTS_S                   gan_mat33_lmults33_s
00834 #define GAN_MAT_RMULTS_Q                   gan_mat33_rmults33_q
00835 #define GAN_MAT_RMULTS_S                   gan_mat33_rmults33_s
00836 #define GAN_SYMMATL_LRMULT_Q               gan_symmat33_lrmultm33T_q
00837 #define GAN_SYMMATL_LRMULT_S               gan_symmat33_lrmultm33T_s
00838 #define GAN_SYMMATR_LRMULT_Q               gan_symmat33_lrmultm33_q
00839 #define GAN_SYMMATR_LRMULT_S               gan_symmat33_lrmultm33_s
00840 #define GAN_MAT_LMULTL_Q                   gan_mat33_lmultl33_q
00841 #define GAN_MAT_LMULTL_S                   gan_mat33_lmultl33_s
00842 #define GAN_MAT_LMULTL_I                   gan_mat33_lmultl33_i
00843 #define GAN_MAT_LMULTLI_Q                  gan_mat33_lmultl33I_q
00844 #define GAN_MAT_LMULTLI_S                  gan_mat33_lmultl33I_s
00845 #define GAN_MAT_LMULTLI_I                  gan_mat33_lmultl33I_i
00846 #define GAN_MAT_LMULTLT_Q                  gan_mat33_lmultl33T_q
00847 #define GAN_MAT_LMULTLT_S                  gan_mat33_lmultl33T_s
00848 #define GAN_MAT_LMULTLT_I                  gan_mat33_lmultl33T_i
00849 #define GAN_MAT_LMULTLIT_Q                 gan_mat33_lmultl33IT_q
00850 #define GAN_MAT_LMULTLIT_S                 gan_mat33_lmultl33IT_s
00851 #define GAN_MAT_LMULTLIT_I                 gan_mat33_lmultl33IT_i
00852 #define GAN_MAT_RMULTL_Q                   gan_mat33_rmultl33_q
00853 #define GAN_MAT_RMULTL_S                   gan_mat33_rmultl33_s
00854 #define GAN_MAT_RMULTL_I                   gan_mat33_rmultl33_i
00855 #define GAN_MAT_RMULTLI_Q                  gan_mat33_rmultl33I_q
00856 #define GAN_MAT_RMULTLI_S                  gan_mat33_rmultl33I_s
00857 #define GAN_MAT_RMULTLI_I                  gan_mat33_rmultl33I_i
00858 #define GAN_MAT_RMULTLT_Q                  gan_mat33_rmultl33T_q
00859 #define GAN_MAT_RMULTLT_S                  gan_mat33_rmultl33T_s
00860 #define GAN_MAT_RMULTLT_I                  gan_mat33_rmultl33T_i
00861 #define GAN_MAT_RMULTLIT_Q                 gan_mat33_rmultl33IT_q
00862 #define GAN_MAT_RMULTLIT_S                 gan_mat33_rmultl33IT_s
00863 #define GAN_MAT_RMULTLIT_I                 gan_mat33_rmultl33IT_i
00864 #define GAN_MAT_SUMSQR_Q                   gan_mat33_sumsqr_q
00865 #define GAN_MAT_SUMSQR_S                   gan_mat33_sumsqr_s
00866 #define GAN_MAT_FNORM_Q                    gan_mat33_Fnorm_q
00867 #define GAN_MAT_FNORM_S                    gan_mat33_Fnorm_s
00868 #define GAN_MAT_FROM_MAT_Q                 gan_mat33_from_mat_q
00869 #define GAN_MAT_FROM_MAT_S                 gan_mat33_from_mat_s
00870 #define GAN_MAT_FROM_SQUMAT_Q              gan_mat33_from_squmat_q
00871 #define GAN_MAT_FROM_SQUMAT_S              gan_mat33_from_squmat_s
00872 #define GAN_SQUMAT_FROM_SQUMAT_Q           gan_squmat33_from_squmat_q
00873 #define GAN_SQUMAT_FROM_SQUMAT_S           gan_squmat33_from_squmat_s
00874 
00875 #define GAN_SQUMAT_IDENT_Q    gan_mat33_ident_q
00876 #define GAN_SQUMAT_IDENT_S    gan_mat33_ident_s
00877 #define GAN_SQUMAT_TPOSE_Q    gan_mat33_tpose_q
00878 #define GAN_SQUMAT_TPOSE_S    gan_mat33_tpose_s
00879 #define GAN_SQUMAT_TPOSE_I    gan_mat33_tpose_i
00880 #define GAN_MAT_SADDT_Q       gan_mat33_saddT_q
00881 #define GAN_MAT_SADDT_S       gan_mat33_saddT_s
00882 #define GAN_SQUMAT_INVERT     gan_mat33_invert
00883 #define GAN_SQUMAT_INVERT_Q   gan_mat33_invert_q
00884 #define GAN_SQUMAT_INVERT_S   gan_mat33_invert_s
00885 #define GAN_SQUMAT_INVERT_I   gan_mat33_invert_i
00886 #define GAN_SQUMAT_ADJOINT_Q  gan_mat33_adjoint_q
00887 #define GAN_SQUMAT_ADJOINT_S  gan_mat33_adjoint_s
00888 #define GAN_SQUMAT_ADJOINTT_Q gan_mat33_adjointT_q
00889 #define GAN_SQUMAT_ADJOINTT_S gan_mat33_adjointT_s
00890 #define GAN_SQUMAT_DET_Q      gan_mat33_det_q
00891 #define GAN_SQUMAT_DET_S      gan_mat33_det_s
00892 #define GAN_SQUMAT_TRACE_Q    gan_mat33_trace_q
00893 #define GAN_SQUMAT_TRACE_S    gan_mat33_trace_s
00894 
00895 #ifndef _GAN_3X3MAT_H
00896 #define _GAN_3X3MAT_H
00897 
00898 
00899 #endif /* #ifndef _GAN_3X3MAT_H */
00900 
00913 /* This library is free software; you can redistribute it and/or
00914    modify it under the terms of the GNU Lesser General Public
00915    License as published by the Free Software Foundation; either
00916    version 2.1 of the License, or (at your option) any later version.
00917 
00918    This library is distributed in the hope that it will be useful,
00919    but WITHOUT ANY WARRANTY; without even the implied warranty of
00920    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00921    Lesser General Public License for more details.
00922 
00923    You should have received a copy of the GNU Lesser General Public
00924    License along with this library; if not, write to the Free Software
00925    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00926 */
00927 
00928 /* function declarations for functions common to all small square matrix
00929  * types */
00930 
00931 
00932 
00933 /* documentation for macros defined in individual header files */
00934 
00947  Gan_Matrix33 *gan_mat33_ident_q ( Gan_Matrix33 *A );
00948 
00966  Gan_Matrix33 *gan_mat33_tpose_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
00967 
00985  Gan_SquMatrix33 *gan_mat33_saddT_q ( const Gan_Matrix33 *A, Gan_SquMatrix33 *B );
00986 
01017  Gan_Matrix33 *gan_mat33_invert_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01018 
01027  Gan_Matrix33 *gan_mat33_invert_i ( Gan_Matrix33 *A );
01028 
01043  double gan_mat33_det_q ( const Gan_Matrix33 *A );
01044 
01050  double gan_mat33_trace_q ( const Gan_Matrix33 *A );
01051 
01057 #undef GAN_SQUMAT_IDENT_Q
01058 #undef GAN_SQUMAT_IDENT_S
01059 #undef GAN_SQUMAT_TPOSE_Q
01060 #undef GAN_SQUMAT_TPOSE_S
01061 #undef GAN_SQUMAT_TPOSE_I
01062 #undef GAN_MAT_SADDT_Q
01063 #undef GAN_MAT_SADDT_S
01064 #undef GAN_SQUMATI_MULTV_Q
01065 #undef GAN_SQUMATI_MULTV_S
01066 #undef GAN_SQUMATI_MULTV_I
01067 #undef GAN_SQUMATIT_MULTV_Q
01068 #undef GAN_SQUMATIT_MULTV_S
01069 #undef GAN_SQUMATIT_MULTV_I
01070 #undef GAN_SQUMAT_INVERT
01071 #undef GAN_SQUMAT_INVERT_Q
01072 #undef GAN_SQUMAT_INVERT_S
01073 #undef GAN_SQUMAT_INVERT_I
01074 #undef GAN_SQUMAT_ADJOINT_Q
01075 #undef GAN_SQUMAT_ADJOINT_S
01076 #undef GAN_SQUMAT_ADJOINTT_Q
01077 #undef GAN_SQUMAT_ADJOINTT_S
01078 #undef GAN_SQUMAT_DET_Q
01079 #undef GAN_SQUMAT_DET_S
01080 #undef GAN_SQUMAT_TRACE_Q
01081 #undef GAN_SQUMAT_TRACE_S
01082 
01095 /* This library is free software; you can redistribute it and/or
01096    modify it under the terms of the GNU Lesser General Public
01097    License as published by the Free Software Foundation; either
01098    version 2.1 of the License, or (at your option) any later version.
01099 
01100    This library is distributed in the hope that it will be useful,
01101    but WITHOUT ANY WARRANTY; without even the implied warranty of
01102    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01103    Lesser General Public License for more details.
01104 
01105    You should have received a copy of the GNU Lesser General Public
01106    License along with this library; if not, write to the Free Software
01107    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01108 */
01109 
01110 /* function declarations for functions common to all small vector types */
01111 
01112 
01113 
01114 /* documentation for macros defined in individual header files */
01115 
01126  Gan_Matrix33 *gan_mat33_zero_q ( const Gan_Matrix33 *A );
01127 
01144  Gan_Matrix33 *gan_mat33_copy_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01145 
01163  Gan_Matrix33 *gan_mat33_scale_q ( Gan_Matrix33 *A, double a,
01164                                Gan_Matrix33 *B );
01165 
01173  Gan_Matrix33 *gan_mat33_scale_i ( Gan_Matrix33 *A, double a );
01174 
01183  Gan_Matrix33 *gan_mat33_divide_q ( Gan_Matrix33 *A, double a,
01184                                 Gan_Matrix33 *B );
01185 
01193  Gan_Matrix33 *gan_mat33_divide_i ( Gan_Matrix33 *A, double a );
01194 
01202  Gan_Matrix33 *gan_mat33_negate_q ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01203 
01211  Gan_Matrix33 *gan_mat33_negate_i ( Gan_Matrix33 *A );
01212 
01220  Gan_Matrix33 *gan_mat33_unit_i ( Gan_Matrix33 *A );
01221 
01239  Gan_Matrix33 *gan_mat33_add_q ( Gan_Matrix33 *A, Gan_Matrix33 *B, Gan_Matrix33 *C );
01240 
01249  Gan_Matrix33 *gan_mat33_add_i1 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01250 
01259  Gan_Matrix33 *gan_mat33_add_i2 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01260 
01269  Gan_Matrix33 *gan_mat33_increment ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01270 
01288  Gan_Matrix33 *gan_mat33_sub_q ( Gan_Matrix33 *A, Gan_Matrix33 *B, Gan_Matrix33 *C );
01289 
01298  Gan_Matrix33 *gan_mat33_sub_i1 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01299 
01308  Gan_Matrix33 *gan_mat33_sub_i2 ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01309 
01318  Gan_Matrix33 *gan_mat33_decrement ( Gan_Matrix33 *A, Gan_Matrix33 *B );
01319 
01337  Gan_Matrix33 *gan_vec33_outer_q ( const Gan_Vector3 *p, const Gan_Vector3 *q,
01338                                Gan_Matrix33 *A );
01339 
01348  Gan_Vector3 *gan_mat33_multv3_q ( const Gan_Matrix33 *A, Gan_Vector3 *p,
01349                                 Gan_Vector3 *q );
01350 
01351 
01360  Gan_Vector3 *gan_mat33T_multv3_q ( const Gan_Matrix33 *A, Gan_Vector3 *p,
01361                                  Gan_Vector3 *q );
01362 
01363 
01383  Gan_Matrix33 *gan_mat33_lmultm33T_q ( Gan_Matrix33 *A, const Gan_Matrix33 *B,
01384                                  Gan_Matrix33 *C );
01385 
01395  Gan_Matrix33 *gan_mat33_rmultm33_q ( Gan_Matrix33 *A, const Gan_Matrix33 *B,
01396                                 Gan_Matrix33 *C );
01397 
01407  Gan_Matrix33 *gan_mat33_rmultm33T_q ( Gan_Matrix33 *A, const Gan_Matrix33 *B,
01408                                  Gan_Matrix33 *C );
01409 
01421  Gan_SquMatrix33 *gan_mat33_lmultm33T_sym_q ( const Gan_Matrix33 *A, const Gan_Matrix33 *B,
01422                                          Gan_SquMatrix33 *C );
01423 
01435  Gan_SquMatrix33 *gan_mat33_rmultm33T_sym_q ( const Gan_Matrix33 *A, const Gan_Matrix33 *B,
01436                                          Gan_SquMatrix33 *C );
01437 
01446  Gan_Matrix33 *gan_mat33_lmults33_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01447                                 Gan_Matrix33 *C );
01448 
01457  Gan_Matrix33 *gan_mat33_rmults33_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01458                                 Gan_Matrix33 *C );
01459 
01479  Gan_SquMatrix33 *gan_symmat33_lrmultm33T_q ( const Gan_SquMatrix33 *A, const Gan_Matrix33 *B,
01480                                         const Gan_Matrix33 *C, Gan_SquMatrix33 *D );
01481 
01492  Gan_SquMatrix33 *gan_symmat33_lrmultm33_q ( const Gan_SquMatrix33 *A, const Gan_Matrix33 *B,
01493                                         const Gan_Matrix33 *C, Gan_SquMatrix33 *D );
01494 
01513  Gan_Matrix33 *gan_mat33_lmultl33_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01514                                 Gan_Matrix33 *C );
01515 
01525  Gan_Matrix33 *gan_mat33_lmultl33I_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01526                                  Gan_Matrix33 *C );
01527 
01537  Gan_Matrix33 *gan_mat33_lmultl33T_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01538                                  Gan_Matrix33 *C );
01539 
01549  Gan_Matrix33 *gan_mat33_lmultl33IT_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01550                                   Gan_Matrix33 *C );
01551 
01561  Gan_Matrix33 *gan_mat33_rmultl33_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01562                                 Gan_Matrix33 *C );
01563 
01573  Gan_Matrix33 *gan_mat33_rmultl33I_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01574                                  Gan_Matrix33 *C );
01575 
01585  Gan_Matrix33 *gan_mat33_rmultl33T_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01586                                  Gan_Matrix33 *C );
01587 
01597  Gan_Matrix33 *gan_mat33_rmultl33IT_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B,
01598                                   Gan_Matrix33 *C );
01599 
01609  Gan_Matrix33 *gan_mat33_lmultl33_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01610 
01620  Gan_Matrix33 *gan_mat33_lmultl33I_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01621 
01631  Gan_Matrix33 *gan_mat33_lmultl33T_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01632 
01642  Gan_Matrix33 *gan_mat33_lmultl33IT_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01643 
01653  Gan_Matrix33 *gan_mat33_rmultl33_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01654 
01664  Gan_Matrix33 *gan_mat33_rmultl33I_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01665 
01675  Gan_Matrix33 *gan_mat33_rmultl33T_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01676 
01686  Gan_Matrix33 *gan_mat33_rmultl33IT_i ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01687 
01696  Gan_SquMatrix33 *gan_mat33_slmultT_q ( Gan_Matrix33 *A, const Gan_SquMatrix33 *B );
01697 
01698 
01707  Gan_SquMatrix33 *gan_mat33_srmultT_q ( const Gan_Matrix33 *A, Gan_SquMatrix33 *B );
01708 
01709 
01724  double gan_mat33_sumsqr_q ( const Gan_Matrix33 *A );
01725 
01732  double gan_mat33_Fnorm_q ( const Gan_Matrix33 *A );
01733 
01743  Gan_Matrix33 *gan_mat33_from_mat_q ( const Gan_Matrix *A, Gan_Matrix33 *B );
01744 
01745  Gan_Matrix33 *gan_mat33_from_squmat_q ( const Gan_SquMatrix *A, Gan_Matrix33 *B );
01746 
01747  Gan_SquMatrix33 *gan_squmat33_from_squmat_q ( const Gan_SquMatrix *A,
01748                                             Gan_SquMatrix33 *B );
01749 
01768 /* This library is free software; you can redistribute it and/or
01769    modify it under the terms of the GNU Lesser General Public
01770    License as published by the Free Software Foundation; either
01771    version 2.1 of the License, or (at your option) any later version.
01772 
01773    This library is distributed in the hope that it will be useful,
01774    but WITHOUT ANY WARRANTY; without even the implied warranty of
01775    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01776    Lesser General Public License for more details.
01777 
01778    You should have received a copy of the GNU Lesser General Public
01779    License along with this library; if not, write to the Free Software
01780    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01781 */
01782 
01783 #undef GAN_MATTYPE
01784 #undef GAN_MATRIX_TYPE
01785 #undef GAN_SQUMATRIX_TYPE
01786 #undef GAN_VECTOR_TYPE
01787 #undef GAN_MAT_ELEMENT_TYPE
01788 #undef GAN_REALTYPE
01789 #undef GAN_FWRITE_LENDIAN
01790 #undef GAN_FREAD_LENDIAN
01791 #undef GAN_VECTYPE1
01792 #undef GAN_VECTYPE2
01793 #undef GAN_MATTYPEL
01794 #undef GAN_MATTYPER
01795 #undef GAN_SQUMATTYPEL
01796 #undef GAN_SQUMATTYPER
01797 #undef GAN_FIXED_MATRIX_TYPE
01798 #undef GAN_MAT_FPRINT
01799 #undef GAN_MAT_PRINT
01800 #undef GAN_MAT_FSCANF
01801 #undef GAN_MAT_FWRITE
01802 #undef GAN_MAT_FREAD
01803 #undef GAN_MAT_ZERO_Q
01804 #undef GAN_MAT_ZERO_S
01805 #undef GAN_MAT_COPY_Q
01806 #undef GAN_MAT_COPY_S
01807 #undef GAN_MAT_SCALE_Q
01808 #undef GAN_MAT_SCALE_S
01809 #undef GAN_MAT_SCALE_I
01810 #undef GAN_MAT_DIVIDE_Q
01811 #undef GAN_MAT_DIVIDE_S
01812 #undef GAN_MAT_DIVIDE_I
01813 #undef GAN_MAT_NEGATE_Q
01814 #undef GAN_MAT_NEGATE_S
01815 #undef GAN_MAT_NEGATE_I
01816 #undef GAN_MAT_UNIT_Q
01817 #undef GAN_MAT_UNIT_S
01818 #undef GAN_MAT_UNIT_I
01819 #undef GAN_MAT_ADD_Q
01820 #undef GAN_MAT_ADD_I1
01821 #undef GAN_MAT_ADD_I2
01822 #undef GAN_MAT_INCREMENT
01823 #undef GAN_MAT_ADD_S
01824 #undef GAN_MAT_SUB_Q
01825 #undef GAN_MAT_SUB_I1
01826 #undef GAN_MAT_SUB_I2
01827 #undef GAN_MAT_DECREMENT
01828 #undef GAN_MAT_SUB_S
01829 #undef GAN_VEC_OUTER_Q
01830 #undef GAN_VEC_OUTER_S
01831 #undef GAN_MAT_MULTV_Q
01832 #undef GAN_MAT_MULTV_S
01833 #undef GAN_MAT_MULTV_I
01834 #undef GAN_MATT_MULTV_Q
01835 #undef GAN_MATT_MULTV_S
01836 #undef GAN_MATT_MULTV_I
01837 #undef GAN_MAT_LMULTM_Q
01838 #undef GAN_MAT_LMULTM_S
01839 #undef GAN_MAT_LMULTMT_Q
01840 #undef GAN_MAT_LMULTMT_S
01841 #undef GAN_MAT_RMULTM_Q
01842 #undef GAN_MAT_RMULTM_S
01843 #undef GAN_MAT_RMULTMT_Q
01844 #undef GAN_MAT_RMULTMT_S
01845 #undef GAN_MAT_LMULTMT_SYM_Q
01846 #undef GAN_MAT_LMULTMT_SYM_S
01847 #undef GAN_MAT_RMULTMT_SYM_Q
01848 #undef GAN_MAT_RMULTMT_SYM_S
01849 #undef GAN_MAT_LMULTS_Q
01850 #undef GAN_MAT_LMULTS_S
01851 #undef GAN_MAT_RMULTS_Q
01852 #undef GAN_MAT_RMULTS_S
01853 #undef GAN_SYMMATL_LRMULT_Q
01854 #undef GAN_SYMMATL_LRMULT_S
01855 #undef GAN_SYMMATR_LRMULT_Q
01856 #undef GAN_SYMMATR_LRMULT_S
01857 #undef GAN_MAT_LMULTL_Q
01858 #undef GAN_MAT_LMULTL_S
01859 #undef GAN_MAT_LMULTL_I
01860 #undef GAN_MAT_LMULTLI_Q
01861 #undef GAN_MAT_LMULTLI_S
01862 #undef GAN_MAT_LMULTLI_I
01863 #undef GAN_MAT_LMULTLT_Q
01864 #undef GAN_MAT_LMULTLT_S
01865 #undef GAN_MAT_LMULTLT_I
01866 #undef GAN_MAT_LMULTLIT_Q
01867 #undef GAN_MAT_LMULTLIT_S
01868 #undef GAN_MAT_LMULTLIT_I
01869 #undef GAN_MAT_RMULTL_Q
01870 #undef GAN_MAT_RMULTL_S
01871 #undef GAN_MAT_RMULTL_I
01872 #undef GAN_MAT_RMULTLI_Q
01873 #undef GAN_MAT_RMULTLI_S
01874 #undef GAN_MAT_RMULTLI_I
01875 #undef GAN_MAT_RMULTLT_Q
01876 #undef GAN_MAT_RMULTLT_S
01877 #undef GAN_MAT_RMULTLT_I
01878 #undef GAN_MAT_RMULTLIT_Q
01879 #undef GAN_MAT_RMULTLIT_S
01880 #undef GAN_MAT_RMULTLIT_I
01881 #undef GAN_MAT_SRMULTT_Q
01882 #undef GAN_MAT_SRMULTT_S
01883 #undef GAN_MAT_SRMULTT_I
01884 #undef GAN_MAT_SLMULTT_Q
01885 #undef GAN_MAT_SLMULTT_S
01886 #undef GAN_MAT_SLMULTT_I
01887 #undef GAN_MAT_RMULTLIT_S
01888 #undef GAN_MAT_SUMSQR_Q
01889 #undef GAN_MAT_SUMSQR_S
01890 #undef GAN_MAT_FNORM_Q
01891 #undef GAN_MAT_FNORM_S
01892 #undef GAN_MAT_FROM_MAT_Q
01893 #undef GAN_MAT_FROM_MAT_S
01894 #undef GAN_MAT_FROM_SQUMAT_Q
01895 #undef GAN_MAT_FROM_SQUMAT_S
01896 #undef GAN_SQUMAT_FROM_SQUMAT_Q
01897 #undef GAN_SQUMAT_FROM_SQUMAT_S
01898 
01899 /* declare functions specific to symmetric 3x3 matrices */
01913 /* This library is free software; you can redistribute it and/or
01914    modify it under the terms of the GNU Lesser General Public
01915    License as published by the Free Software Foundation; either
01916    version 2.1 of the License, or (at your option) any later version.
01917 
01918    This library is distributed in the hope that it will be useful,
01919    but WITHOUT ANY WARRANTY; without even the implied warranty of
01920    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
01921    Lesser General Public License for more details.
01922 
01923    You should have received a copy of the GNU Lesser General Public
01924    License along with this library; if not, write to the Free Software
01925    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01926 */
01927 
01928 #ifndef _GAN_3X3SYMMAT_H
01929 
01943  Gan_SquMatrix33 *gan_symmat33_fill_q ( Gan_SquMatrix33 *A,
01944                                        double XX,
01945                                        double YX, double YY,
01946                                        double ZX, double ZY, double ZZ );
01947 
01969  void gan_symmat33_get_parts_q ( const Gan_SquMatrix33 *A,
01970                                 Gan_SquMatrix22 *B, Gan_Vector2 *p, double *s);
01971 
01994  Gan_SquMatrix33 *gan_symmat33_set_parts_q ( Gan_SquMatrix33 *A,
01995                                             const Gan_SquMatrix22 *B,
01996                                             const Gan_Vector2 *p, double s );
01997 
02003 #endif /* #ifndef _GAN_3X3SYMMAT_H */
02004 
02005 #define GAN_MATTYPE Gan_SquMatrix33
02006 #define GAN_MATRIX_TYPE Gan_SquMatrix
02007 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
02008 #define GAN_VECTOR_TYPE Gan_Vector
02009 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
02010 #define GAN_REALTYPE double
02011 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64
02012 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f64
02013 #define GAN_VECTYPE1 Gan_Vector3
02014 #define GAN_VECTYPE2 Gan_Vector3
02015 #define GAN_FIXED_MATRIX_TYPE GAN_SYMMETRIC_MATRIX33
02016 #define GAN_MAT_FPRINT      gan_symmat33_fprint
02017 #define GAN_MAT_PRINT       gan_symmat33_print
02018 #define GAN_MAT_FSCANF      gan_symmat33_fscanf
02019 #define GAN_MAT_FWRITE      gan_symmat33_fwrite
02020 #define GAN_MAT_FREAD       gan_symmat33_fread
02021 #define GAN_MAT_ZERO_Q      gan_symmat33_zero_q
02022 #define GAN_MAT_ZERO_S      gan_symmat33_zero_s
02023 #define GAN_MAT_COPY_Q      gan_symmat33_copy_q
02024 #define GAN_MAT_COPY_S      gan_symmat33_copy_s
02025 #define GAN_MAT_SCALE_Q     gan_symmat33_scale_q
02026 #define GAN_MAT_SCALE_S     gan_symmat33_scale_s
02027 #define GAN_MAT_SCALE_I     gan_symmat33_scale_i
02028 #define GAN_MAT_DIVIDE_Q    gan_symmat33_divide_q
02029 #define GAN_MAT_DIVIDE_S    gan_symmat33_divide_s
02030 #define GAN_MAT_DIVIDE_I    gan_symmat33_divide_i
02031 #define GAN_MAT_NEGATE_Q    gan_symmat33_negate_q
02032 #define GAN_MAT_NEGATE_S    gan_symmat33_negate_s
02033 #define GAN_MAT_NEGATE_I    gan_symmat33_negate_i
02034 #define GAN_MAT_UNIT_Q      gan_symmat33_unit_q
02035 #define GAN_MAT_UNIT_S      gan_symmat33_unit_s
02036 #define GAN_MAT_UNIT_I      gan_symmat33_unit_i
02037 #define GAN_MAT_ADD_Q       gan_symmat33_add_q
02038 #define GAN_MAT_ADD_I1      gan_symmat33_add_i1
02039 #define GAN_MAT_ADD_I2      gan_symmat33_add_i2
02040 #define GAN_MAT_INCREMENT   gan_symmat33_increment
02041 #define GAN_MAT_ADD_S       gan_symmat33_add_s
02042 #define GAN_MAT_SUB_Q       gan_symmat33_sub_q
02043 #define GAN_MAT_SUB_I1      gan_symmat33_sub_i1
02044 #define GAN_MAT_SUB_I2      gan_symmat33_sub_i2
02045 #define GAN_MAT_DECREMENT   gan_symmat33_decrement
02046 #define GAN_MAT_SUB_S       gan_symmat33_sub_s
02047 #define GAN_MAT_MULTV_Q     gan_symmat33_multv3_q
02048 #define GAN_MAT_MULTV_S     gan_symmat33_multv3_s
02049 #define GAN_MAT_SUMSQR_Q    gan_symmat33_sumsqr_q
02050 #define GAN_MAT_SUMSQR_S    gan_symmat33_sumsqr_s
02051 #define GAN_MAT_FNORM_Q     gan_symmat33_Fnorm_q
02052 #define GAN_MAT_FNORM_S     gan_symmat33_Fnorm_s
02053 
02054 #define GAN_SQUMAT_IDENT_Q    gan_symmat33_ident_q
02055 #define GAN_SQUMAT_IDENT_S    gan_symmat33_ident_s
02056 #define GAN_SQUMAT_INVERT     gan_symmat33_invert
02057 #define GAN_SQUMAT_INVERT_Q   gan_symmat33_invert_q
02058 #define GAN_SQUMAT_INVERT_S   gan_symmat33_invert_s
02059 #define GAN_SQUMAT_INVERT_I   gan_symmat33_invert_i
02060 #define GAN_SQUMAT_DET_Q      gan_symmat33_det_q
02061 #define GAN_SQUMAT_DET_S      gan_symmat33_det_s
02062 #define GAN_SQUMAT_TRACE_Q    gan_symmat33_trace_q
02063 #define GAN_SQUMAT_TRACE_S    gan_symmat33_trace_s
02064 
02065 #define GAN_VEC_OUTER_SYM_Q gan_vec33_outer_sym_q
02066 #define GAN_VEC_OUTER_SYM_S gan_vec33_outer_sym_s
02067 #define GAN_SYMMAT_CHOLESKY   gan_symmat33_cholesky
02068 #define GAN_SYMMAT_CHOLESKY_Q gan_symmat33_cholesky_q
02069 #define GAN_SYMMAT_CHOLESKY_S gan_symmat33_cholesky_s
02070 #define GAN_SYMMAT_CHOLESKY_I gan_symmat33_cholesky_i
02071 
02072 #ifndef _GAN_3X3SYMMAT_H
02073 #define _GAN_3X3SYMMAT_H
02074 
02075 
02076 #endif /* #ifndef _GAN_3X3SYMMAT_H */
02077 
02090 /* This library is free software; you can redistribute it and/or
02091    modify it under the terms of the GNU Lesser General Public
02092    License as published by the Free Software Foundation; either
02093    version 2.1 of the License, or (at your option) any later version.
02094 
02095    This library is distributed in the hope that it will be useful,
02096    but WITHOUT ANY WARRANTY; without even the implied warranty of
02097    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02098    Lesser General Public License for more details.
02099 
02100    You should have received a copy of the GNU Lesser General Public
02101    License along with this library; if not, write to the Free Software
02102    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02103 */
02104 
02105 /* function declarations for functions common to all small symmetric matrix
02106  * types */
02107 
02108 
02109 
02110 /* documentation for macros defined in individual header files */
02111 
02122  Gan_SquMatrix33 *gan_vec33_outer_sym_q ( const Gan_Vector3 *p, Gan_SquMatrix33 *A );
02123 
02145  Gan_SquMatrix33 *gan_symmat33_cholesky_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02146 
02155  Gan_SquMatrix33 *gan_symmat33_cholesky_i ( Gan_SquMatrix33 *A );
02156 
02162 #undef GAN_VEC_OUTER_SYM_Q
02163 #undef GAN_VEC_OUTER_SYM_S
02164 #undef GAN_SYMMAT_CHOLESKY
02165 #undef GAN_SYMMAT_CHOLESKY_Q
02166 #undef GAN_SYMMAT_CHOLESKY_S
02167 #undef GAN_SYMMAT_CHOLESKY_I
02168 
02181 /* This library is free software; you can redistribute it and/or
02182    modify it under the terms of the GNU Lesser General Public
02183    License as published by the Free Software Foundation; either
02184    version 2.1 of the License, or (at your option) any later version.
02185 
02186    This library is distributed in the hope that it will be useful,
02187    but WITHOUT ANY WARRANTY; without even the implied warranty of
02188    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02189    Lesser General Public License for more details.
02190 
02191    You should have received a copy of the GNU Lesser General Public
02192    License along with this library; if not, write to the Free Software
02193    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02194 */
02195 
02196 /* function declarations for functions common to all small square matrix
02197  * types */
02198 
02199 
02200 
02201 /* documentation for macros defined in individual header files */
02202 
02215  Gan_SquMatrix33 *gan_symmat33_ident_q ( Gan_SquMatrix33 *A );
02216 
02267  Gan_SquMatrix33 *gan_symmat33_invert_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02268 
02277  Gan_SquMatrix33 *gan_symmat33_invert_i ( Gan_SquMatrix33 *A );
02278 
02293  double gan_symmat33_det_q ( const Gan_SquMatrix33 *A );
02294 
02300  double gan_symmat33_trace_q ( const Gan_SquMatrix33 *A );
02301 
02307 #undef GAN_SQUMAT_IDENT_Q
02308 #undef GAN_SQUMAT_IDENT_S
02309 #undef GAN_SQUMAT_TPOSE_Q
02310 #undef GAN_SQUMAT_TPOSE_S
02311 #undef GAN_SQUMAT_TPOSE_I
02312 #undef GAN_MAT_SADDT_Q
02313 #undef GAN_MAT_SADDT_S
02314 #undef GAN_SQUMATI_MULTV_Q
02315 #undef GAN_SQUMATI_MULTV_S
02316 #undef GAN_SQUMATI_MULTV_I
02317 #undef GAN_SQUMATIT_MULTV_Q
02318 #undef GAN_SQUMATIT_MULTV_S
02319 #undef GAN_SQUMATIT_MULTV_I
02320 #undef GAN_SQUMAT_INVERT
02321 #undef GAN_SQUMAT_INVERT_Q
02322 #undef GAN_SQUMAT_INVERT_S
02323 #undef GAN_SQUMAT_INVERT_I
02324 #undef GAN_SQUMAT_ADJOINT_Q
02325 #undef GAN_SQUMAT_ADJOINT_S
02326 #undef GAN_SQUMAT_ADJOINTT_Q
02327 #undef GAN_SQUMAT_ADJOINTT_S
02328 #undef GAN_SQUMAT_DET_Q
02329 #undef GAN_SQUMAT_DET_S
02330 #undef GAN_SQUMAT_TRACE_Q
02331 #undef GAN_SQUMAT_TRACE_S
02332 
02345 /* This library is free software; you can redistribute it and/or
02346    modify it under the terms of the GNU Lesser General Public
02347    License as published by the Free Software Foundation; either
02348    version 2.1 of the License, or (at your option) any later version.
02349 
02350    This library is distributed in the hope that it will be useful,
02351    but WITHOUT ANY WARRANTY; without even the implied warranty of
02352    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02353    Lesser General Public License for more details.
02354 
02355    You should have received a copy of the GNU Lesser General Public
02356    License along with this library; if not, write to the Free Software
02357    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02358 */
02359 
02360 /* function declarations for functions common to all small vector types */
02361 
02362 
02363 
02364 /* documentation for macros defined in individual header files */
02365 
02376  Gan_SquMatrix33 *gan_symmat33_zero_q ( const Gan_SquMatrix33 *A );
02377 
02394  Gan_SquMatrix33 *gan_symmat33_copy_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02395 
02413  Gan_SquMatrix33 *gan_symmat33_scale_q ( Gan_SquMatrix33 *A, double a,
02414                                Gan_SquMatrix33 *B );
02415 
02423  Gan_SquMatrix33 *gan_symmat33_scale_i ( Gan_SquMatrix33 *A, double a );
02424 
02433  Gan_SquMatrix33 *gan_symmat33_divide_q ( Gan_SquMatrix33 *A, double a,
02434                                 Gan_SquMatrix33 *B );
02435 
02443  Gan_SquMatrix33 *gan_symmat33_divide_i ( Gan_SquMatrix33 *A, double a );
02444 
02452  Gan_SquMatrix33 *gan_symmat33_negate_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02453 
02461  Gan_SquMatrix33 *gan_symmat33_negate_i ( Gan_SquMatrix33 *A );
02462 
02470  Gan_SquMatrix33 *gan_symmat33_unit_i ( Gan_SquMatrix33 *A );
02471 
02489  Gan_SquMatrix33 *gan_symmat33_add_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
02490 
02499  Gan_SquMatrix33 *gan_symmat33_add_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02500 
02509  Gan_SquMatrix33 *gan_symmat33_add_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02510 
02519  Gan_SquMatrix33 *gan_symmat33_increment ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02520 
02538  Gan_SquMatrix33 *gan_symmat33_sub_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
02539 
02548  Gan_SquMatrix33 *gan_symmat33_sub_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02549 
02558  Gan_SquMatrix33 *gan_symmat33_sub_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02559 
02568  Gan_SquMatrix33 *gan_symmat33_decrement ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
02569 
02588  Gan_Vector3 *gan_symmat33_multv3_q ( const Gan_SquMatrix33 *A, Gan_Vector3 *p,
02589                                 Gan_Vector3 *q );
02590 
02591 
02592 
02593 
02665  double gan_symmat33_sumsqr_q ( const Gan_SquMatrix33 *A );
02666 
02673  double gan_symmat33_Fnorm_q ( const Gan_SquMatrix33 *A );
02674 
02705 /* This library is free software; you can redistribute it and/or
02706    modify it under the terms of the GNU Lesser General Public
02707    License as published by the Free Software Foundation; either
02708    version 2.1 of the License, or (at your option) any later version.
02709 
02710    This library is distributed in the hope that it will be useful,
02711    but WITHOUT ANY WARRANTY; without even the implied warranty of
02712    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02713    Lesser General Public License for more details.
02714 
02715    You should have received a copy of the GNU Lesser General Public
02716    License along with this library; if not, write to the Free Software
02717    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02718 */
02719 
02720 #undef GAN_MATTYPE
02721 #undef GAN_MATRIX_TYPE
02722 #undef GAN_SQUMATRIX_TYPE
02723 #undef GAN_VECTOR_TYPE
02724 #undef GAN_MAT_ELEMENT_TYPE
02725 #undef GAN_REALTYPE
02726 #undef GAN_FWRITE_LENDIAN
02727 #undef GAN_FREAD_LENDIAN
02728 #undef GAN_VECTYPE1
02729 #undef GAN_VECTYPE2
02730 #undef GAN_MATTYPEL
02731 #undef GAN_MATTYPER
02732 #undef GAN_SQUMATTYPEL
02733 #undef GAN_SQUMATTYPER
02734 #undef GAN_FIXED_MATRIX_TYPE
02735 #undef GAN_MAT_FPRINT
02736 #undef GAN_MAT_PRINT
02737 #undef GAN_MAT_FSCANF
02738 #undef GAN_MAT_FWRITE
02739 #undef GAN_MAT_FREAD
02740 #undef GAN_MAT_ZERO_Q
02741 #undef GAN_MAT_ZERO_S
02742 #undef GAN_MAT_COPY_Q
02743 #undef GAN_MAT_COPY_S
02744 #undef GAN_MAT_SCALE_Q
02745 #undef GAN_MAT_SCALE_S
02746 #undef GAN_MAT_SCALE_I
02747 #undef GAN_MAT_DIVIDE_Q
02748 #undef GAN_MAT_DIVIDE_S
02749 #undef GAN_MAT_DIVIDE_I
02750 #undef GAN_MAT_NEGATE_Q
02751 #undef GAN_MAT_NEGATE_S
02752 #undef GAN_MAT_NEGATE_I
02753 #undef GAN_MAT_UNIT_Q
02754 #undef GAN_MAT_UNIT_S
02755 #undef GAN_MAT_UNIT_I
02756 #undef GAN_MAT_ADD_Q
02757 #undef GAN_MAT_ADD_I1
02758 #undef GAN_MAT_ADD_I2
02759 #undef GAN_MAT_INCREMENT
02760 #undef GAN_MAT_ADD_S
02761 #undef GAN_MAT_SUB_Q
02762 #undef GAN_MAT_SUB_I1
02763 #undef GAN_MAT_SUB_I2
02764 #undef GAN_MAT_DECREMENT
02765 #undef GAN_MAT_SUB_S
02766 #undef GAN_VEC_OUTER_Q
02767 #undef GAN_VEC_OUTER_S
02768 #undef GAN_MAT_MULTV_Q
02769 #undef GAN_MAT_MULTV_S
02770 #undef GAN_MAT_MULTV_I
02771 #undef GAN_MATT_MULTV_Q
02772 #undef GAN_MATT_MULTV_S
02773 #undef GAN_MATT_MULTV_I
02774 #undef GAN_MAT_LMULTM_Q
02775 #undef GAN_MAT_LMULTM_S
02776 #undef GAN_MAT_LMULTMT_Q
02777 #undef GAN_MAT_LMULTMT_S
02778 #undef GAN_MAT_RMULTM_Q
02779 #undef GAN_MAT_RMULTM_S
02780 #undef GAN_MAT_RMULTMT_Q
02781 #undef GAN_MAT_RMULTMT_S
02782 #undef GAN_MAT_LMULTMT_SYM_Q
02783 #undef GAN_MAT_LMULTMT_SYM_S
02784 #undef GAN_MAT_RMULTMT_SYM_Q
02785 #undef GAN_MAT_RMULTMT_SYM_S
02786 #undef GAN_MAT_LMULTS_Q
02787 #undef GAN_MAT_LMULTS_S
02788 #undef GAN_MAT_RMULTS_Q
02789 #undef GAN_MAT_RMULTS_S
02790 #undef GAN_SYMMATL_LRMULT_Q
02791 #undef GAN_SYMMATL_LRMULT_S
02792 #undef GAN_SYMMATR_LRMULT_Q
02793 #undef GAN_SYMMATR_LRMULT_S
02794 #undef GAN_MAT_LMULTL_Q
02795 #undef GAN_MAT_LMULTL_S
02796 #undef GAN_MAT_LMULTL_I
02797 #undef GAN_MAT_LMULTLI_Q
02798 #undef GAN_MAT_LMULTLI_S
02799 #undef GAN_MAT_LMULTLI_I
02800 #undef GAN_MAT_LMULTLT_Q
02801 #undef GAN_MAT_LMULTLT_S
02802 #undef GAN_MAT_LMULTLT_I
02803 #undef GAN_MAT_LMULTLIT_Q
02804 #undef GAN_MAT_LMULTLIT_S
02805 #undef GAN_MAT_LMULTLIT_I
02806 #undef GAN_MAT_RMULTL_Q
02807 #undef GAN_MAT_RMULTL_S
02808 #undef GAN_MAT_RMULTL_I
02809 #undef GAN_MAT_RMULTLI_Q
02810 #undef GAN_MAT_RMULTLI_S
02811 #undef GAN_MAT_RMULTLI_I
02812 #undef GAN_MAT_RMULTLT_Q
02813 #undef GAN_MAT_RMULTLT_S
02814 #undef GAN_MAT_RMULTLT_I
02815 #undef GAN_MAT_RMULTLIT_Q
02816 #undef GAN_MAT_RMULTLIT_S
02817 #undef GAN_MAT_RMULTLIT_I
02818 #undef GAN_MAT_SRMULTT_Q
02819 #undef GAN_MAT_SRMULTT_S
02820 #undef GAN_MAT_SRMULTT_I
02821 #undef GAN_MAT_SLMULTT_Q
02822 #undef GAN_MAT_SLMULTT_S
02823 #undef GAN_MAT_SLMULTT_I
02824 #undef GAN_MAT_RMULTLIT_S
02825 #undef GAN_MAT_SUMSQR_Q
02826 #undef GAN_MAT_SUMSQR_S
02827 #undef GAN_MAT_FNORM_Q
02828 #undef GAN_MAT_FNORM_S
02829 #undef GAN_MAT_FROM_MAT_Q
02830 #undef GAN_MAT_FROM_MAT_S
02831 #undef GAN_MAT_FROM_SQUMAT_Q
02832 #undef GAN_MAT_FROM_SQUMAT_S
02833 #undef GAN_SQUMAT_FROM_SQUMAT_Q
02834 #undef GAN_SQUMAT_FROM_SQUMAT_S
02835 
02836 /* declare functions specific to lower triangular 3x3 matrices */
02850 /* This library is free software; you can redistribute it and/or
02851    modify it under the terms of the GNU Lesser General Public
02852    License as published by the Free Software Foundation; either
02853    version 2.1 of the License, or (at your option) any later version.
02854 
02855    This library is distributed in the hope that it will be useful,
02856    but WITHOUT ANY WARRANTY; without even the implied warranty of
02857    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
02858    Lesser General Public License for more details.
02859 
02860    You should have received a copy of the GNU Lesser General Public
02861    License along with this library; if not, write to the Free Software
02862    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
02863 */
02864 
02865 #ifndef _GAN_3X3LTMAT_H
02866 
02882  Gan_SquMatrix33 *gan_ltmat33_fill_q ( Gan_SquMatrix33 *A,
02883                                       double XX,
02884                                       double YX, double YY,
02885                                       double ZX, double ZY, double ZZ );
02886 
02906  void gan_ltmat33_get_parts_q ( const Gan_SquMatrix33 *A,
02907                                Gan_SquMatrix22 *B, Gan_Vector2 *p, double *s );
02908 
02931  Gan_SquMatrix33 * gan_ltmat33_set_parts_q ( Gan_SquMatrix33 *A,
02932                                             const Gan_SquMatrix22 *B,
02933                                             const Gan_Vector2 *p, double s );
02934 
02940 #endif /* #ifndef _GAN_3X3LTMAT_H */
02941 
02942 #define GAN_MATTYPE Gan_SquMatrix33
02943 #define GAN_MATRIX_TYPE Gan_SquMatrix
02944 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
02945 #define GAN_VECTOR_TYPE Gan_Vector
02946 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
02947 #define GAN_REALTYPE double
02948 #define GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64
02949 #define GAN_FREAD_LENDIAN  gan_fread_lendian_f64
02950 #define GAN_VECTYPE1 Gan_Vector3
02951 #define GAN_VECTYPE2 Gan_Vector3
02952 #define GAN_SQUMATTYPEL Gan_SquMatrix33
02953 #define GAN_SQUMATTYPER Gan_SquMatrix33
02954 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33
02955 #define GAN_MAT_FPRINT     gan_ltmat33_fprint
02956 #define GAN_MAT_PRINT      gan_ltmat33_print
02957 #define GAN_MAT_FSCANF     gan_ltmat33_fscanf
02958 #define GAN_MAT_FWRITE     gan_ltmat33_fwrite
02959 #define GAN_MAT_FREAD      gan_ltmat33_fread
02960 #define GAN_MAT_ZERO_Q     gan_ltmat33_zero_q
02961 #define GAN_MAT_ZERO_S     gan_ltmat33_zero_s
02962 #define GAN_MAT_COPY_Q     gan_ltmat33_copy_q
02963 #define GAN_MAT_COPY_S     gan_ltmat33_copy_s
02964 #define GAN_MAT_SCALE_Q    gan_ltmat33_scale_q
02965 #define GAN_MAT_SCALE_S    gan_ltmat33_scale_s
02966 #define GAN_MAT_SCALE_I    gan_ltmat33_scale_i
02967 #define GAN_MAT_DIVIDE_Q   gan_ltmat33_divide_q
02968 #define GAN_MAT_DIVIDE_S   gan_ltmat33_divide_s
02969 #define GAN_MAT_DIVIDE_I   gan_ltmat33_divide_i
02970 #define GAN_MAT_NEGATE_Q   gan_ltmat33_negate_q
02971 #define GAN_MAT_NEGATE_S   gan_ltmat33_negate_s
02972 #define GAN_MAT_NEGATE_I   gan_ltmat33_negate_i
02973 #define GAN_MAT_UNIT_Q     gan_ltmat33_unit_q
02974 #define GAN_MAT_UNIT_S     gan_ltmat33_unit_s
02975 #define GAN_MAT_UNIT_I     gan_ltmat33_unit_i
02976 #define GAN_MAT_ADD_Q      gan_ltmat33_add_q
02977 #define GAN_MAT_ADD_I1     gan_ltmat33_add_i1
02978 #define GAN_MAT_ADD_I2     gan_ltmat33_add_i2
02979 #define GAN_MAT_INCREMENT  gan_ltmat33_increment
02980 #define GAN_MAT_ADD_S      gan_ltmat33_add_s
02981 #define GAN_MAT_SUB_Q      gan_ltmat33_sub_q
02982 #define GAN_MAT_SUB_I1     gan_ltmat33_sub_i1
02983 #define GAN_MAT_SUB_I2     gan_ltmat33_sub_i2
02984 #define GAN_MAT_DECREMENT  gan_ltmat33_decrement
02985 #define GAN_MAT_SUB_S      gan_ltmat33_sub_s
02986 #define GAN_MAT_MULTV_Q    gan_ltmat33_multv3_q
02987 #define GAN_MAT_MULTV_S    gan_ltmat33_multv3_s
02988 #define GAN_MAT_MULTV_I    gan_ltmat33_multv3_i
02989 #define GAN_MATT_MULTV_Q   gan_ltmat33T_multv3_q
02990 #define GAN_MATT_MULTV_S   gan_ltmat33T_multv3_s
02991 #define GAN_MATT_MULTV_I   gan_ltmat33T_multv3_i
02992 #define GAN_MAT_SRMULTT_Q  gan_ltmat33_srmultT_q
02993 #define GAN_MAT_SRMULTT_S  gan_ltmat33_srmultT_s
02994 #define GAN_MAT_SRMULTT_I  gan_ltmat33_srmultT_i
02995 #define GAN_MAT_SLMULTT_Q  gan_ltmat33_slmultT_q
02996 #define GAN_MAT_SLMULTT_S  gan_ltmat33_slmultT_s
02997 #define GAN_MAT_SLMULTT_I  gan_ltmat33_slmultT_i
02998 #define GAN_MAT_SUMSQR_Q   gan_ltmat33_sumsqr_q
02999 #define GAN_MAT_SUMSQR_S   gan_ltmat33_sumsqr_s
03000 #define GAN_MAT_FNORM_Q    gan_ltmat33_Fnorm_q
03001 #define GAN_MAT_FNORM_S    gan_ltmat33_Fnorm_s
03002 
03003 #define GAN_SQUMAT_IDENT_Q    gan_ltmat33_ident_q
03004 #define GAN_SQUMAT_IDENT_S    gan_ltmat33_ident_s
03005 #define GAN_SQUMATI_MULTV_Q   gan_ltmat33I_multv3_q
03006 #define GAN_SQUMATI_MULTV_S   gan_ltmat33I_multv3_s
03007 #define GAN_SQUMATI_MULTV_I   gan_ltmat33I_multv3_i
03008 #define GAN_SQUMATIT_MULTV_Q  gan_ltmat33IT_multv3_q
03009 #define GAN_SQUMATIT_MULTV_S  gan_ltmat33IT_multv3_s
03010 #define GAN_SQUMATIT_MULTV_I  gan_ltmat33IT_multv3_i
03011 #define GAN_SQUMAT_INVERT     gan_ltmat33_invert
03012 #define GAN_SQUMAT_INVERT_Q   gan_ltmat33_invert_q
03013 #define GAN_SQUMAT_INVERT_S   gan_ltmat33_invert_s
03014 #define GAN_SQUMAT_INVERT_I   gan_ltmat33_invert_i
03015 #define GAN_SQUMAT_DET_Q      gan_ltmat33_det_q
03016 #define GAN_SQUMAT_DET_S      gan_ltmat33_det_s
03017 #define GAN_SQUMAT_TRACE_Q    gan_ltmat33_trace_q
03018 #define GAN_SQUMAT_TRACE_S    gan_ltmat33_trace_s
03019 
03020 #ifndef _GAN_3X3LTMAT_H
03021 #define _GAN_3X3LTMAT_H
03022 
03023 
03024 #endif /* #ifndef _GAN_3X3LTMAT_H */
03025 
03038 /* This library is free software; you can redistribute it and/or
03039    modify it under the terms of the GNU Lesser General Public
03040    License as published by the Free Software Foundation; either
03041    version 2.1 of the License, or (at your option) any later version.
03042 
03043    This library is distributed in the hope that it will be useful,
03044    but WITHOUT ANY WARRANTY; without even the implied warranty of
03045    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03046    Lesser General Public License for more details.
03047 
03048    You should have received a copy of the GNU Lesser General Public
03049    License along with this library; if not, write to the Free Software
03050    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03051 */
03052 
03053 /* function declarations for functions common to all small square matrix
03054  * types */
03055 
03056 
03057 
03058 /* documentation for macros defined in individual header files */
03059 
03072  Gan_SquMatrix33 *gan_ltmat33_ident_q ( Gan_SquMatrix33 *A );
03073 
03111  Gan_Vector3 *gan_ltmat33I_multv3_q ( const Gan_SquMatrix33 *A, Gan_Vector3 *p,
03112                                     Gan_Vector3 *q );
03113 
03122  Gan_Vector3 *gan_ltmat33I_multv3_i ( const Gan_SquMatrix33 *A, Gan_Vector3 *p );
03123 
03132  Gan_Vector3 *gan_ltmat33IT_multv3_q ( const Gan_SquMatrix33 *A, Gan_Vector3 *p,
03133                                      Gan_Vector3 *q );
03134 
03143  Gan_Vector3 *gan_ltmat33IT_multv3_i ( const Gan_SquMatrix33 *A, Gan_Vector3 *p );
03144 
03162  Gan_SquMatrix33 *gan_ltmat33_invert_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03163 
03172  Gan_SquMatrix33 *gan_ltmat33_invert_i ( Gan_SquMatrix33 *A );
03173 
03188  double gan_ltmat33_det_q ( const Gan_SquMatrix33 *A );
03189 
03195  double gan_ltmat33_trace_q ( const Gan_SquMatrix33 *A );
03196 
03202 #undef GAN_SQUMAT_IDENT_Q
03203 #undef GAN_SQUMAT_IDENT_S
03204 #undef GAN_SQUMAT_TPOSE_Q
03205 #undef GAN_SQUMAT_TPOSE_S
03206 #undef GAN_SQUMAT_TPOSE_I
03207 #undef GAN_MAT_SADDT_Q
03208 #undef GAN_MAT_SADDT_S
03209 #undef GAN_SQUMATI_MULTV_Q
03210 #undef GAN_SQUMATI_MULTV_S
03211 #undef GAN_SQUMATI_MULTV_I
03212 #undef GAN_SQUMATIT_MULTV_Q
03213 #undef GAN_SQUMATIT_MULTV_S
03214 #undef GAN_SQUMATIT_MULTV_I
03215 #undef GAN_SQUMAT_INVERT
03216 #undef GAN_SQUMAT_INVERT_Q
03217 #undef GAN_SQUMAT_INVERT_S
03218 #undef GAN_SQUMAT_INVERT_I
03219 #undef GAN_SQUMAT_ADJOINT_Q
03220 #undef GAN_SQUMAT_ADJOINT_S
03221 #undef GAN_SQUMAT_ADJOINTT_Q
03222 #undef GAN_SQUMAT_ADJOINTT_S
03223 #undef GAN_SQUMAT_DET_Q
03224 #undef GAN_SQUMAT_DET_S
03225 #undef GAN_SQUMAT_TRACE_Q
03226 #undef GAN_SQUMAT_TRACE_S
03227 
03240 /* This library is free software; you can redistribute it and/or
03241    modify it under the terms of the GNU Lesser General Public
03242    License as published by the Free Software Foundation; either
03243    version 2.1 of the License, or (at your option) any later version.
03244 
03245    This library is distributed in the hope that it will be useful,
03246    but WITHOUT ANY WARRANTY; without even the implied warranty of
03247    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03248    Lesser General Public License for more details.
03249 
03250    You should have received a copy of the GNU Lesser General Public
03251    License along with this library; if not, write to the Free Software
03252    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03253 */
03254 
03255 /* function declarations for functions common to all small vector types */
03256 
03257 
03258 
03259 /* documentation for macros defined in individual header files */
03260 
03271  Gan_SquMatrix33 *gan_ltmat33_zero_q ( const Gan_SquMatrix33 *A );
03272 
03289  Gan_SquMatrix33 *gan_ltmat33_copy_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03290 
03308  Gan_SquMatrix33 *gan_ltmat33_scale_q ( Gan_SquMatrix33 *A, double a,
03309                                Gan_SquMatrix33 *B );
03310 
03318  Gan_SquMatrix33 *gan_ltmat33_scale_i ( Gan_SquMatrix33 *A, double a );
03319 
03328  Gan_SquMatrix33 *gan_ltmat33_divide_q ( Gan_SquMatrix33 *A, double a,
03329                                 Gan_SquMatrix33 *B );
03330 
03338  Gan_SquMatrix33 *gan_ltmat33_divide_i ( Gan_SquMatrix33 *A, double a );
03339 
03347  Gan_SquMatrix33 *gan_ltmat33_negate_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03348 
03356  Gan_SquMatrix33 *gan_ltmat33_negate_i ( Gan_SquMatrix33 *A );
03357 
03365  Gan_SquMatrix33 *gan_ltmat33_unit_i ( Gan_SquMatrix33 *A );
03366 
03384  Gan_SquMatrix33 *gan_ltmat33_add_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
03385 
03394  Gan_SquMatrix33 *gan_ltmat33_add_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03395 
03404  Gan_SquMatrix33 *gan_ltmat33_add_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03405 
03414  Gan_SquMatrix33 *gan_ltmat33_increment ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03415 
03433  Gan_SquMatrix33 *gan_ltmat33_sub_q ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B, Gan_SquMatrix33 *C );
03434 
03443  Gan_SquMatrix33 *gan_ltmat33_sub_i1 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03444 
03453  Gan_SquMatrix33 *gan_ltmat33_sub_i2 ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03454 
03463  Gan_SquMatrix33 *gan_ltmat33_decrement ( Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03464 
03483  Gan_Vector3 *gan_ltmat33_multv3_q ( const Gan_SquMatrix33 *A, Gan_Vector3 *p,
03484                                 Gan_Vector3 *q );
03485 
03494  Gan_Vector3 *gan_ltmat33_multv3_i ( const Gan_SquMatrix33 *A, Gan_Vector3 *p );
03495 
03504  Gan_Vector3 *gan_ltmat33T_multv3_q ( const Gan_SquMatrix33 *A, Gan_Vector3 *p,
03505                                  Gan_Vector3 *q );
03506 
03515  Gan_Vector3 *gan_ltmat33T_multv3_i ( const Gan_SquMatrix33 *A, Gan_Vector3 *p );
03516 
03578  Gan_SquMatrix33 *gan_ltmat33_slmultT_q ( Gan_SquMatrix33 *A, const Gan_SquMatrix33 *B );
03579 
03589  Gan_SquMatrix33 *gan_ltmat33_slmultT_i ( Gan_SquMatrix33 *A );
03590 
03599  Gan_SquMatrix33 *gan_ltmat33_srmultT_q ( const Gan_SquMatrix33 *A, Gan_SquMatrix33 *B );
03600 
03610  Gan_SquMatrix33 *gan_ltmat33_srmultT_i ( Gan_SquMatrix33 *A );
03611 
03626  double gan_ltmat33_sumsqr_q ( const Gan_SquMatrix33 *A );
03627 
03634  double gan_ltmat33_Fnorm_q ( const Gan_SquMatrix33 *A );
03635 
03666 /* This library is free software; you can redistribute it and/or
03667    modify it under the terms of the GNU Lesser General Public
03668    License as published by the Free Software Foundation; either
03669    version 2.1 of the License, or (at your option) any later version.
03670 
03671    This library is distributed in the hope that it will be useful,
03672    but WITHOUT ANY WARRANTY; without even the implied warranty of
03673    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03674    Lesser General Public License for more details.
03675 
03676    You should have received a copy of the GNU Lesser General Public
03677    License along with this library; if not, write to the Free Software
03678    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03679 */
03680 
03681 #undef GAN_MATTYPE
03682 #undef GAN_MATRIX_TYPE
03683 #undef GAN_SQUMATRIX_TYPE
03684 #undef GAN_VECTOR_TYPE
03685 #undef GAN_MAT_ELEMENT_TYPE
03686 #undef GAN_REALTYPE
03687 #undef GAN_FWRITE_LENDIAN
03688 #undef GAN_FREAD_LENDIAN
03689 #undef GAN_VECTYPE1
03690 #undef GAN_VECTYPE2
03691 #undef GAN_MATTYPEL
03692 #undef GAN_MATTYPER
03693 #undef GAN_SQUMATTYPEL
03694 #undef GAN_SQUMATTYPER
03695 #undef GAN_FIXED_MATRIX_TYPE
03696 #undef GAN_MAT_FPRINT
03697 #undef GAN_MAT_PRINT
03698 #undef GAN_MAT_FSCANF
03699 #undef GAN_MAT_FWRITE
03700 #undef GAN_MAT_FREAD
03701 #undef GAN_MAT_ZERO_Q
03702 #undef GAN_MAT_ZERO_S
03703 #undef GAN_MAT_COPY_Q
03704 #undef GAN_MAT_COPY_S
03705 #undef GAN_MAT_SCALE_Q
03706 #undef GAN_MAT_SCALE_S
03707 #undef GAN_MAT_SCALE_I
03708 #undef GAN_MAT_DIVIDE_Q
03709 #undef GAN_MAT_DIVIDE_S
03710 #undef GAN_MAT_DIVIDE_I
03711 #undef GAN_MAT_NEGATE_Q
03712 #undef GAN_MAT_NEGATE_S
03713 #undef GAN_MAT_NEGATE_I
03714 #undef GAN_MAT_UNIT_Q
03715 #undef GAN_MAT_UNIT_S
03716 #undef GAN_MAT_UNIT_I
03717 #undef GAN_MAT_ADD_Q
03718 #undef GAN_MAT_ADD_I1
03719 #undef GAN_MAT_ADD_I2
03720 #undef GAN_MAT_INCREMENT
03721 #undef GAN_MAT_ADD_S
03722 #undef GAN_MAT_SUB_Q
03723 #undef GAN_MAT_SUB_I1
03724 #undef GAN_MAT_SUB_I2
03725 #undef GAN_MAT_DECREMENT
03726 #undef GAN_MAT_SUB_S
03727 #undef GAN_VEC_OUTER_Q
03728 #undef GAN_VEC_OUTER_S
03729 #undef GAN_MAT_MULTV_Q
03730 #undef GAN_MAT_MULTV_S
03731 #undef GAN_MAT_MULTV_I
03732 #undef GAN_MATT_MULTV_Q
03733 #undef GAN_MATT_MULTV_S
03734 #undef GAN_MATT_MULTV_I
03735 #undef GAN_MAT_LMULTM_Q
03736 #undef GAN_MAT_LMULTM_S
03737 #undef GAN_MAT_LMULTMT_Q
03738 #undef GAN_MAT_LMULTMT_S
03739 #undef GAN_MAT_RMULTM_Q
03740 #undef GAN_MAT_RMULTM_S
03741 #undef GAN_MAT_RMULTMT_Q
03742 #undef GAN_MAT_RMULTMT_S
03743 #undef GAN_MAT_LMULTMT_SYM_Q
03744 #undef GAN_MAT_LMULTMT_SYM_S
03745 #undef GAN_MAT_RMULTMT_SYM_Q
03746 #undef GAN_MAT_RMULTMT_SYM_S
03747 #undef GAN_MAT_LMULTS_Q
03748 #undef GAN_MAT_LMULTS_S
03749 #undef GAN_MAT_RMULTS_Q
03750 #undef GAN_MAT_RMULTS_S
03751 #undef GAN_SYMMATL_LRMULT_Q
03752 #undef GAN_SYMMATL_LRMULT_S
03753 #undef GAN_SYMMATR_LRMULT_Q
03754 #undef GAN_SYMMATR_LRMULT_S
03755 #undef GAN_MAT_LMULTL_Q
03756 #undef GAN_MAT_LMULTL_S
03757 #undef GAN_MAT_LMULTL_I
03758 #undef GAN_MAT_LMULTLI_Q
03759 #undef GAN_MAT_LMULTLI_S
03760 #undef GAN_MAT_LMULTLI_I
03761 #undef GAN_MAT_LMULTLT_Q
03762 #undef GAN_MAT_LMULTLT_S
03763 #undef GAN_MAT_LMULTLT_I
03764 #undef GAN_MAT_LMULTLIT_Q
03765 #undef GAN_MAT_LMULTLIT_S
03766 #undef GAN_MAT_LMULTLIT_I
03767 #undef GAN_MAT_RMULTL_Q
03768 #undef GAN_MAT_RMULTL_S
03769 #undef GAN_MAT_RMULTL_I
03770 #undef GAN_MAT_RMULTLI_Q
03771 #undef GAN_MAT_RMULTLI_S
03772 #undef GAN_MAT_RMULTLI_I
03773 #undef GAN_MAT_RMULTLT_Q
03774 #undef GAN_MAT_RMULTLT_S
03775 #undef GAN_MAT_RMULTLT_I
03776 #undef GAN_MAT_RMULTLIT_Q
03777 #undef GAN_MAT_RMULTLIT_S
03778 #undef GAN_MAT_RMULTLIT_I
03779 #undef GAN_MAT_SRMULTT_Q
03780 #undef GAN_MAT_SRMULTT_S
03781 #undef GAN_MAT_SRMULTT_I
03782 #undef GAN_MAT_SLMULTT_Q
03783 #undef GAN_MAT_SLMULTT_S
03784 #undef GAN_MAT_SLMULTT_I
03785 #undef GAN_MAT_RMULTLIT_S
03786 #undef GAN_MAT_SUMSQR_Q
03787 #undef GAN_MAT_SUMSQR_S
03788 #undef GAN_MAT_FNORM_Q
03789 #undef GAN_MAT_FNORM_S
03790 #undef GAN_MAT_FROM_MAT_Q
03791 #undef GAN_MAT_FROM_MAT_S
03792 #undef GAN_MAT_FROM_SQUMAT_Q
03793 #undef GAN_MAT_FROM_SQUMAT_S
03794 #undef GAN_SQUMAT_FROM_SQUMAT_Q
03795 #undef GAN_SQUMAT_FROM_SQUMAT_S
03796 
03797 /* declare functions specific to upper triangular 3x3 matrices */
03811 /* This library is free software; you can redistribute it and/or
03812    modify it under the terms of the GNU Lesser General Public
03813    License as published by the Free Software Foundation; either
03814    version 2.1 of the License, or (at your option) any later version.
03815 
03816    This library is distributed in the hope that it will be useful,
03817    but WITHOUT ANY WARRANTY; without even the implied warranty of
03818    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03819    Lesser General Public License for more details.
03820 
03821    You should have received a copy of the GNU Lesser General Public
03822    License along with this library; if not, write to the Free Software
03823    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03824 */
03825 
03826 #define GAN_MATTYPE Gan_SquMatrix33
03827 #define GAN_MATRIX_TYPE Gan_SquMatrix
03828 #define GAN_SQUMATRIX_TYPE Gan_SquMatrix
03829 #define GAN_VECTOR_TYPE Gan_Vector
03830 #define GAN_MAT_ELEMENT_TYPE GAN_DOUBLE
03831 #define GAN_REALTYPE double
03832 #define GAN_MAT_FPRINT   gan_ltmat33T_fprint
03833 #define GAN_MAT_PRINT    gan_ltmat33T_print
03834 #define GAN_MAT_FSCANF   gan_ltmat33T_fscanf
03835 #define GAN_FIXED_MATRIX_TYPE GAN_LOWER_TRI_MATRIX33
03836 
03837 #define gan_ltmat33T_fwrite gan_ltmat33_fwrite
03838 #define gan_ltmat33T_fread  gan_ltmat33_fread
03839 
03852 /* This library is free software; you can redistribute it and/or
03853    modify it under the terms of the GNU Lesser General Public
03854    License as published by the Free Software Foundation; either
03855    version 2.1 of the License, or (at your option) any later version.
03856 
03857    This library is distributed in the hope that it will be useful,
03858    but WITHOUT ANY WARRANTY; without even the implied warranty of
03859    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03860    Lesser General Public License for more details.
03861 
03862    You should have received a copy of the GNU Lesser General Public
03863    License along with this library; if not, write to the Free Software
03864    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03865 */
03866 
03867 /* function declarations for functions common to all small square matrix
03868  * types */
03869 
03870 
03871 
03872 /* documentation for macros defined in individual header files */
03873 
03940 #undef GAN_SQUMAT_IDENT_Q
03941 #undef GAN_SQUMAT_IDENT_S
03942 #undef GAN_SQUMAT_TPOSE_Q
03943 #undef GAN_SQUMAT_TPOSE_S
03944 #undef GAN_SQUMAT_TPOSE_I
03945 #undef GAN_MAT_SADDT_Q
03946 #undef GAN_MAT_SADDT_S
03947 #undef GAN_SQUMATI_MULTV_Q
03948 #undef GAN_SQUMATI_MULTV_S
03949 #undef GAN_SQUMATI_MULTV_I
03950 #undef GAN_SQUMATIT_MULTV_Q
03951 #undef GAN_SQUMATIT_MULTV_S
03952 #undef GAN_SQUMATIT_MULTV_I
03953 #undef GAN_SQUMAT_INVERT
03954 #undef GAN_SQUMAT_INVERT_Q
03955 #undef GAN_SQUMAT_INVERT_S
03956 #undef GAN_SQUMAT_INVERT_I
03957 #undef GAN_SQUMAT_ADJOINT_Q
03958 #undef GAN_SQUMAT_ADJOINT_S
03959 #undef GAN_SQUMAT_ADJOINTT_Q
03960 #undef GAN_SQUMAT_ADJOINTT_S
03961 #undef GAN_SQUMAT_DET_Q
03962 #undef GAN_SQUMAT_DET_S
03963 #undef GAN_SQUMAT_TRACE_Q
03964 #undef GAN_SQUMAT_TRACE_S
03965 
03978 /* This library is free software; you can redistribute it and/or
03979    modify it under the terms of the GNU Lesser General Public
03980    License as published by the Free Software Foundation; either
03981    version 2.1 of the License, or (at your option) any later version.
03982 
03983    This library is distributed in the hope that it will be useful,
03984    but WITHOUT ANY WARRANTY; without even the implied warranty of
03985    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
03986    Lesser General Public License for more details.
03987 
03988    You should have received a copy of the GNU Lesser General Public
03989    License along with this library; if not, write to the Free Software
03990    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
03991 */
03992 
03993 /* function declarations for functions common to all small vector types */
03994 
03995 
03996 
03997 /* documentation for macros defined in individual header files */
03998 
04169 /* This library is free software; you can redistribute it and/or
04170    modify it under the terms of the GNU Lesser General Public
04171    License as published by the Free Software Foundation; either
04172    version 2.1 of the License, or (at your option) any later version.
04173 
04174    This library is distributed in the hope that it will be useful,
04175    but WITHOUT ANY WARRANTY; without even the implied warranty of
04176    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
04177    Lesser General Public License for more details.
04178 
04179    You should have received a copy of the GNU Lesser General Public
04180    License along with this library; if not, write to the Free Software
04181    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
04182 */
04183 
04184 #undef GAN_MATTYPE
04185 #undef GAN_MATRIX_TYPE
04186 #undef GAN_SQUMATRIX_TYPE
04187 #undef GAN_VECTOR_TYPE
04188 #undef GAN_MAT_ELEMENT_TYPE
04189 #undef GAN_REALTYPE
04190 #undef GAN_FWRITE_LENDIAN
04191 #undef GAN_FREAD_LENDIAN
04192 #undef GAN_VECTYPE1
04193 #undef GAN_VECTYPE2
04194 #undef GAN_MATTYPEL
04195 #undef GAN_MATTYPER
04196 #undef GAN_SQUMATTYPEL
04197 #undef GAN_SQUMATTYPER
04198 #undef GAN_FIXED_MATRIX_TYPE
04199 #undef GAN_MAT_FPRINT
04200 #undef GAN_MAT_PRINT
04201 #undef GAN_MAT_FSCANF
04202 #undef GAN_MAT_FWRITE
04203 #undef GAN_MAT_FREAD
04204 #undef GAN_MAT_ZERO_Q
04205 #undef GAN_MAT_ZERO_S
04206 #undef GAN_MAT_COPY_Q
04207 #undef GAN_MAT_COPY_S
04208 #undef GAN_MAT_SCALE_Q
04209 #undef GAN_MAT_SCALE_S
04210 #undef GAN_MAT_SCALE_I
04211 #undef GAN_MAT_DIVIDE_Q
04212 #undef GAN_MAT_DIVIDE_S
04213 #undef GAN_MAT_DIVIDE_I
04214 #undef GAN_MAT_NEGATE_Q
04215 #undef GAN_MAT_NEGATE_S
04216 #undef GAN_MAT_NEGATE_I
04217 #undef GAN_MAT_UNIT_Q
04218 #undef GAN_MAT_UNIT_S
04219 #undef GAN_MAT_UNIT_I
04220 #undef GAN_MAT_ADD_Q
04221 #undef GAN_MAT_ADD_I1
04222 #undef GAN_MAT_ADD_I2
04223 #undef GAN_MAT_INCREMENT
04224 #undef GAN_MAT_ADD_S
04225 #undef GAN_MAT_SUB_Q
04226 #undef GAN_MAT_SUB_I1
04227 #undef GAN_MAT_SUB_I2
04228 #undef GAN_MAT_DECREMENT
04229 #undef GAN_MAT_SUB_S
04230 #undef GAN_VEC_OUTER_Q
04231 #undef GAN_VEC_OUTER_S
04232 #undef GAN_MAT_MULTV_Q
04233 #undef GAN_MAT_MULTV_S
04234 #undef GAN_MAT_MULTV_I
04235 #undef GAN_MATT_MULTV_Q
04236 #undef GAN_MATT_MULTV_S
04237 #undef GAN_MATT_MULTV_I
04238 #undef GAN_MAT_LMULTM_Q
04239 #undef GAN_MAT_LMULTM_S
04240 #undef GAN_MAT_LMULTMT_Q
04241 #undef GAN_MAT_LMULTMT_S
04242 #undef GAN_MAT_RMULTM_Q
04243 #undef GAN_MAT_RMULTM_S
04244 #undef GAN_MAT_RMULTMT_Q
04245 #undef GAN_MAT_RMULTMT_S
04246 #undef GAN_MAT_LMULTMT_SYM_Q
04247 #undef GAN_MAT_LMULTMT_SYM_S
04248 #undef GAN_MAT_RMULTMT_SYM_Q
04249 #undef GAN_MAT_RMULTMT_SYM_S
04250 #undef GAN_MAT_LMULTS_Q
04251 #undef GAN_MAT_LMULTS_S
04252 #undef GAN_MAT_RMULTS_Q
04253 #undef GAN_MAT_RMULTS_S
04254 #undef GAN_SYMMATL_LRMULT_Q
04255 #undef GAN_SYMMATL_LRMULT_S
04256 #undef GAN_SYMMATR_LRMULT_Q
04257 #undef GAN_SYMMATR_LRMULT_S
04258 #undef GAN_MAT_LMULTL_Q
04259 #undef GAN_MAT_LMULTL_S
04260 #undef GAN_MAT_LMULTL_I
04261 #undef GAN_MAT_LMULTLI_Q
04262 #undef GAN_MAT_LMULTLI_S
04263 #undef GAN_MAT_LMULTLI_I
04264 #undef GAN_MAT_LMULTLT_Q
04265 #undef GAN_MAT_LMULTLT_S
04266 #undef GAN_MAT_LMULTLT_I
04267 #undef GAN_MAT_LMULTLIT_Q
04268 #undef GAN_MAT_LMULTLIT_S
04269 #undef GAN_MAT_LMULTLIT_I
04270 #undef GAN_MAT_RMULTL_Q
04271 #undef GAN_MAT_RMULTL_S
04272 #undef GAN_MAT_RMULTL_I
04273 #undef GAN_MAT_RMULTLI_Q
04274 #undef GAN_MAT_RMULTLI_S
04275 #undef GAN_MAT_RMULTLI_I
04276 #undef GAN_MAT_RMULTLT_Q
04277 #undef GAN_MAT_RMULTLT_S
04278 #undef GAN_MAT_RMULTLT_I
04279 #undef GAN_MAT_RMULTLIT_Q
04280 #undef GAN_MAT_RMULTLIT_S
04281 #undef GAN_MAT_RMULTLIT_I
04282 #undef GAN_MAT_SRMULTT_Q
04283 #undef GAN_MAT_SRMULTT_S
04284 #undef GAN_MAT_SRMULTT_I
04285 #undef GAN_MAT_SLMULTT_Q
04286 #undef GAN_MAT_SLMULTT_S
04287 #undef GAN_MAT_SLMULTT_I
04288 #undef GAN_MAT_RMULTLIT_S
04289 #undef GAN_MAT_SUMSQR_Q
04290 #undef GAN_MAT_SUMSQR_S
04291 #undef GAN_MAT_FNORM_Q
04292 #undef GAN_MAT_FNORM_S
04293 #undef GAN_MAT_FROM_MAT_Q
04294 #undef GAN_MAT_FROM_MAT_S
04295 #undef GAN_MAT_FROM_SQUMAT_Q
04296 #undef GAN_MAT_FROM_SQUMAT_S
04297 #undef GAN_SQUMAT_FROM_SQUMAT_Q
04298 #undef GAN_SQUMAT_FROM_SQUMAT_S
04299 
04312 #ifdef __cplusplus
04313 }
04314 #endif
04315 
04316 #endif /* #ifndef _GAN_3X3MATRIX_H */

Generated on Fri Mar 17 12:44:46 2006 by  doxygen 1.3.9.1