00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SELDON_FILE_BLAS_3_CXX
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 extern "C"
00033 {
00034 #include "cblas.h"
00035 }
00036
00037 namespace Seldon
00038 {
00039
00040
00042
00043
00044
00045
00046
00047
00048 template <class Prop0, class Allocator0,
00049 class Prop1, class Allocator1,
00050 class Prop2, class Allocator2>
00051 void MltAdd(const float alpha,
00052 const Matrix<float, Prop0, ColMajor, Allocator0>& A,
00053 const Matrix<float, Prop1, ColMajor, Allocator1>& B,
00054 const float beta,
00055 Matrix<float, Prop2, ColMajor, Allocator2>& C)
00056 {
00057
00058 #ifdef SELDON_CHECK_DIMENSIONS
00059 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00060 #endif
00061
00062 cblas_sgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
00063 C.GetM(), C.GetN(), A.GetN(),
00064 alpha, A.GetData(), A.GetLD(), B.GetData(), B.GetLD(),
00065 beta, C.GetData(), C.GetLD());
00066 }
00067
00068
00069 template <class Prop0, class Allocator0,
00070 class Prop1, class Allocator1,
00071 class Prop2, class Allocator2>
00072 void MltAdd(const double alpha,
00073 const Matrix<double, Prop0, ColMajor, Allocator0>& A,
00074 const Matrix<double, Prop1, ColMajor, Allocator1>& B,
00075 const double beta,
00076 Matrix<double, Prop2, ColMajor, Allocator2>& C)
00077 {
00078
00079 #ifdef SELDON_CHECK_DIMENSIONS
00080 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00081 #endif
00082
00083 cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
00084 C.GetM(), C.GetN(), A.GetN(),
00085 alpha, A.GetData(), A.GetLD(), B.GetData(), B.GetLD(),
00086 beta, C.GetData(), C.GetLD());
00087 }
00088
00089
00090 template <class Prop0, class Allocator0,
00091 class Prop1, class Allocator1,
00092 class Prop2, class Allocator2>
00093 void MltAdd(const complex<float> alpha,
00094 const Matrix<complex<float>, Prop0, ColMajor, Allocator0>& A,
00095 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00096 const complex<float> beta,
00097 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00098 {
00099
00100 #ifdef SELDON_CHECK_DIMENSIONS
00101 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00102 #endif
00103
00104 cblas_cgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
00105 C.GetM(), C.GetN(), A.GetN(),
00106 reinterpret_cast<const void*>(&alpha),
00107 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00108 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00109 reinterpret_cast<const void*>(&beta),
00110 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00111 }
00112
00113
00114 template <class Prop0, class Allocator0,
00115 class Prop1, class Allocator1,
00116 class Prop2, class Allocator2>
00117 void MltAdd(const complex<double> alpha,
00118 const Matrix<complex<double>, Prop0, ColMajor, Allocator0>& A,
00119 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00120 const complex<double> beta,
00121 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00122 {
00123
00124 #ifdef SELDON_CHECK_DIMENSIONS
00125 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00126 #endif
00127
00128 cblas_zgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
00129 C.GetM(), C.GetN(), A.GetN(),
00130 reinterpret_cast<const void*>(&alpha),
00131 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00132 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00133 reinterpret_cast<const void*>(&beta),
00134 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00135 }
00136
00137
00138
00139
00140
00141 template <class Prop0, class Allocator0,
00142 class Prop1, class Allocator1,
00143 class Prop2, class Allocator2>
00144 void MltAdd(const float alpha,
00145 const SeldonTranspose& TransA,
00146 const Matrix<float, Prop0, ColMajor, Allocator0>& A,
00147 const SeldonTranspose& TransB,
00148 const Matrix<float, Prop1, ColMajor, Allocator1>& B,
00149 const float beta,
00150 Matrix<float, Prop2, ColMajor, Allocator2>& C)
00151 {
00152
00153 #ifdef SELDON_CHECK_DIMENSIONS
00154 CheckDim(TransA, A, TransB, B, C,
00155 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00156 #endif
00157
00158 cblas_sgemm(CblasColMajor, TransA, TransB, C.GetM(), C.GetN(),
00159 A.GetN(TransA), alpha, A.GetData(), A.GetLD(),
00160 B.GetData(), B.GetLD(), beta, C.GetData(), C.GetLD());
00161 }
00162
00163
00164 template <class Prop0, class Allocator0,
00165 class Prop1, class Allocator1,
00166 class Prop2, class Allocator2>
00167 void MltAdd(const double alpha,
00168 const SeldonTranspose& TransA,
00169 const Matrix<double, Prop0, ColMajor, Allocator0>& A,
00170 const SeldonTranspose& TransB,
00171 const Matrix<double, Prop1, ColMajor, Allocator1>& B,
00172 const double beta,
00173 Matrix<double, Prop2, ColMajor, Allocator2>& C)
00174 {
00175
00176 #ifdef SELDON_CHECK_DIMENSIONS
00177 CheckDim(TransA, A, TransB, B, C,
00178 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00179 #endif
00180
00181 cblas_dgemm(CblasColMajor, TransA, TransB, C.GetM(), C.GetN(),
00182 A.GetN(TransA), alpha, A.GetData(), A.GetLD(),
00183 B.GetData(), B.GetLD(), beta, C.GetData(), C.GetLD());
00184 }
00185
00186
00187 template <class Prop0, class Allocator0,
00188 class Prop1, class Allocator1,
00189 class Prop2, class Allocator2>
00190 void MltAdd(const complex<float> alpha,
00191 const SeldonTranspose& TransA,
00192 const Matrix<complex<float>, Prop0, ColMajor, Allocator0>& A,
00193 const SeldonTranspose& TransB,
00194 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00195 const complex<float> beta,
00196 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00197 {
00198
00199 #ifdef SELDON_CHECK_DIMENSIONS
00200 CheckDim(TransA, A, TransB, B, C,
00201 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00202 #endif
00203
00204 cblas_cgemm(CblasColMajor, TransA, TransB, C.GetM(), C.GetN(),
00205 A.GetN(TransA), reinterpret_cast<const void*>(&alpha),
00206 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00207 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00208 reinterpret_cast<const void*>(&beta),
00209 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00210 }
00211
00212
00213 template <class Prop0, class Allocator0,
00214 class Prop1, class Allocator1,
00215 class Prop2, class Allocator2>
00216 void MltAdd(const complex<double> alpha,
00217 const SeldonTranspose& TransA,
00218 const Matrix<complex<double>, Prop0, ColMajor, Allocator0>& A,
00219 const SeldonTranspose& TransB,
00220 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00221 const complex<double> beta,
00222 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00223 {
00224
00225 #ifdef SELDON_CHECK_DIMENSIONS
00226 CheckDim(TransA, A, TransB, B, C,
00227 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00228 #endif
00229
00230 cblas_zgemm(CblasColMajor, TransA, TransB, C.GetM(), C.GetN(),
00231 A.GetN(TransA), reinterpret_cast<const void*>(&alpha),
00232 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00233 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00234 reinterpret_cast<const void*>(&beta),
00235 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00236 }
00237
00238
00239
00240
00241
00242 template <class Prop0, class Allocator0,
00243 class Prop1, class Allocator1,
00244 class Prop2, class Allocator2>
00245 void MltAdd(const float alpha,
00246 const Matrix<float, Prop0, RowMajor, Allocator0>& A,
00247 const Matrix<float, Prop1, RowMajor, Allocator1>& B,
00248 const float beta,
00249 Matrix<float, Prop2, RowMajor, Allocator2>& C)
00250 {
00251
00252 #ifdef SELDON_CHECK_DIMENSIONS
00253 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00254 #endif
00255
00256 cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
00257 C.GetM(), C.GetN(), A.GetN(),
00258 alpha, A.GetData(), A.GetLD(), B.GetData(), B.GetLD(),
00259 beta, C.GetData(), C.GetLD());
00260 }
00261
00262
00263 template <class Prop0, class Allocator0,
00264 class Prop1, class Allocator1,
00265 class Prop2, class Allocator2>
00266 void MltAdd(const double alpha,
00267 const Matrix<double, Prop0, RowMajor, Allocator0>& A,
00268 const Matrix<double, Prop1, RowMajor, Allocator1>& B,
00269 const double beta,
00270 Matrix<double, Prop2, RowMajor, Allocator2>& C)
00271 {
00272
00273 #ifdef SELDON_CHECK_DIMENSIONS
00274 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00275 #endif
00276
00277 cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
00278 C.GetM(), C.GetN(), A.GetN(),
00279 alpha, A.GetData(), A.GetLD(), B.GetData(), B.GetLD(),
00280 beta, C.GetData(), C.GetLD());
00281 }
00282
00283
00284 template <class Prop0, class Allocator0,
00285 class Prop1, class Allocator1,
00286 class Prop2, class Allocator2>
00287 void MltAdd(const complex<float> alpha,
00288 const Matrix<complex<float>, Prop0, RowMajor, Allocator0>& A,
00289 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
00290 const complex<float> beta,
00291 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
00292 {
00293
00294 #ifdef SELDON_CHECK_DIMENSIONS
00295 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00296 #endif
00297
00298 cblas_cgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
00299 C.GetM(), C.GetN(), A.GetN(),
00300 reinterpret_cast<const void*>(&alpha),
00301 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00302 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00303 reinterpret_cast<const void*>(&beta),
00304 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00305 }
00306
00307
00308 template <class Prop0, class Allocator0,
00309 class Prop1, class Allocator1,
00310 class Prop2, class Allocator2>
00311 void MltAdd(const complex<double> alpha,
00312 const Matrix<complex<double>, Prop0, RowMajor, Allocator0>& A,
00313 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
00314 const complex<double> beta,
00315 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
00316 {
00317
00318 #ifdef SELDON_CHECK_DIMENSIONS
00319 CheckDim(A, B, C, "MltAdd(alpha, A, B, beta, C)");
00320 #endif
00321
00322 cblas_zgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
00323 C.GetM(), C.GetN(), A.GetN(),
00324 reinterpret_cast<const void*>(&alpha),
00325 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00326 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00327 reinterpret_cast<const void*>(&beta),
00328 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00329 }
00330
00331
00332
00333
00334
00335 template <class Prop0, class Allocator0,
00336 class Prop1, class Allocator1,
00337 class Prop2, class Allocator2>
00338 void MltAdd(const float alpha,
00339 const SeldonTranspose& TransA,
00340 const Matrix<float, Prop0, RowMajor, Allocator0>& A,
00341 const SeldonTranspose& TransB,
00342 const Matrix<float, Prop1, RowMajor, Allocator1>& B,
00343 const float beta,
00344 Matrix<float, Prop2, RowMajor, Allocator2>& C)
00345 {
00346
00347 #ifdef SELDON_CHECK_DIMENSIONS
00348 CheckDim(TransA, A, TransB, B, C,
00349 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00350 #endif
00351
00352 cblas_sgemm(CblasRowMajor, TransA, TransB, C.GetM(), C.GetN(),
00353 A.GetN(TransA), alpha, A.GetData(), A.GetLD(),
00354 B.GetData(), B.GetLD(), beta, C.GetData(), C.GetLD());
00355 }
00356
00357
00358 template <class Prop0, class Allocator0,
00359 class Prop1, class Allocator1,
00360 class Prop2, class Allocator2>
00361 void MltAdd(const double alpha,
00362 const SeldonTranspose& TransA,
00363 const Matrix<double, Prop0, RowMajor, Allocator0>& A,
00364 const SeldonTranspose& TransB,
00365 const Matrix<double, Prop1, RowMajor, Allocator1>& B,
00366 const double beta,
00367 Matrix<double, Prop2, RowMajor, Allocator2>& C)
00368 {
00369
00370 #ifdef SELDON_CHECK_DIMENSIONS
00371 CheckDim(TransA, A, TransB, B, C,
00372 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00373 #endif
00374
00375 cblas_dgemm(CblasRowMajor, TransA, TransB, C.GetM(), C.GetN(),
00376 A.GetN(TransA), alpha, A.GetData(), A.GetLD(),
00377 B.GetData(), B.GetLD(), beta, C.GetData(), C.GetLD());
00378 }
00379
00380
00381 template <class Prop0, class Allocator0,
00382 class Prop1, class Allocator1,
00383 class Prop2, class Allocator2>
00384 void MltAdd(const complex<float> alpha,
00385 const SeldonTranspose& TransA,
00386 const Matrix<complex<float>, Prop0, RowMajor, Allocator0>& A,
00387 const SeldonTranspose& TransB,
00388 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
00389 const complex<float> beta,
00390 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
00391 {
00392
00393 #ifdef SELDON_CHECK_DIMENSIONS
00394 CheckDim(TransA, A, TransB, B, C,
00395 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00396 #endif
00397
00398 cblas_cgemm(CblasRowMajor, TransA, TransB, C.GetM(), C.GetN(),
00399 A.GetN(TransA), reinterpret_cast<const void*>(&alpha),
00400 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00401 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00402 reinterpret_cast<const void*>(&beta),
00403 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00404 }
00405
00406
00407 template <class Prop0, class Allocator0,
00408 class Prop1, class Allocator1,
00409 class Prop2, class Allocator2>
00410 void MltAdd(const complex<double> alpha,
00411 const SeldonTranspose& TransA,
00412 const Matrix<complex<double>, Prop0, RowMajor, Allocator0>& A,
00413 const SeldonTranspose& TransB,
00414 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
00415 const complex<double> beta,
00416 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
00417 {
00418
00419 #ifdef SELDON_CHECK_DIMENSIONS
00420 CheckDim(TransA, A, TransB, B, C,
00421 "MltAdd(alpha, TransA, A, TransB, B, beta, C)");
00422 #endif
00423
00424 cblas_zgemm(CblasRowMajor, TransA, TransB, C.GetM(), C.GetN(),
00425 A.GetN(TransA), reinterpret_cast<const void*>(&alpha),
00426 reinterpret_cast<const void*>(A.GetData()), A.GetLD(),
00427 reinterpret_cast<const void*>(B.GetData()), B.GetLD(),
00428 reinterpret_cast<const void*>(&beta),
00429 reinterpret_cast<void*>(C.GetData()), C.GetLD());
00430 }
00431
00432
00433
00435
00436
00437
00439
00440
00441
00442
00443
00444
00445 template <class Prop0, class Allocator0,
00446 class Prop1, class Allocator1,
00447 class Prop2, class Allocator2>
00448 void MltAdd(const SeldonSide& Side,
00449 const float alpha,
00450 const Matrix<float, Prop0, ColSym, Allocator0>& A,
00451 const Matrix<float, Prop1, ColMajor, Allocator1>& B,
00452 const float beta,
00453 Matrix<float, Prop2, ColMajor, Allocator2>& C)
00454 {
00455
00456 #ifdef SELDON_CHECK_DIMENSIONS
00457 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00458 #endif
00459
00460 cblas_ssymm(CblasColMajor, Side, CblasUpper,
00461 C.GetM(), C.GetN(),
00462 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM(),
00463 beta, C.GetData(), C.GetM());
00464 }
00465
00466
00467 template <class Prop0, class Allocator0,
00468 class Prop1, class Allocator1,
00469 class Prop2, class Allocator2>
00470 void MltAdd(const SeldonSide& Side,
00471 const double alpha,
00472 const Matrix<double, Prop0, ColSym, Allocator0>& A,
00473 const Matrix<double, Prop1, ColMajor, Allocator1>& B,
00474 const double beta,
00475 Matrix<double, Prop2, ColMajor, Allocator2>& C)
00476 {
00477
00478 #ifdef SELDON_CHECK_DIMENSIONS
00479 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00480 #endif
00481
00482 cblas_dsymm(CblasColMajor, Side, CblasUpper,
00483 C.GetM(), C.GetN(),
00484 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM(),
00485 beta, C.GetData(), C.GetM());
00486 }
00487
00488
00489 template <class Prop0, class Allocator0,
00490 class Prop1, class Allocator1,
00491 class Prop2, class Allocator2>
00492 void MltAdd(const SeldonSide& Side,
00493 const complex<float> alpha,
00494 const Matrix<complex<float>, Prop0, ColSym, Allocator0>& A,
00495 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00496 const complex<float> beta,
00497 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00498 {
00499
00500 #ifdef SELDON_CHECK_DIMENSIONS
00501 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00502 #endif
00503
00504 cblas_csymm(CblasColMajor, Side, CblasUpper,
00505 C.GetM(), C.GetN(),
00506 reinterpret_cast<const void*>(&alpha),
00507 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00508 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00509 reinterpret_cast<const void*>(&beta),
00510 reinterpret_cast<void*>(C.GetData()), C.GetM());
00511 }
00512
00513
00514 template <class Prop0, class Allocator0,
00515 class Prop1, class Allocator1,
00516 class Prop2, class Allocator2>
00517 void MltAdd(const SeldonSide& Side,
00518 const complex<double> alpha,
00519 const Matrix<complex<double>, Prop0, ColSym, Allocator0>& A,
00520 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00521 const complex<double> beta,
00522 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00523 {
00524
00525 #ifdef SELDON_CHECK_DIMENSIONS
00526 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00527 #endif
00528
00529 cblas_zsymm(CblasColMajor, Side, CblasUpper,
00530 C.GetM(), C.GetN(),
00531 reinterpret_cast<const void*>(&alpha),
00532 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00533 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00534 reinterpret_cast<const void*>(&beta),
00535 reinterpret_cast<void*>(C.GetData()), C.GetM());
00536 }
00537
00538
00539
00540
00541
00542 template <class Prop0, class Allocator0,
00543 class Prop1, class Allocator1,
00544 class Prop2, class Allocator2>
00545 void MltAdd(const SeldonSide& Side,
00546 const float alpha,
00547 const SeldonUplo& Uplo,
00548 const Matrix<float, Prop0, ColSym, Allocator0>& A,
00549 const Matrix<float, Prop1, ColMajor, Allocator1>& B,
00550 const float beta,
00551 Matrix<float, Prop2, ColMajor, Allocator2>& C)
00552 {
00553
00554 #ifdef SELDON_CHECK_DIMENSIONS
00555 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00556 #endif
00557
00558 cblas_ssymm(CblasColMajor, Side, Uplo,
00559 C.GetM(), C.GetN(),
00560 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM(),
00561 beta, C.GetData(), C.GetM());
00562 }
00563
00564
00565 template <class Prop0, class Allocator0,
00566 class Prop1, class Allocator1,
00567 class Prop2, class Allocator2>
00568 void MltAdd(const SeldonSide& Side,
00569 const double alpha,
00570 const SeldonUplo& Uplo,
00571 const Matrix<double, Prop0, ColSym, Allocator0>& A,
00572 const Matrix<double, Prop1, ColMajor, Allocator1>& B,
00573 const double beta,
00574 Matrix<double, Prop2, ColMajor, Allocator2>& C)
00575 {
00576
00577 #ifdef SELDON_CHECK_DIMENSIONS
00578 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00579 #endif
00580
00581 cblas_dsymm(CblasColMajor, Side, Uplo,
00582 C.GetM(), C.GetN(),
00583 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM(),
00584 beta, C.GetData(), C.GetM());
00585 }
00586
00587
00588 template <class Prop0, class Allocator0,
00589 class Prop1, class Allocator1,
00590 class Prop2, class Allocator2>
00591 void MltAdd(const SeldonSide& Side,
00592 const complex<float> alpha,
00593 const SeldonUplo& Uplo,
00594 const Matrix<complex<float>, Prop0, ColSym, Allocator0>& A,
00595 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00596 const complex<float> beta,
00597 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00598 {
00599
00600 #ifdef SELDON_CHECK_DIMENSIONS
00601 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00602 #endif
00603
00604 cblas_csymm(CblasColMajor, Side, Uplo,
00605 C.GetM(), C.GetN(),
00606 reinterpret_cast<const void*>(&alpha),
00607 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00608 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00609 reinterpret_cast<const void*>(&beta),
00610 reinterpret_cast<void*>(C.GetData()), C.GetM());
00611 }
00612
00613
00614 template <class Prop0, class Allocator0,
00615 class Prop1, class Allocator1,
00616 class Prop2, class Allocator2>
00617 void MltAdd(const SeldonSide& Side,
00618 const complex<double> alpha,
00619 const SeldonUplo& Uplo,
00620 const Matrix<complex<double>, Prop0, ColSym, Allocator0>& A,
00621 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00622 const complex<double> beta,
00623 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00624 {
00625
00626 #ifdef SELDON_CHECK_DIMENSIONS
00627 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00628 #endif
00629
00630 cblas_zsymm(CblasColMajor, Side, Uplo,
00631 C.GetM(), C.GetN(),
00632 reinterpret_cast<const void*>(&alpha),
00633 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00634 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00635 reinterpret_cast<const void*>(&beta),
00636 reinterpret_cast<void*>(C.GetData()), C.GetM());
00637 }
00638
00639
00640
00641
00642
00643 template <class Prop0, class Allocator0,
00644 class Prop1, class Allocator1,
00645 class Prop2, class Allocator2>
00646 void MltAdd(const SeldonSide& Side,
00647 const float alpha,
00648 const Matrix<float, Prop0, RowSym, Allocator0>& A,
00649 const Matrix<float, Prop1, RowMajor, Allocator1>& B,
00650 const float beta,
00651 Matrix<float, Prop2, RowMajor, Allocator2>& C)
00652 {
00653
00654 #ifdef SELDON_CHECK_DIMENSIONS
00655 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00656 #endif
00657
00658 cblas_ssymm(CblasRowMajor, Side, CblasUpper,
00659 C.GetM(), C.GetN(),
00660 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetN(),
00661 beta, C.GetData(), C.GetN());
00662 }
00663
00664
00665 template <class Prop0, class Allocator0,
00666 class Prop1, class Allocator1,
00667 class Prop2, class Allocator2>
00668 void MltAdd(const SeldonSide& Side,
00669 const double alpha,
00670 const Matrix<double, Prop0, RowSym, Allocator0>& A,
00671 const Matrix<double, Prop1, RowMajor, Allocator1>& B,
00672 const double beta,
00673 Matrix<double, Prop2, RowMajor, Allocator2>& C)
00674 {
00675
00676 #ifdef SELDON_CHECK_DIMENSIONS
00677 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00678 #endif
00679
00680 cblas_dsymm(CblasRowMajor, Side, CblasUpper,
00681 C.GetM(), C.GetN(),
00682 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetN(),
00683 beta, C.GetData(), C.GetN());
00684 }
00685
00686
00687 template <class Prop0, class Allocator0,
00688 class Prop1, class Allocator1,
00689 class Prop2, class Allocator2>
00690 void MltAdd(const SeldonSide& Side,
00691 const complex<float> alpha,
00692 const Matrix<complex<float>, Prop0, RowSym, Allocator0>& A,
00693 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
00694 const complex<float> beta,
00695 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
00696 {
00697
00698 #ifdef SELDON_CHECK_DIMENSIONS
00699 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00700 #endif
00701
00702 cblas_csymm(CblasRowMajor, Side, CblasUpper,
00703 C.GetM(), C.GetN(),
00704 reinterpret_cast<const void*>(&alpha),
00705 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00706 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
00707 reinterpret_cast<const void*>(&beta),
00708 reinterpret_cast<void*>(C.GetData()), C.GetN());
00709 }
00710
00711
00712 template <class Prop0, class Allocator0,
00713 class Prop1, class Allocator1,
00714 class Prop2, class Allocator2>
00715 void MltAdd(const SeldonSide& Side,
00716 const complex<double> alpha,
00717 const Matrix<complex<double>, Prop0, RowSym, Allocator0>& A,
00718 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
00719 const complex<double> beta,
00720 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
00721 {
00722
00723 #ifdef SELDON_CHECK_DIMENSIONS
00724 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00725 #endif
00726
00727 cblas_zsymm(CblasRowMajor, Side, CblasUpper,
00728 C.GetM(), C.GetN(),
00729 reinterpret_cast<const void*>(&alpha),
00730 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00731 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
00732 reinterpret_cast<const void*>(&beta),
00733 reinterpret_cast<void*>(C.GetData()), C.GetN());
00734 }
00735
00736
00737
00738
00739
00740 template <class Prop0, class Allocator0,
00741 class Prop1, class Allocator1,
00742 class Prop2, class Allocator2>
00743 void MltAdd(const SeldonSide& Side,
00744 const float alpha,
00745 const SeldonUplo& Uplo,
00746 const Matrix<float, Prop0, RowSym, Allocator0>& A,
00747 const Matrix<float, Prop1, RowMajor, Allocator1>& B,
00748 const float beta,
00749 Matrix<float, Prop2, RowMajor, Allocator2>& C)
00750 {
00751
00752 #ifdef SELDON_CHECK_DIMENSIONS
00753 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00754 #endif
00755
00756 cblas_ssymm(CblasRowMajor, Side, Uplo,
00757 C.GetM(), C.GetN(),
00758 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetN(),
00759 beta, C.GetData(), C.GetN());
00760 }
00761
00762
00763 template <class Prop0, class Allocator0,
00764 class Prop1, class Allocator1,
00765 class Prop2, class Allocator2>
00766 void MltAdd(const SeldonSide& Side,
00767 const double alpha,
00768 const SeldonUplo& Uplo,
00769 const Matrix<double, Prop0, RowSym, Allocator0>& A,
00770 const Matrix<double, Prop1, RowMajor, Allocator1>& B,
00771 const double beta,
00772 Matrix<double, Prop2, RowMajor, Allocator2>& C)
00773 {
00774
00775 #ifdef SELDON_CHECK_DIMENSIONS
00776 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00777 #endif
00778
00779 cblas_dsymm(CblasRowMajor, Side, Uplo,
00780 C.GetM(), C.GetN(),
00781 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetN(),
00782 beta, C.GetData(), C.GetN());
00783 }
00784
00785
00786 template <class Prop0, class Allocator0,
00787 class Prop1, class Allocator1,
00788 class Prop2, class Allocator2>
00789 void MltAdd(const SeldonSide& Side,
00790 const complex<float> alpha,
00791 const SeldonUplo& Uplo,
00792 const Matrix<complex<float>, Prop0, RowSym, Allocator0>& A,
00793 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
00794 const complex<float> beta,
00795 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
00796 {
00797
00798 #ifdef SELDON_CHECK_DIMENSIONS
00799 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00800 #endif
00801
00802 cblas_csymm(CblasRowMajor, Side, Uplo,
00803 C.GetM(), C.GetN(),
00804 reinterpret_cast<const void*>(&alpha),
00805 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00806 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
00807 reinterpret_cast<const void*>(&beta),
00808 reinterpret_cast<void*>(C.GetData()), C.GetN());
00809 }
00810
00811
00812 template <class Prop0, class Allocator0,
00813 class Prop1, class Allocator1,
00814 class Prop2, class Allocator2>
00815 void MltAdd(const SeldonSide& Side,
00816 const complex<double> alpha,
00817 const SeldonUplo& Uplo,
00818 const Matrix<complex<double>, Prop0, RowSym, Allocator0>& A,
00819 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
00820 const complex<double> beta,
00821 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
00822 {
00823
00824 #ifdef SELDON_CHECK_DIMENSIONS
00825 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00826 #endif
00827
00828 cblas_zsymm(CblasRowMajor, Side, Uplo,
00829 C.GetM(), C.GetN(),
00830 reinterpret_cast<const void*>(&alpha),
00831 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00832 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
00833 reinterpret_cast<const void*>(&beta),
00834 reinterpret_cast<void*>(C.GetData()), C.GetN());
00835 }
00836
00837
00838
00840
00841
00842
00844
00845
00846
00847
00848
00849
00850 template <class Prop0, class Allocator0,
00851 class Prop1, class Allocator1,
00852 class Prop2, class Allocator2>
00853 void MltAdd(const SeldonSide& Side,
00854 const complex<float> alpha,
00855 const Matrix<complex<float>, Prop0, ColHerm, Allocator0>& A,
00856 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00857 const complex<float> beta,
00858 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00859 {
00860
00861 #ifdef SELDON_CHECK_DIMENSIONS
00862 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00863 #endif
00864
00865 cblas_chemm(CblasColMajor, Side, CblasUpper,
00866 C.GetM(), C.GetN(),
00867 reinterpret_cast<const void*>(&alpha),
00868 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00869 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00870 reinterpret_cast<const void*>(&beta),
00871 reinterpret_cast<void*>(C.GetData()), C.GetM());
00872 }
00873
00874
00875 template <class Prop0, class Allocator0,
00876 class Prop1, class Allocator1,
00877 class Prop2, class Allocator2>
00878 void MltAdd(const SeldonSide& Side,
00879 const complex<double> alpha,
00880 const Matrix<complex<double>, Prop0, ColHerm, Allocator0>& A,
00881 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00882 const complex<double> beta,
00883 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00884 {
00885
00886 #ifdef SELDON_CHECK_DIMENSIONS
00887 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00888 #endif
00889
00890 cblas_zhemm(CblasColMajor, Side, CblasUpper,
00891 C.GetM(), C.GetN(),
00892 reinterpret_cast<const void*>(&alpha),
00893 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00894 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00895 reinterpret_cast<const void*>(&beta),
00896 reinterpret_cast<void*>(C.GetData()), C.GetM());
00897 }
00898
00899
00900
00901
00902
00903 template <class Prop0, class Allocator0,
00904 class Prop1, class Allocator1,
00905 class Prop2, class Allocator2>
00906 void MltAdd(const SeldonSide& Side,
00907 const complex<float> alpha,
00908 const SeldonUplo& Uplo,
00909 const Matrix<complex<float>, Prop0, ColHerm, Allocator0>& A,
00910 const Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B,
00911 const complex<float> beta,
00912 Matrix<complex<float>, Prop2, ColMajor, Allocator2>& C)
00913 {
00914
00915 #ifdef SELDON_CHECK_DIMENSIONS
00916 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00917 #endif
00918
00919 cblas_chemm(CblasColMajor, Side, Uplo,
00920 C.GetM(), C.GetN(),
00921 reinterpret_cast<const void*>(&alpha),
00922 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00923 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00924 reinterpret_cast<const void*>(&beta),
00925 reinterpret_cast<void*>(C.GetData()), C.GetM());
00926 }
00927
00928
00929 template <class Prop0, class Allocator0,
00930 class Prop1, class Allocator1,
00931 class Prop2, class Allocator2>
00932 void MltAdd(const SeldonSide& Side,
00933 const complex<double> alpha,
00934 const SeldonUplo& Uplo,
00935 const Matrix<complex<double>, Prop0, ColHerm, Allocator0>& A,
00936 const Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B,
00937 const complex<double> beta,
00938 Matrix<complex<double>, Prop2, ColMajor, Allocator2>& C)
00939 {
00940
00941 #ifdef SELDON_CHECK_DIMENSIONS
00942 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
00943 #endif
00944
00945 cblas_zhemm(CblasColMajor, Side, Uplo,
00946 C.GetM(), C.GetN(),
00947 reinterpret_cast<const void*>(&alpha),
00948 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00949 reinterpret_cast<const void*>(B.GetData()), B.GetM(),
00950 reinterpret_cast<const void*>(&beta),
00951 reinterpret_cast<void*>(C.GetData()), C.GetM());
00952 }
00953
00954
00955
00956
00957
00958 template <class Prop0, class Allocator0,
00959 class Prop1, class Allocator1,
00960 class Prop2, class Allocator2>
00961 void MltAdd(const SeldonSide& Side,
00962 const complex<float> alpha,
00963 const Matrix<complex<float>, Prop0, RowHerm, Allocator0>& A,
00964 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
00965 const complex<float> beta,
00966 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
00967 {
00968
00969 #ifdef SELDON_CHECK_DIMENSIONS
00970 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00971 #endif
00972
00973 cblas_chemm(CblasRowMajor, Side, CblasUpper,
00974 C.GetM(), C.GetN(),
00975 reinterpret_cast<const void*>(&alpha),
00976 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
00977 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
00978 reinterpret_cast<const void*>(&beta),
00979 reinterpret_cast<void*>(C.GetData()), C.GetN());
00980 }
00981
00982
00983 template <class Prop0, class Allocator0,
00984 class Prop1, class Allocator1,
00985 class Prop2, class Allocator2>
00986 void MltAdd(const SeldonSide& Side,
00987 const complex<double> alpha,
00988 const Matrix<complex<double>, Prop0, RowHerm, Allocator0>& A,
00989 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
00990 const complex<double> beta,
00991 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
00992 {
00993
00994 #ifdef SELDON_CHECK_DIMENSIONS
00995 CheckDim(Side, A, B, C, "MltAdd(side, alpha, A, B, beta, C)");
00996 #endif
00997
00998 cblas_zhemm(CblasRowMajor, Side, CblasUpper,
00999 C.GetM(), C.GetN(),
01000 reinterpret_cast<const void*>(&alpha),
01001 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01002 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
01003 reinterpret_cast<const void*>(&beta),
01004 reinterpret_cast<void*>(C.GetData()), C.GetN());
01005 }
01006
01007
01008
01009
01010
01011 template <class Prop0, class Allocator0,
01012 class Prop1, class Allocator1,
01013 class Prop2, class Allocator2>
01014 void MltAdd(const SeldonSide& Side,
01015 const complex<float> alpha,
01016 const SeldonUplo& Uplo,
01017 const Matrix<complex<float>, Prop0, RowHerm, Allocator0>& A,
01018 const Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B,
01019 const complex<float> beta,
01020 Matrix<complex<float>, Prop2, RowMajor, Allocator2>& C)
01021 {
01022
01023 #ifdef SELDON_CHECK_DIMENSIONS
01024 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
01025 #endif
01026
01027 cblas_chemm(CblasRowMajor, Side, Uplo,
01028 C.GetM(), C.GetN(),
01029 reinterpret_cast<const void*>(&alpha),
01030 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01031 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
01032 reinterpret_cast<const void*>(&beta),
01033 reinterpret_cast<void*>(C.GetData()), C.GetN());
01034 }
01035
01036
01037 template <class Prop0, class Allocator0,
01038 class Prop1, class Allocator1,
01039 class Prop2, class Allocator2>
01040 void MltAdd(const SeldonSide& Side,
01041 const complex<double> alpha,
01042 const SeldonUplo& Uplo,
01043 const Matrix<complex<double>, Prop0, RowHerm, Allocator0>& A,
01044 const Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B,
01045 const complex<double> beta,
01046 Matrix<complex<double>, Prop2, RowMajor, Allocator2>& C)
01047 {
01048
01049 #ifdef SELDON_CHECK_DIMENSIONS
01050 CheckDim(Side, A, B, C, "MltAdd(side, alpha, uplo, A, B, beta, C)");
01051 #endif
01052
01053 cblas_zhemm(CblasRowMajor, Side, Uplo,
01054 C.GetM(), C.GetN(),
01055 reinterpret_cast<const void*>(&alpha),
01056 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01057 reinterpret_cast<const void*>(B.GetData()), B.GetN(),
01058 reinterpret_cast<const void*>(&beta),
01059 reinterpret_cast<void*>(C.GetData()), C.GetN());
01060 }
01061
01062
01063
01065
01066
01067
01069
01070
01071
01072
01073
01074
01075 template <class Prop0, class Allocator0,
01076 class Prop1, class Allocator1>
01077 void Mlt(const SeldonSide& Side,
01078 const float alpha,
01079 const Matrix<float, Prop0, ColUpTriang, Allocator0>& A,
01080 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01081 {
01082
01083 #ifdef SELDON_CHECK_DIMENSIONS
01084 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01085 #endif
01086
01087 cblas_strmm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01088 B.GetM(), B.GetN(),
01089 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01090 }
01091
01092
01093 template <class Prop0, class Allocator0,
01094 class Prop1, class Allocator1>
01095 void Mlt(const SeldonSide& Side,
01096 const double alpha,
01097 const Matrix<double, Prop0, ColUpTriang, Allocator0>& A,
01098 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01099 {
01100
01101 #ifdef SELDON_CHECK_DIMENSIONS
01102 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01103 #endif
01104
01105 cblas_dtrmm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01106 B.GetM(), B.GetN(),
01107 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01108 }
01109
01110
01111 template <class Prop0, class Allocator0,
01112 class Prop1, class Allocator1>
01113 void Mlt(const SeldonSide& Side,
01114 const complex<float> alpha,
01115 const Matrix<complex<float>, Prop0, ColUpTriang, Allocator0>& A,
01116 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01117 {
01118
01119 #ifdef SELDON_CHECK_DIMENSIONS
01120 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01121 #endif
01122
01123 cblas_ctrmm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01124 B.GetM(), B.GetN(),
01125 reinterpret_cast<const void*>(&alpha),
01126 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01127 reinterpret_cast<void*>(B.GetData()), B.GetM());
01128 }
01129
01130
01131 template <class Prop0, class Allocator0,
01132 class Prop1, class Allocator1>
01133 void Mlt(const SeldonSide& Side,
01134 const complex<double> alpha,
01135 const Matrix<complex<double>, Prop0, ColUpTriang, Allocator0>& A,
01136 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01137 {
01138
01139 #ifdef SELDON_CHECK_DIMENSIONS
01140 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01141 #endif
01142
01143 cblas_ztrmm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01144 B.GetM(), B.GetN(),
01145 reinterpret_cast<const void*>(&alpha),
01146 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01147 reinterpret_cast<void*>(B.GetData()), B.GetM());
01148 }
01149
01150
01151
01152
01153
01154 template <class Prop0, class Allocator0,
01155 class Prop1, class Allocator1>
01156 void Mlt(const SeldonSide& Side,
01157 const float alpha,
01158 const SeldonTranspose& TransA,
01159 const SeldonDiag& DiagA,
01160 const Matrix<float, Prop0, ColUpTriang, Allocator0>& A,
01161 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01162 {
01163
01164 #ifdef SELDON_CHECK_DIMENSIONS
01165 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01166 #endif
01167
01168 cblas_strmm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01169 B.GetM(), B.GetN(),
01170 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01171 }
01172
01173
01174 template <class Prop0, class Allocator0,
01175 class Prop1, class Allocator1>
01176 void Mlt(const SeldonSide& Side,
01177 const double alpha,
01178 const SeldonTranspose& TransA,
01179 const SeldonDiag& DiagA,
01180 const Matrix<double, Prop0, ColUpTriang, Allocator0>& A,
01181 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01182 {
01183
01184 #ifdef SELDON_CHECK_DIMENSIONS
01185 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01186 #endif
01187
01188 cblas_dtrmm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01189 B.GetM(), B.GetN(),
01190 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01191 }
01192
01193
01194 template <class Prop0, class Allocator0,
01195 class Prop1, class Allocator1>
01196 void Mlt(const SeldonSide& Side,
01197 const complex<float> alpha,
01198 const SeldonTranspose& TransA,
01199 const SeldonDiag& DiagA,
01200 const Matrix<complex<float>, Prop0, ColUpTriang, Allocator0>& A,
01201 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01202 {
01203
01204 #ifdef SELDON_CHECK_DIMENSIONS
01205 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01206 #endif
01207
01208 cblas_ctrmm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01209 B.GetM(), B.GetN(),
01210 reinterpret_cast<const void*>(&alpha),
01211 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01212 reinterpret_cast<void*>(B.GetData()), B.GetM());
01213 }
01214
01215
01216 template <class Prop0, class Allocator0,
01217 class Prop1, class Allocator1>
01218 void Mlt(const SeldonSide& Side,
01219 const complex<double> alpha,
01220 const SeldonTranspose& TransA,
01221 const SeldonDiag& DiagA,
01222 const Matrix<complex<double>, Prop0, ColUpTriang, Allocator0>& A,
01223 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01224 {
01225
01226 #ifdef SELDON_CHECK_DIMENSIONS
01227 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01228 #endif
01229
01230 cblas_ztrmm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01231 B.GetM(), B.GetN(),
01232 reinterpret_cast<const void*>(&alpha),
01233 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01234 reinterpret_cast<void*>(B.GetData()), B.GetM());
01235 }
01236
01237
01238
01239
01240
01241 template <class Prop0, class Allocator0,
01242 class Prop1, class Allocator1>
01243 void Mlt(const SeldonSide& Side,
01244 const float alpha,
01245 const Matrix<float, Prop0, ColLoTriang, Allocator0>& A,
01246 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01247 {
01248
01249 #ifdef SELDON_CHECK_DIMENSIONS
01250 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01251 #endif
01252
01253 cblas_strmm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01254 B.GetM(), B.GetN(),
01255 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01256 }
01257
01258
01259 template <class Prop0, class Allocator0,
01260 class Prop1, class Allocator1>
01261 void Mlt(const SeldonSide& Side,
01262 const double alpha,
01263 const Matrix<double, Prop0, ColLoTriang, Allocator0>& A,
01264 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01265 {
01266
01267 #ifdef SELDON_CHECK_DIMENSIONS
01268 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01269 #endif
01270
01271 cblas_dtrmm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01272 B.GetM(), B.GetN(),
01273 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01274 }
01275
01276
01277 template <class Prop0, class Allocator0,
01278 class Prop1, class Allocator1>
01279 void Mlt(const SeldonSide& Side,
01280 const complex<float> alpha,
01281 const Matrix<complex<float>, Prop0, ColLoTriang, Allocator0>& A,
01282 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01283 {
01284
01285 #ifdef SELDON_CHECK_DIMENSIONS
01286 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01287 #endif
01288
01289 cblas_ctrmm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01290 B.GetM(), B.GetN(),
01291 reinterpret_cast<const void*>(&alpha),
01292 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01293 reinterpret_cast<void*>(B.GetData()), B.GetM());
01294 }
01295
01296
01297 template <class Prop0, class Allocator0,
01298 class Prop1, class Allocator1>
01299 void Mlt(const SeldonSide& Side,
01300 const complex<double> alpha,
01301 const Matrix<complex<double>, Prop0, ColLoTriang, Allocator0>& A,
01302 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01303 {
01304
01305 #ifdef SELDON_CHECK_DIMENSIONS
01306 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01307 #endif
01308
01309 cblas_ztrmm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01310 B.GetM(), B.GetN(),
01311 reinterpret_cast<const void*>(&alpha),
01312 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01313 reinterpret_cast<void*>(B.GetData()), B.GetM());
01314 }
01315
01316
01317
01318
01319
01320 template <class Prop0, class Allocator0,
01321 class Prop1, class Allocator1>
01322 void Mlt(const SeldonSide& Side,
01323 const float alpha,
01324 const SeldonTranspose& TransA,
01325 const SeldonDiag& DiagA,
01326 const Matrix<float, Prop0, ColLoTriang, Allocator0>& A,
01327 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01328 {
01329
01330 #ifdef SELDON_CHECK_DIMENSIONS
01331 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01332 #endif
01333
01334 cblas_strmm(CblasColMajor, Side, CblasLower, TransA, DiagA,
01335 B.GetM(), B.GetN(),
01336 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01337 }
01338
01339
01340 template <class Prop0, class Allocator0,
01341 class Prop1, class Allocator1>
01342 void Mlt(const SeldonSide& Side,
01343 const double alpha,
01344 const SeldonTranspose& TransA,
01345 const SeldonDiag& DiagA,
01346 const Matrix<double, Prop0, ColLoTriang, Allocator0>& A,
01347 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01348 {
01349
01350 #ifdef SELDON_CHECK_DIMENSIONS
01351 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01352 #endif
01353
01354 cblas_dtrmm(CblasColMajor, Side, CblasLower, TransA, DiagA,
01355 B.GetM(), B.GetN(),
01356 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01357 }
01358
01359
01360 template <class Prop0, class Allocator0,
01361 class Prop1, class Allocator1>
01362 void Mlt(const SeldonSide& Side,
01363 const complex<float> alpha,
01364 const SeldonTranspose& TransA,
01365 const SeldonDiag& DiagA,
01366 const Matrix<complex<float>, Prop0, ColLoTriang, Allocator0>& A,
01367 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01368 {
01369
01370 #ifdef SELDON_CHECK_DIMENSIONS
01371 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01372 #endif
01373
01374 cblas_ctrmm(CblasColMajor, Side, CblasLower, TransA, DiagA,
01375 B.GetM(), B.GetN(),
01376 reinterpret_cast<const void*>(&alpha),
01377 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01378 reinterpret_cast<void*>(B.GetData()), B.GetM());
01379 }
01380
01381
01382 template <class Prop0, class Allocator0,
01383 class Prop1, class Allocator1>
01384 void Mlt(const SeldonSide& Side,
01385 const complex<double> alpha,
01386 const SeldonTranspose& TransA,
01387 const SeldonDiag& DiagA,
01388 const Matrix<complex<double>, Prop0, ColLoTriang, Allocator0>& A,
01389 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01390 {
01391
01392 #ifdef SELDON_CHECK_DIMENSIONS
01393 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01394 #endif
01395
01396 cblas_ztrmm(CblasColMajor, Side, CblasLower, TransA, DiagA,
01397 B.GetM(), B.GetN(),
01398 reinterpret_cast<const void*>(&alpha),
01399 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01400 reinterpret_cast<void*>(B.GetData()), B.GetM());
01401 }
01402
01403
01404
01405
01406
01407 template <class Prop0, class Allocator0,
01408 class Prop1, class Allocator1>
01409 void Mlt(const SeldonSide& Side,
01410 const float alpha,
01411 const Matrix<float, Prop0, RowUpTriang, Allocator0>& A,
01412 Matrix<float, Prop1, RowMajor, Allocator1>& B)
01413 {
01414
01415 #ifdef SELDON_CHECK_DIMENSIONS
01416 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01417 #endif
01418
01419 cblas_strmm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01420 B.GetM(), B.GetN(),
01421 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01422 }
01423
01424
01425 template <class Prop0, class Allocator0,
01426 class Prop1, class Allocator1>
01427 void Mlt(const SeldonSide& Side,
01428 const double alpha,
01429 const Matrix<double, Prop0, RowUpTriang, Allocator0>& A,
01430 Matrix<double, Prop1, RowMajor, Allocator1>& B)
01431 {
01432
01433 #ifdef SELDON_CHECK_DIMENSIONS
01434 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01435 #endif
01436
01437 cblas_dtrmm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01438 B.GetM(), B.GetN(),
01439 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01440 }
01441
01442
01443 template <class Prop0, class Allocator0,
01444 class Prop1, class Allocator1>
01445 void Mlt(const SeldonSide& Side,
01446 const complex<float> alpha,
01447 const Matrix<complex<float>, Prop0, RowUpTriang, Allocator0>& A,
01448 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
01449 {
01450
01451 #ifdef SELDON_CHECK_DIMENSIONS
01452 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01453 #endif
01454
01455 cblas_ctrmm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01456 B.GetM(), B.GetN(),
01457 reinterpret_cast<const void*>(&alpha),
01458 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01459 reinterpret_cast<void*>(B.GetData()), B.GetN());
01460 }
01461
01462
01463 template <class Prop0, class Allocator0,
01464 class Prop1, class Allocator1>
01465 void Mlt(const SeldonSide& Side,
01466 const complex<double> alpha,
01467 const Matrix<complex<double>, Prop0, RowUpTriang, Allocator0>& A,
01468 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
01469 {
01470
01471 #ifdef SELDON_CHECK_DIMENSIONS
01472 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01473 #endif
01474
01475 cblas_ztrmm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01476 B.GetM(), B.GetN(),
01477 reinterpret_cast<const void*>(&alpha),
01478 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01479 reinterpret_cast<void*>(B.GetData()), B.GetN());
01480 }
01481
01482
01483
01484
01485
01486 template <class Prop0, class Allocator0,
01487 class Prop1, class Allocator1>
01488 void Mlt(const SeldonSide& Side,
01489 const float alpha,
01490 const SeldonTranspose& TransA,
01491 const SeldonDiag& DiagA,
01492 const Matrix<float, Prop0, RowUpTriang, Allocator0>& A,
01493 Matrix<float, Prop1, RowMajor, Allocator1>& B)
01494 {
01495
01496 #ifdef SELDON_CHECK_DIMENSIONS
01497 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01498 #endif
01499
01500 cblas_strmm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
01501 B.GetM(), B.GetN(),
01502 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01503 }
01504
01505
01506 template <class Prop0, class Allocator0,
01507 class Prop1, class Allocator1>
01508 void Mlt(const SeldonSide& Side,
01509 const double alpha,
01510 const SeldonTranspose& TransA,
01511 const SeldonDiag& DiagA,
01512 const Matrix<double, Prop0, RowUpTriang, Allocator0>& A,
01513 Matrix<double, Prop1, RowMajor, Allocator1>& B)
01514 {
01515
01516 #ifdef SELDON_CHECK_DIMENSIONS
01517 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01518 #endif
01519
01520 cblas_dtrmm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
01521 B.GetM(), B.GetN(),
01522 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01523 }
01524
01525
01526 template <class Prop0, class Allocator0,
01527 class Prop1, class Allocator1>
01528 void Mlt(const SeldonSide& Side,
01529 const complex<float> alpha,
01530 const SeldonTranspose& TransA,
01531 const SeldonDiag& DiagA,
01532 const Matrix<complex<float>, Prop0, RowUpTriang, Allocator0>& A,
01533 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
01534 {
01535
01536 #ifdef SELDON_CHECK_DIMENSIONS
01537 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01538 #endif
01539
01540 cblas_ctrmm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
01541 B.GetM(), B.GetN(),
01542 reinterpret_cast<const void*>(&alpha),
01543 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01544 reinterpret_cast<void*>(B.GetData()), B.GetN());
01545 }
01546
01547
01548 template <class Prop0, class Allocator0,
01549 class Prop1, class Allocator1>
01550 void Mlt(const SeldonSide& Side,
01551 const complex<double> alpha,
01552 const SeldonTranspose& TransA,
01553 const SeldonDiag& DiagA,
01554 const Matrix<complex<double>, Prop0, RowUpTriang, Allocator0>& A,
01555 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
01556 {
01557
01558 #ifdef SELDON_CHECK_DIMENSIONS
01559 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01560 #endif
01561
01562 cblas_ztrmm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
01563 B.GetM(), B.GetN(),
01564 reinterpret_cast<const void*>(&alpha),
01565 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01566 reinterpret_cast<void*>(B.GetData()), B.GetN());
01567 }
01568
01569
01570
01571
01572
01573 template <class Prop0, class Allocator0,
01574 class Prop1, class Allocator1>
01575 void Mlt(const SeldonSide& Side,
01576 const float alpha,
01577 const Matrix<float, Prop0, RowLoTriang, Allocator0>& A,
01578 Matrix<float, Prop1, RowMajor, Allocator1>& B)
01579 {
01580
01581 #ifdef SELDON_CHECK_DIMENSIONS
01582 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01583 #endif
01584
01585 cblas_strmm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01586 B.GetM(), B.GetN(),
01587 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01588 }
01589
01590
01591 template <class Prop0, class Allocator0,
01592 class Prop1, class Allocator1>
01593 void Mlt(const SeldonSide& Side,
01594 const double alpha,
01595 const Matrix<double, Prop0, RowLoTriang, Allocator0>& A,
01596 Matrix<double, Prop1, RowMajor, Allocator1>& B)
01597 {
01598
01599 #ifdef SELDON_CHECK_DIMENSIONS
01600 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01601 #endif
01602
01603 cblas_dtrmm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01604 B.GetM(), B.GetN(),
01605 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01606 }
01607
01608
01609 template <class Prop0, class Allocator0,
01610 class Prop1, class Allocator1>
01611 void Mlt(const SeldonSide& Side,
01612 const complex<float> alpha,
01613 const Matrix<complex<float>, Prop0, RowLoTriang, Allocator0>& A,
01614 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
01615 {
01616
01617 #ifdef SELDON_CHECK_DIMENSIONS
01618 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01619 #endif
01620
01621 cblas_ctrmm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01622 B.GetM(), B.GetN(),
01623 reinterpret_cast<const void*>(&alpha),
01624 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01625 reinterpret_cast<void*>(B.GetData()), B.GetN());
01626 }
01627
01628
01629 template <class Prop0, class Allocator0,
01630 class Prop1, class Allocator1>
01631 void Mlt(const SeldonSide& Side,
01632 const complex<double> alpha,
01633 const Matrix<complex<double>, Prop0, RowLoTriang, Allocator0>& A,
01634 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
01635 {
01636
01637 #ifdef SELDON_CHECK_DIMENSIONS
01638 CheckDim(Side, A, B, "Mlt(side, alpha, A, B)");
01639 #endif
01640
01641 cblas_ztrmm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01642 B.GetM(), B.GetN(),
01643 reinterpret_cast<const void*>(&alpha),
01644 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01645 reinterpret_cast<void*>(B.GetData()), B.GetN());
01646 }
01647
01648
01649
01650
01651
01652 template <class Prop0, class Allocator0,
01653 class Prop1, class Allocator1>
01654 void Mlt(const SeldonSide& Side,
01655 const float alpha,
01656 const SeldonTranspose& TransA,
01657 const SeldonDiag& DiagA,
01658 const Matrix<float, Prop0, RowLoTriang, Allocator0>& A,
01659 Matrix<float, Prop1, RowMajor, Allocator1>& B)
01660 {
01661
01662 #ifdef SELDON_CHECK_DIMENSIONS
01663 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01664 #endif
01665
01666 cblas_strmm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
01667 B.GetM(), B.GetN(),
01668 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01669 }
01670
01671
01672 template <class Prop0, class Allocator0,
01673 class Prop1, class Allocator1>
01674 void Mlt(const SeldonSide& Side,
01675 const double alpha,
01676 const SeldonTranspose& TransA,
01677 const SeldonDiag& DiagA,
01678 const Matrix<double, Prop0, RowLoTriang, Allocator0>& A,
01679 Matrix<double, Prop1, RowMajor, Allocator1>& B)
01680 {
01681
01682 #ifdef SELDON_CHECK_DIMENSIONS
01683 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01684 #endif
01685
01686 cblas_dtrmm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
01687 B.GetM(), B.GetN(),
01688 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
01689 }
01690
01691
01692 template <class Prop0, class Allocator0,
01693 class Prop1, class Allocator1>
01694 void Mlt(const SeldonSide& Side,
01695 const complex<float> alpha,
01696 const SeldonTranspose& TransA,
01697 const SeldonDiag& DiagA,
01698 const Matrix<complex<float>, Prop0, RowLoTriang, Allocator0>& A,
01699 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
01700 {
01701
01702 #ifdef SELDON_CHECK_DIMENSIONS
01703 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01704 #endif
01705
01706 cblas_ctrmm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
01707 B.GetM(), B.GetN(),
01708 reinterpret_cast<const void*>(&alpha),
01709 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01710 reinterpret_cast<void*>(B.GetData()), B.GetN());
01711 }
01712
01713
01714 template <class Prop0, class Allocator0,
01715 class Prop1, class Allocator1>
01716 void Mlt(const SeldonSide& Side,
01717 const complex<double> alpha,
01718 const SeldonTranspose& TransA,
01719 const SeldonDiag& DiagA,
01720 const Matrix<complex<double>, Prop0, RowLoTriang, Allocator0>& A,
01721 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
01722 {
01723
01724 #ifdef SELDON_CHECK_DIMENSIONS
01725 CheckDim(Side, A, B, "Mlt(side, alpha, status, diag, A, B)");
01726 #endif
01727
01728 cblas_ztrmm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
01729 B.GetM(), B.GetN(),
01730 reinterpret_cast<const void*>(&alpha),
01731 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
01732 reinterpret_cast<void*>(B.GetData()), B.GetN());
01733 }
01734
01735
01736
01738
01739
01740
01742
01743
01744
01745
01746
01747
01748 template <class Prop0, class Allocator0,
01749 class Prop1, class Allocator1>
01750 void Solve(const SeldonSide& Side,
01751 const float alpha,
01752 const Matrix<float, Prop0, ColUpTriang, Allocator0>& A,
01753 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01754 {
01755
01756 #ifdef SELDON_CHECK_DIMENSIONS
01757 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01758 #endif
01759
01760 cblas_strsm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01761 B.GetM(), B.GetN(),
01762 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01763 }
01764
01765
01766 template <class Prop0, class Allocator0,
01767 class Prop1, class Allocator1>
01768 void Solve(const SeldonSide& Side,
01769 const double alpha,
01770 const Matrix<double, Prop0, ColUpTriang, Allocator0>& A,
01771 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01772 {
01773
01774 #ifdef SELDON_CHECK_DIMENSIONS
01775 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01776 #endif
01777
01778 cblas_dtrsm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01779 B.GetM(), B.GetN(),
01780 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01781 }
01782
01783
01784 template <class Prop0, class Allocator0,
01785 class Prop1, class Allocator1>
01786 void Solve(const SeldonSide& Side,
01787 const complex<float> alpha,
01788 const Matrix<complex<float>, Prop0, ColUpTriang, Allocator0>& A,
01789 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01790 {
01791
01792 #ifdef SELDON_CHECK_DIMENSIONS
01793 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01794 #endif
01795
01796 cblas_ctrsm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01797 B.GetM(), B.GetN(),
01798 reinterpret_cast<const void*>(&alpha),
01799 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01800 reinterpret_cast<void*>(B.GetData()), B.GetM());
01801 }
01802
01803
01804 template <class Prop0, class Allocator0,
01805 class Prop1, class Allocator1>
01806 void Solve(const SeldonSide& Side,
01807 const complex<double> alpha,
01808 const Matrix<complex<double>, Prop0, ColUpTriang, Allocator0>& A,
01809 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01810 {
01811
01812 #ifdef SELDON_CHECK_DIMENSIONS
01813 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01814 #endif
01815
01816 cblas_ztrsm(CblasColMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
01817 B.GetM(), B.GetN(),
01818 reinterpret_cast<const void*>(&alpha),
01819 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01820 reinterpret_cast<void*>(B.GetData()), B.GetM());
01821 }
01822
01823
01824
01825
01826
01827 template <class Prop0, class Allocator0,
01828 class Prop1, class Allocator1>
01829 void Solve(const SeldonSide& Side,
01830 const float alpha,
01831 const SeldonTranspose& TransA,
01832 const SeldonDiag& DiagA,
01833 const Matrix<float, Prop0, ColUpTriang, Allocator0>& A,
01834 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01835 {
01836
01837 #ifdef SELDON_CHECK_DIMENSIONS
01838 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
01839 #endif
01840
01841 cblas_strsm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01842 B.GetM(), B.GetN(),
01843 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01844 }
01845
01846
01847 template <class Prop0, class Allocator0,
01848 class Prop1, class Allocator1>
01849 void Solve(const SeldonSide& Side,
01850 const double alpha,
01851 const SeldonTranspose& TransA,
01852 const SeldonDiag& DiagA,
01853 const Matrix<double, Prop0, ColUpTriang, Allocator0>& A,
01854 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01855 {
01856
01857 #ifdef SELDON_CHECK_DIMENSIONS
01858 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
01859 #endif
01860
01861 cblas_dtrsm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01862 B.GetM(), B.GetN(),
01863 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01864 }
01865
01866
01867 template <class Prop0, class Allocator0,
01868 class Prop1, class Allocator1>
01869 void Solve(const SeldonSide& Side,
01870 const complex<float> alpha,
01871 const SeldonTranspose& TransA,
01872 const SeldonDiag& DiagA,
01873 const Matrix<complex<float>, Prop0, ColUpTriang, Allocator0>& A,
01874 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01875 {
01876
01877 #ifdef SELDON_CHECK_DIMENSIONS
01878 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
01879 #endif
01880
01881 cblas_ctrsm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01882 B.GetM(), B.GetN(),
01883 reinterpret_cast<const void*>(&alpha),
01884 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01885 reinterpret_cast<void*>(B.GetData()), B.GetM());
01886 }
01887
01888
01889 template <class Prop0, class Allocator0,
01890 class Prop1, class Allocator1>
01891 void Solve(const SeldonSide& Side,
01892 const complex<double> alpha,
01893 const SeldonTranspose& TransA,
01894 const SeldonDiag& DiagA,
01895 const Matrix<complex<double>, Prop0, ColUpTriang, Allocator0>& A,
01896 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01897 {
01898
01899 #ifdef SELDON_CHECK_DIMENSIONS
01900 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
01901 #endif
01902
01903 cblas_ztrsm(CblasColMajor, Side, CblasUpper, TransA, DiagA,
01904 B.GetM(), B.GetN(),
01905 reinterpret_cast<const void*>(&alpha),
01906 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01907 reinterpret_cast<void*>(B.GetData()), B.GetM());
01908 }
01909
01910
01911
01912
01913
01914 template <class Prop0, class Allocator0,
01915 class Prop1, class Allocator1>
01916 void Solve(const SeldonSide& Side,
01917 const float alpha,
01918 const Matrix<float, Prop0, ColLoTriang, Allocator0>& A,
01919 Matrix<float, Prop1, ColMajor, Allocator1>& B)
01920 {
01921
01922 #ifdef SELDON_CHECK_DIMENSIONS
01923 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01924 #endif
01925
01926 cblas_strsm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01927 B.GetM(), B.GetN(),
01928 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01929 }
01930
01931
01932 template <class Prop0, class Allocator0,
01933 class Prop1, class Allocator1>
01934 void Solve(const SeldonSide& Side,
01935 const double alpha,
01936 const Matrix<double, Prop0, ColLoTriang, Allocator0>& A,
01937 Matrix<double, Prop1, ColMajor, Allocator1>& B)
01938 {
01939
01940 #ifdef SELDON_CHECK_DIMENSIONS
01941 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01942 #endif
01943
01944 cblas_dtrsm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01945 B.GetM(), B.GetN(),
01946 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
01947 }
01948
01949
01950 template <class Prop0, class Allocator0,
01951 class Prop1, class Allocator1>
01952 void Solve(const SeldonSide& Side,
01953 const complex<float> alpha,
01954 const Matrix<complex<float>, Prop0, ColLoTriang, Allocator0>& A,
01955 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
01956 {
01957
01958 #ifdef SELDON_CHECK_DIMENSIONS
01959 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01960 #endif
01961
01962 cblas_ctrsm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01963 B.GetM(), B.GetN(),
01964 reinterpret_cast<const void*>(&alpha),
01965 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01966 reinterpret_cast<void*>(B.GetData()), B.GetM());
01967 }
01968
01969
01970 template <class Prop0, class Allocator0,
01971 class Prop1, class Allocator1>
01972 void Solve(const SeldonSide& Side,
01973 const complex<double> alpha,
01974 const Matrix<complex<double>, Prop0, ColLoTriang, Allocator0>& A,
01975 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
01976 {
01977
01978 #ifdef SELDON_CHECK_DIMENSIONS
01979 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
01980 #endif
01981
01982 cblas_ztrsm(CblasColMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
01983 B.GetM(), B.GetN(),
01984 reinterpret_cast<const void*>(&alpha),
01985 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
01986 reinterpret_cast<void*>(B.GetData()), B.GetM());
01987 }
01988
01989
01990
01991
01992
01993 template <class Prop0, class Allocator0,
01994 class Prop1, class Allocator1>
01995 void Solve(const SeldonSide& Side,
01996 const float alpha,
01997 const SeldonTranspose& TransA,
01998 const SeldonDiag& DiagA,
01999 const Matrix<float, Prop0, ColLoTriang, Allocator0>& A,
02000 Matrix<float, Prop1, ColMajor, Allocator1>& B)
02001 {
02002
02003 #ifdef SELDON_CHECK_DIMENSIONS
02004 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02005 #endif
02006
02007 cblas_strsm(CblasColMajor, Side, CblasLower, TransA, DiagA,
02008 B.GetM(), B.GetN(),
02009 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
02010 }
02011
02012
02013 template <class Prop0, class Allocator0,
02014 class Prop1, class Allocator1>
02015 void Solve(const SeldonSide& Side,
02016 const double alpha,
02017 const SeldonTranspose& TransA,
02018 const SeldonDiag& DiagA,
02019 const Matrix<double, Prop0, ColLoTriang, Allocator0>& A,
02020 Matrix<double, Prop1, ColMajor, Allocator1>& B)
02021 {
02022
02023 #ifdef SELDON_CHECK_DIMENSIONS
02024 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02025 #endif
02026
02027 cblas_dtrsm(CblasColMajor, Side, CblasLower, TransA, DiagA,
02028 B.GetM(), B.GetN(),
02029 alpha, A.GetData(), A.GetM(), B.GetData(), B.GetM());
02030 }
02031
02032
02033 template <class Prop0, class Allocator0,
02034 class Prop1, class Allocator1>
02035 void Solve(const SeldonSide& Side,
02036 const complex<float> alpha,
02037 const SeldonTranspose& TransA,
02038 const SeldonDiag& DiagA,
02039 const Matrix<complex<float>, Prop0, ColLoTriang, Allocator0>& A,
02040 Matrix<complex<float>, Prop1, ColMajor, Allocator1>& B)
02041 {
02042
02043 #ifdef SELDON_CHECK_DIMENSIONS
02044 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02045 #endif
02046
02047 cblas_ctrsm(CblasColMajor, Side, CblasLower, TransA, DiagA,
02048 B.GetM(), B.GetN(),
02049 reinterpret_cast<const void*>(&alpha),
02050 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
02051 reinterpret_cast<void*>(B.GetData()), B.GetM());
02052 }
02053
02054
02055 template <class Prop0, class Allocator0,
02056 class Prop1, class Allocator1>
02057 void Solve(const SeldonSide& Side,
02058 const complex<double> alpha,
02059 const SeldonTranspose& TransA,
02060 const SeldonDiag& DiagA,
02061 const Matrix<complex<double>, Prop0, ColLoTriang, Allocator0>& A,
02062 Matrix<complex<double>, Prop1, ColMajor, Allocator1>& B)
02063 {
02064
02065 #ifdef SELDON_CHECK_DIMENSIONS
02066 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02067 #endif
02068
02069 cblas_ztrsm(CblasColMajor, Side, CblasLower, TransA, DiagA,
02070 B.GetM(), B.GetN(),
02071 reinterpret_cast<const void*>(&alpha),
02072 reinterpret_cast<const void*>(A.GetData()), A.GetM(),
02073 reinterpret_cast<void*>(B.GetData()), B.GetM());
02074 }
02075
02076
02077
02078
02079
02080 template <class Prop0, class Allocator0,
02081 class Prop1, class Allocator1>
02082 void Solve(const SeldonSide& Side,
02083 const float alpha,
02084 const Matrix<float, Prop0, RowUpTriang, Allocator0>& A,
02085 Matrix<float, Prop1, RowMajor, Allocator1>& B)
02086 {
02087
02088 #ifdef SELDON_CHECK_DIMENSIONS
02089 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02090 #endif
02091
02092 cblas_strsm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
02093 B.GetM(), B.GetN(),
02094 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02095 }
02096
02097
02098 template <class Prop0, class Allocator0,
02099 class Prop1, class Allocator1>
02100 void Solve(const SeldonSide& Side,
02101 const double alpha,
02102 const Matrix<double, Prop0, RowUpTriang, Allocator0>& A,
02103 Matrix<double, Prop1, RowMajor, Allocator1>& B)
02104 {
02105
02106 #ifdef SELDON_CHECK_DIMENSIONS
02107 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02108 #endif
02109
02110 cblas_dtrsm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
02111 B.GetM(), B.GetN(),
02112 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02113 }
02114
02115
02116 template <class Prop0, class Allocator0,
02117 class Prop1, class Allocator1>
02118 void Solve(const SeldonSide& Side,
02119 const complex<float> alpha,
02120 const Matrix<complex<float>, Prop0, RowUpTriang, Allocator0>& A,
02121 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
02122 {
02123
02124 #ifdef SELDON_CHECK_DIMENSIONS
02125 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02126 #endif
02127
02128 cblas_ctrsm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
02129 B.GetM(), B.GetN(),
02130 reinterpret_cast<const void*>(&alpha),
02131 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02132 reinterpret_cast<void*>(B.GetData()), B.GetN());
02133 }
02134
02135
02136 template <class Prop0, class Allocator0,
02137 class Prop1, class Allocator1>
02138 void Solve(const SeldonSide& Side,
02139 const complex<double> alpha,
02140 const Matrix<complex<double>, Prop0, RowUpTriang, Allocator0>& A,
02141 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
02142 {
02143
02144 #ifdef SELDON_CHECK_DIMENSIONS
02145 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02146 #endif
02147
02148 cblas_ztrsm(CblasRowMajor, Side, CblasUpper, CblasNoTrans, CblasNonUnit,
02149 B.GetM(), B.GetN(),
02150 reinterpret_cast<const void*>(&alpha),
02151 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02152 reinterpret_cast<void*>(B.GetData()), B.GetN());
02153 }
02154
02155
02156
02157
02158
02159 template <class Prop0, class Allocator0,
02160 class Prop1, class Allocator1>
02161 void Solve(const SeldonSide& Side,
02162 const float alpha,
02163 const SeldonTranspose& TransA,
02164 const SeldonDiag& DiagA,
02165 const Matrix<float, Prop0, RowUpTriang, Allocator0>& A,
02166 Matrix<float, Prop1, RowMajor, Allocator1>& B)
02167 {
02168
02169 #ifdef SELDON_CHECK_DIMENSIONS
02170 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02171 #endif
02172
02173 cblas_strsm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
02174 B.GetM(), B.GetN(),
02175 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02176 }
02177
02178
02179 template <class Prop0, class Allocator0,
02180 class Prop1, class Allocator1>
02181 void Solve(const SeldonSide& Side,
02182 const double alpha,
02183 const SeldonTranspose& TransA,
02184 const SeldonDiag& DiagA,
02185 const Matrix<double, Prop0, RowUpTriang, Allocator0>& A,
02186 Matrix<double, Prop1, RowMajor, Allocator1>& B)
02187 {
02188
02189 #ifdef SELDON_CHECK_DIMENSIONS
02190 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02191 #endif
02192
02193 cblas_dtrsm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
02194 B.GetM(), B.GetN(),
02195 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02196 }
02197
02198
02199 template <class Prop0, class Allocator0,
02200 class Prop1, class Allocator1>
02201 void Solve(const SeldonSide& Side,
02202 const complex<float> alpha,
02203 const SeldonTranspose& TransA,
02204 const SeldonDiag& DiagA,
02205 const Matrix<complex<float>, Prop0, RowUpTriang, Allocator0>& A,
02206 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
02207 {
02208
02209 #ifdef SELDON_CHECK_DIMENSIONS
02210 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02211 #endif
02212
02213 cblas_ctrsm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
02214 B.GetM(), B.GetN(),
02215 reinterpret_cast<const void*>(&alpha),
02216 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02217 reinterpret_cast<void*>(B.GetData()), B.GetN());
02218 }
02219
02220
02221 template <class Prop0, class Allocator0,
02222 class Prop1, class Allocator1>
02223 void Solve(const SeldonSide& Side,
02224 const complex<double> alpha,
02225 const SeldonTranspose& TransA,
02226 const SeldonDiag& DiagA,
02227 const Matrix<complex<double>, Prop0, RowUpTriang, Allocator0>& A,
02228 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
02229 {
02230
02231 #ifdef SELDON_CHECK_DIMENSIONS
02232 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02233 #endif
02234
02235 cblas_ztrsm(CblasRowMajor, Side, CblasUpper, TransA, DiagA,
02236 B.GetM(), B.GetN(),
02237 reinterpret_cast<const void*>(&alpha),
02238 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02239 reinterpret_cast<void*>(B.GetData()), B.GetN());
02240 }
02241
02242
02243
02244
02245
02246 template <class Prop0, class Allocator0,
02247 class Prop1, class Allocator1>
02248 void Solve(const SeldonSide& Side,
02249 const float alpha,
02250 const Matrix<float, Prop0, RowLoTriang, Allocator0>& A,
02251 Matrix<float, Prop1, RowMajor, Allocator1>& B)
02252 {
02253
02254 #ifdef SELDON_CHECK_DIMENSIONS
02255 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02256 #endif
02257
02258 cblas_strsm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
02259 B.GetM(), B.GetN(),
02260 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02261 }
02262
02263
02264 template <class Prop0, class Allocator0,
02265 class Prop1, class Allocator1>
02266 void Solve(const SeldonSide& Side,
02267 const double alpha,
02268 const Matrix<double, Prop0, RowLoTriang, Allocator0>& A,
02269 Matrix<double, Prop1, RowMajor, Allocator1>& B)
02270 {
02271
02272 #ifdef SELDON_CHECK_DIMENSIONS
02273 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02274 #endif
02275
02276 cblas_dtrsm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
02277 B.GetM(), B.GetN(),
02278 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02279 }
02280
02281
02282 template <class Prop0, class Allocator0,
02283 class Prop1, class Allocator1>
02284 void Solve(const SeldonSide& Side,
02285 const complex<float> alpha,
02286 const Matrix<complex<float>, Prop0, RowLoTriang, Allocator0>& A,
02287 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
02288 {
02289
02290 #ifdef SELDON_CHECK_DIMENSIONS
02291 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02292 #endif
02293
02294 cblas_ctrsm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
02295 B.GetM(), B.GetN(),
02296 reinterpret_cast<const void*>(&alpha),
02297 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02298 reinterpret_cast<void*>(B.GetData()), B.GetN());
02299 }
02300
02301
02302 template <class Prop0, class Allocator0,
02303 class Prop1, class Allocator1>
02304 void Solve(const SeldonSide& Side,
02305 const complex<double> alpha,
02306 const Matrix<complex<double>, Prop0, RowLoTriang, Allocator0>& A,
02307 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
02308 {
02309
02310 #ifdef SELDON_CHECK_DIMENSIONS
02311 CheckDim(Side, A, B, "Solve(side, alpha, A, B)");
02312 #endif
02313
02314 cblas_ztrsm(CblasRowMajor, Side, CblasLower, CblasNoTrans, CblasNonUnit,
02315 B.GetM(), B.GetN(),
02316 reinterpret_cast<const void*>(&alpha),
02317 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02318 reinterpret_cast<void*>(B.GetData()), B.GetN());
02319 }
02320
02321
02322
02323
02324
02325 template <class Prop0, class Allocator0,
02326 class Prop1, class Allocator1>
02327 void Solve(const SeldonSide& Side,
02328 const float alpha,
02329 const SeldonTranspose& TransA,
02330 const SeldonDiag& DiagA,
02331 const Matrix<float, Prop0, RowLoTriang, Allocator0>& A,
02332 Matrix<float, Prop1, RowMajor, Allocator1>& B)
02333 {
02334
02335 #ifdef SELDON_CHECK_DIMENSIONS
02336 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02337 #endif
02338
02339 cblas_strsm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
02340 B.GetM(), B.GetN(),
02341 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02342 }
02343
02344
02345 template <class Prop0, class Allocator0,
02346 class Prop1, class Allocator1>
02347 void Solve(const SeldonSide& Side,
02348 const double alpha,
02349 const SeldonTranspose& TransA,
02350 const SeldonDiag& DiagA,
02351 const Matrix<double, Prop0, RowLoTriang, Allocator0>& A,
02352 Matrix<double, Prop1, RowMajor, Allocator1>& B)
02353 {
02354
02355 #ifdef SELDON_CHECK_DIMENSIONS
02356 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02357 #endif
02358
02359 cblas_dtrsm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
02360 B.GetM(), B.GetN(),
02361 alpha, A.GetData(), A.GetN(), B.GetData(), B.GetN());
02362 }
02363
02364
02365 template <class Prop0, class Allocator0,
02366 class Prop1, class Allocator1>
02367 void Solve(const SeldonSide& Side,
02368 const complex<float> alpha,
02369 const SeldonTranspose& TransA,
02370 const SeldonDiag& DiagA,
02371 const Matrix<complex<float>, Prop0, RowLoTriang, Allocator0>& A,
02372 Matrix<complex<float>, Prop1, RowMajor, Allocator1>& B)
02373 {
02374
02375 #ifdef SELDON_CHECK_DIMENSIONS
02376 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02377 #endif
02378
02379 cblas_ctrsm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
02380 B.GetM(), B.GetN(),
02381 reinterpret_cast<const void*>(&alpha),
02382 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02383 reinterpret_cast<void*>(B.GetData()), B.GetN());
02384 }
02385
02386
02387 template <class Prop0, class Allocator0,
02388 class Prop1, class Allocator1>
02389 void Solve(const SeldonSide& Side,
02390 const complex<double> alpha,
02391 const SeldonTranspose& TransA,
02392 const SeldonDiag& DiagA,
02393 const Matrix<complex<double>, Prop0, RowLoTriang, Allocator0>& A,
02394 Matrix<complex<double>, Prop1, RowMajor, Allocator1>& B)
02395 {
02396
02397 #ifdef SELDON_CHECK_DIMENSIONS
02398 CheckDim(Side, A, B, "Solve(side, alpha, status, diag, A, B)");
02399 #endif
02400
02401 cblas_ztrsm(CblasRowMajor, Side, CblasLower, TransA, DiagA,
02402 B.GetM(), B.GetN(),
02403 reinterpret_cast<const void*>(&alpha),
02404 reinterpret_cast<const void*>(A.GetData()), A.GetN(),
02405 reinterpret_cast<void*>(B.GetData()), B.GetN());
02406 }
02407
02408
02409
02411
02412
02413 }
02414
02415 #define SELDON_FILE_BLAS_3_CXX
02416 #endif