00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00029 #ifndef _BLAS3_PP_H_
00030 #define _BLAS3_PP_H_
00031
00032 #include <cmath>
00033 #include "lafnames.h"
00034 #include "arch.h"
00035
00036 #ifdef LA_COMPLEX_SUPPORT
00037 # include "lacomplex.h"
00038 #endif
00039
00040 #ifndef DOXYGEN_IGNORE
00041
00042 class LaGenMatDouble;
00043 class LaVectorDouble;
00044 class LaGenMatComplex;
00045 class LaSymmMatDouble;
00046
00047 class LaBandMatDouble;
00048 class LaSpdMatDouble;
00049 class LaSymmTridiagMatDouble;
00050 class LaTridiagMatDouble;
00051 #endif // DOXYGEN_IGNORE
00052
00068 DLLIMPORT
00069 void Blas_Mat_Mat_Mult(const LaGenMatDouble &A,
00070 const LaGenMatDouble &B, LaGenMatDouble &C,
00071 bool transpose_A, bool transpose_B = false,
00072 double alpha = 1.0, double beta = 0.0);
00073
00075 DLLIMPORT
00076 void Blas_Mat_Mat_Mult(const LaGenMatDouble &A,
00077 const LaGenMatDouble &B, LaGenMatDouble &C,
00078 double alpha = 1.0, double beta = 0.0);
00079
00081 DLLIMPORT
00082 void Blas_Mat_Trans_Mat_Mult(const LaGenMatDouble &A,
00083 const LaGenMatDouble &B, LaGenMatDouble &C,
00084 double alpha = 1.0, double beta = 0.0);
00085
00087 DLLIMPORT
00088 void Blas_Mat_Mat_Trans_Mult(const LaGenMatDouble &A,
00089 const LaGenMatDouble &B, LaGenMatDouble &C,
00090 double alpha = 1.0, double beta = 0.0);
00091
00094 DLLIMPORT
00095 void Blas_Mat_Mat_Mult(const LaGenMatDouble &A,
00096 const LaGenMatDouble &B, LaVectorDouble &C);
00097
00100 DLLIMPORT
00101 void Blas_Mat_Trans_Mat_Mult(const LaGenMatDouble &A,
00102 const LaGenMatDouble &B, LaVectorDouble &C);
00103
00106 DLLIMPORT
00107 void Blas_Mat_Mat_Trans_Mult(const LaGenMatDouble &A,
00108 const LaGenMatDouble &B, LaVectorDouble &C);
00109
00113 DLLIMPORT
00114 void Blas_Scale(double s, LaGenMatDouble &A);
00115
00117
00118
00119 #ifdef LA_COMPLEX_SUPPORT
00120
00138 DLLIMPORT
00139 void Blas_Mat_Mat_Mult(const LaGenMatComplex &A,
00140 const LaGenMatComplex &B, LaGenMatComplex &C,
00141 bool hermit_A, bool hermit_B = false,
00142 LaComplex alpha = 1.0, LaComplex beta = 0.0);
00143
00145 DLLIMPORT
00146 void Blas_Mat_Mat_Mult(const LaGenMatComplex &A,
00147 const LaGenMatComplex &B, LaGenMatComplex &C,
00148 LaComplex alpha = 1.0, LaComplex beta = 0.0);
00149
00151 DLLIMPORT
00152 void Blas_Mat_Trans_Mat_Mult(const LaGenMatComplex &A,
00153 const LaGenMatComplex &B, LaGenMatComplex &C,
00154 LaComplex alpha = 1.0, LaComplex beta = 0.0);
00155
00157 DLLIMPORT
00158 void Blas_Mat_Mat_Trans_Mult(const LaGenMatComplex &A,
00159 const LaGenMatComplex &B, LaGenMatComplex &C,
00160 LaComplex alpha = 1.0, LaComplex beta = 0.0);
00161
00165 DLLIMPORT
00166 void Blas_Scale(COMPLEX s, LaGenMatComplex &A);
00168 #endif // LA_COMPLEX_SUPPORT
00169
00170 #ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_
00171
00172 DLLIMPORT
00173 void Blas_Mat_Mat_Solve(LaUnitLowerTriangMatDouble &A,
00174 LaGenMatDouble &B, double alpha = 1.0);
00175
00176 #endif
00177
00178 #ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_
00179 DLLIMPORT
00180 void Blas_Mat_Mat_Mult(LaUnitUpperTriangMatDouble &A,
00181 LaGenMatDouble &B, double alpha = 1.0);
00182
00183 DLLIMPORT
00184 void Blas_Mat_Mat_Solve(LaUnitUpperTriangMatDouble &A,
00185 LaGenMatDouble &B, double alpha = 1.0);
00186
00187 #endif
00188
00189 #ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
00190 DLLIMPORT
00191 void Blas_Mat_Mat_Mult(LaLowerTriangMatDouble &A,
00192 LaGenMatDouble &B, double alpha = 1.0);
00193
00194 DLLIMPORT
00195 void Blas_Mat_Mat_Solve(LaLowerTriangMatDouble &A,
00196 LaGenMatDouble &B, double alpha = 1.0);
00197 #endif
00198
00199
00200 #ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_
00201 DLLIMPORT
00202 void Blas_Mat_Mat_Mult(LaUpperTriangMatDouble &A,
00203 LaGenMatDouble &B, double alpha = 1.0);
00204
00205 DLLIMPORT
00206 void Blas_Mat_Mat_Solve(LaUpperTriangMatDouble &A,
00207 LaGenMatDouble &B, double alpha = 1.0);
00208 #endif
00209
00210
00211 #ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_
00212 DLLIMPORT
00213 void Blas_Mat_Trans_Mat_Solve(LaUnitLowerTriangMatDouble &A,
00214 LaGenMatDouble &B, double alpha = 1.0);
00215 #endif
00216
00217 #ifdef _LA_UNIT_UPPER_TRIANG_MAT_DOUBLE_H_
00218 DLLIMPORT
00219 void Blas_Mat_Trans_Mat_Solve(LaUnitUpperTriangMatDouble &A,
00220 LaGenMatDouble &B, double alpha = 1.0);
00221 #endif
00222
00223 #ifdef _LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H_
00224 DLLIMPORT
00225 void Blas_Mat_Mat_Mult(LaUnitLowerTriangMatDouble &A,
00226 LaGenMatDouble &B, double alpha = 1.0);
00227
00228 #endif
00229
00230 #ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
00231 DLLIMPORT
00232 void Blas_Mat_Trans_Mat_Solve(LaLowerTriangMatDouble &A,
00233 LaGenMatDouble &B, double alpha = 1.0);
00234 #endif
00235
00236
00237 #ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_
00238 DLLIMPORT
00239 void Blas_Mat_Trans_Mat_Solve(LaUpperTriangMatDouble &A,
00240 LaGenMatDouble &B, double alpha = 1.0);
00241
00242 #endif
00243
00246
00253 DLLIMPORT
00254 void Blas_Mat_Mat_Mult(LaSymmMatDouble &A, LaGenMatDouble &B,
00255 LaGenMatDouble &C,
00256 double alpha = 1.0, double beta = 1.0,
00257 bool b_left_side = true);
00258
00267 DLLIMPORT
00268 void Blas_R1_Update(LaSymmMatDouble &C, LaGenMatDouble &A,
00269 double alpha = 1.0, double beta = 1.0,
00270 bool right_transposed = true);
00271
00280 DLLIMPORT
00281 void Blas_R2_Update(LaSymmMatDouble &C, LaGenMatDouble &A,
00282 LaGenMatDouble &B,
00283 double alpha = 1.0, double beta = 1.0,
00284 bool right_transposed = true);
00285
00287
00288
00289
00290
00292
00294
00301 DLLIMPORT
00302 double Blas_Norm1(const LaGenMatDouble &A);
00303
00311 DLLIMPORT
00312 double Blas_Norm_Inf(const LaGenMatDouble &A);
00313
00323 DLLIMPORT
00324 double Blas_NormF(const LaGenMatDouble &A);
00325
00333 DLLIMPORT
00334 double Blas_Norm1(const LaGenMatComplex &A);
00335
00343 DLLIMPORT
00344 double Blas_Norm_Inf(const LaGenMatComplex &A);
00345
00355 DLLIMPORT
00356 double Blas_NormF(const LaGenMatComplex &A);
00357
00358 #ifndef DOXYGEN_IGNORE
00359
00360 DLLIMPORT
00361 double Norm_Inf(const LaGenMatDouble &A);
00363 DLLIMPORT
00364 double Norm_Inf(const LaGenMatComplex &A);
00365 #endif // DOXYGEN_IGNORE
00366
00367
00368 DLLIMPORT
00369 double Norm_Inf(const LaBandMatDouble &A);
00370 DLLIMPORT
00371 double Norm_Inf(const LaSymmMatDouble &S);
00372 DLLIMPORT
00373 double Norm_Inf(const LaSpdMatDouble &S);
00374 DLLIMPORT
00375 double Norm_Inf(const LaSymmTridiagMatDouble &S);
00376 DLLIMPORT
00377 double Norm_Inf(const LaTridiagMatDouble &T);
00379
00380
00381 #endif
00382
00383