1 /* 2 * Written by D.P. Manley, Digital Equipment Corporation. 3 * Prefixed "C_" to BLAS routines and their declarations. 4 * 5 * Modified by T. H. Do, 4/15/98, SGI/CRAY Research. 6 */ 7 #include <stdlib.h> 8 #include "cblas.h" 9 #include "cblas_test.h" 10 #define TEST_COL_MJR 0 11 #define TEST_ROW_MJR 1 12 #define UNDEFINED -1 13 14 void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n, 15 int *k, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 16 CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, 17 CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 18 19 CBLAS_TEST_ZOMPLEX *A, *B, *C; 20 int i,j,LDA, LDB, LDC; 21 enum CBLAS_TRANSPOSE transa, transb; 22 23 get_transpose_type(transpa, &transa); 24 get_transpose_type(transpb, &transb); 25 26 if (*order == TEST_ROW_MJR) { 27 if (transa == CblasNoTrans) { 28 LDA = *k+1; 29 A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 30 for( i=0; i<*m; i++ ) 31 for( j=0; j<*k; j++ ) { 32 A[i*LDA+j].real=a[j*(*lda)+i].real; 33 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 34 } 35 } 36 else { 37 LDA = *m+1; 38 A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); 39 for( i=0; i<*k; i++ ) 40 for( j=0; j<*m; j++ ) { 41 A[i*LDA+j].real=a[j*(*lda)+i].real; 42 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 43 } 44 } 45 46 if (transb == CblasNoTrans) { 47 LDB = *n+1; 48 B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_ZOMPLEX) ); 49 for( i=0; i<*k; i++ ) 50 for( j=0; j<*n; j++ ) { 51 B[i*LDB+j].real=b[j*(*ldb)+i].real; 52 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 53 } 54 } 55 else { 56 LDB = *k+1; 57 B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX)); 58 for( i=0; i<*n; i++ ) 59 for( j=0; j<*k; j++ ) { 60 B[i*LDB+j].real=b[j*(*ldb)+i].real; 61 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 62 } 63 } 64 65 LDC = *n+1; 66 C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); 67 for( j=0; j<*n; j++ ) 68 for( i=0; i<*m; i++ ) { 69 C[i*LDC+j].real=c[j*(*ldc)+i].real; 70 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 71 } 72 cblas_zgemm( CblasRowMajor, transa, transb, *m, *n, *k, alpha, A, LDA, 73 B, LDB, beta, C, LDC ); 74 for( j=0; j<*n; j++ ) 75 for( i=0; i<*m; i++ ) { 76 c[j*(*ldc)+i].real=C[i*LDC+j].real; 77 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 78 } 79 free(A); 80 free(B); 81 free(C); 82 } 83 else if (*order == TEST_COL_MJR) 84 cblas_zgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda, 85 b, *ldb, beta, c, *ldc ); 86 else 87 cblas_zgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda, 88 b, *ldb, beta, c, *ldc ); 89 } 90 void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n, 91 CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 92 CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, 93 CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 94 95 CBLAS_TEST_ZOMPLEX *A, *B, *C; 96 int i,j,LDA, LDB, LDC; 97 enum CBLAS_UPLO uplo; 98 enum CBLAS_SIDE side; 99 100 get_uplo_type(uplow,&uplo); 101 get_side_type(rtlf,&side); 102 103 if (*order == TEST_ROW_MJR) { 104 if (side == CblasLeft) { 105 LDA = *m+1; 106 A= (CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 107 for( i=0; i<*m; i++ ) 108 for( j=0; j<*m; j++ ) { 109 A[i*LDA+j].real=a[j*(*lda)+i].real; 110 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 111 } 112 } 113 else{ 114 LDA = *n+1; 115 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 116 for( i=0; i<*n; i++ ) 117 for( j=0; j<*n; j++ ) { 118 A[i*LDA+j].real=a[j*(*lda)+i].real; 119 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 120 } 121 } 122 LDB = *n+1; 123 B=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ) ); 124 for( i=0; i<*m; i++ ) 125 for( j=0; j<*n; j++ ) { 126 B[i*LDB+j].real=b[j*(*ldb)+i].real; 127 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 128 } 129 LDC = *n+1; 130 C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); 131 for( j=0; j<*n; j++ ) 132 for( i=0; i<*m; i++ ) { 133 C[i*LDC+j].real=c[j*(*ldc)+i].real; 134 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 135 } 136 cblas_zhemm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, 137 beta, C, LDC ); 138 for( j=0; j<*n; j++ ) 139 for( i=0; i<*m; i++ ) { 140 c[j*(*ldc)+i].real=C[i*LDC+j].real; 141 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 142 } 143 free(A); 144 free(B); 145 free(C); 146 } 147 else if (*order == TEST_COL_MJR) 148 cblas_zhemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, 149 beta, c, *ldc ); 150 else 151 cblas_zhemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, 152 beta, c, *ldc ); 153 } 154 void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n, 155 CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 156 CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, 157 CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 158 159 CBLAS_TEST_ZOMPLEX *A, *B, *C; 160 int i,j,LDA, LDB, LDC; 161 enum CBLAS_UPLO uplo; 162 enum CBLAS_SIDE side; 163 164 get_uplo_type(uplow,&uplo); 165 get_side_type(rtlf,&side); 166 167 if (*order == TEST_ROW_MJR) { 168 if (side == CblasLeft) { 169 LDA = *m+1; 170 A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 171 for( i=0; i<*m; i++ ) 172 for( j=0; j<*m; j++ ) 173 A[i*LDA+j]=a[j*(*lda)+i]; 174 } 175 else{ 176 LDA = *n+1; 177 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 178 for( i=0; i<*n; i++ ) 179 for( j=0; j<*n; j++ ) 180 A[i*LDA+j]=a[j*(*lda)+i]; 181 } 182 LDB = *n+1; 183 B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX )); 184 for( i=0; i<*m; i++ ) 185 for( j=0; j<*n; j++ ) 186 B[i*LDB+j]=b[j*(*ldb)+i]; 187 LDC = *n+1; 188 C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); 189 for( j=0; j<*n; j++ ) 190 for( i=0; i<*m; i++ ) 191 C[i*LDC+j]=c[j*(*ldc)+i]; 192 cblas_zsymm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, 193 beta, C, LDC ); 194 for( j=0; j<*n; j++ ) 195 for( i=0; i<*m; i++ ) 196 c[j*(*ldc)+i]=C[i*LDC+j]; 197 free(A); 198 free(B); 199 free(C); 200 } 201 else if (*order == TEST_COL_MJR) 202 cblas_zsymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, 203 beta, c, *ldc ); 204 else 205 cblas_zsymm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, 206 beta, c, *ldc ); 207 } 208 209 void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k, 210 double *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 211 double *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 212 213 int i,j,LDA,LDC; 214 CBLAS_TEST_ZOMPLEX *A, *C; 215 enum CBLAS_UPLO uplo; 216 enum CBLAS_TRANSPOSE trans; 217 218 get_uplo_type(uplow,&uplo); 219 get_transpose_type(transp,&trans); 220 221 if (*order == TEST_ROW_MJR) { 222 if (trans == CblasNoTrans) { 223 LDA = *k+1; 224 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 225 for( i=0; i<*n; i++ ) 226 for( j=0; j<*k; j++ ) { 227 A[i*LDA+j].real=a[j*(*lda)+i].real; 228 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 229 } 230 } 231 else{ 232 LDA = *n+1; 233 A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 234 for( i=0; i<*k; i++ ) 235 for( j=0; j<*n; j++ ) { 236 A[i*LDA+j].real=a[j*(*lda)+i].real; 237 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 238 } 239 } 240 LDC = *n+1; 241 C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); 242 for( i=0; i<*n; i++ ) 243 for( j=0; j<*n; j++ ) { 244 C[i*LDC+j].real=c[j*(*ldc)+i].real; 245 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 246 } 247 cblas_zherk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta, 248 C, LDC ); 249 for( j=0; j<*n; j++ ) 250 for( i=0; i<*n; i++ ) { 251 c[j*(*ldc)+i].real=C[i*LDC+j].real; 252 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 253 } 254 free(A); 255 free(C); 256 } 257 else if (*order == TEST_COL_MJR) 258 cblas_zherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta, 259 c, *ldc ); 260 else 261 cblas_zherk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta, 262 c, *ldc ); 263 } 264 265 void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k, 266 CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 267 CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 268 269 int i,j,LDA,LDC; 270 CBLAS_TEST_ZOMPLEX *A, *C; 271 enum CBLAS_UPLO uplo; 272 enum CBLAS_TRANSPOSE trans; 273 274 get_uplo_type(uplow,&uplo); 275 get_transpose_type(transp,&trans); 276 277 if (*order == TEST_ROW_MJR) { 278 if (trans == CblasNoTrans) { 279 LDA = *k+1; 280 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 281 for( i=0; i<*n; i++ ) 282 for( j=0; j<*k; j++ ) { 283 A[i*LDA+j].real=a[j*(*lda)+i].real; 284 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 285 } 286 } 287 else{ 288 LDA = *n+1; 289 A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 290 for( i=0; i<*k; i++ ) 291 for( j=0; j<*n; j++ ) { 292 A[i*LDA+j].real=a[j*(*lda)+i].real; 293 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 294 } 295 } 296 LDC = *n+1; 297 C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); 298 for( i=0; i<*n; i++ ) 299 for( j=0; j<*n; j++ ) { 300 C[i*LDC+j].real=c[j*(*ldc)+i].real; 301 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 302 } 303 cblas_zsyrk(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, beta, 304 C, LDC ); 305 for( j=0; j<*n; j++ ) 306 for( i=0; i<*n; i++ ) { 307 c[j*(*ldc)+i].real=C[i*LDC+j].real; 308 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 309 } 310 free(A); 311 free(C); 312 } 313 else if (*order == TEST_COL_MJR) 314 cblas_zsyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta, 315 c, *ldc ); 316 else 317 cblas_zsyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta, 318 c, *ldc ); 319 } 320 void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k, 321 CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 322 CBLAS_TEST_ZOMPLEX *b, int *ldb, double *beta, 323 CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 324 int i,j,LDA,LDB,LDC; 325 CBLAS_TEST_ZOMPLEX *A, *B, *C; 326 enum CBLAS_UPLO uplo; 327 enum CBLAS_TRANSPOSE trans; 328 329 get_uplo_type(uplow,&uplo); 330 get_transpose_type(transp,&trans); 331 332 if (*order == TEST_ROW_MJR) { 333 if (trans == CblasNoTrans) { 334 LDA = *k+1; 335 LDB = *k+1; 336 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX )); 337 B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX )); 338 for( i=0; i<*n; i++ ) 339 for( j=0; j<*k; j++ ) { 340 A[i*LDA+j].real=a[j*(*lda)+i].real; 341 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 342 B[i*LDB+j].real=b[j*(*ldb)+i].real; 343 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 344 } 345 } 346 else { 347 LDA = *n+1; 348 LDB = *n+1; 349 A=(CBLAS_TEST_ZOMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) ); 350 B=(CBLAS_TEST_ZOMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) ); 351 for( i=0; i<*k; i++ ) 352 for( j=0; j<*n; j++ ){ 353 A[i*LDA+j].real=a[j*(*lda)+i].real; 354 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 355 B[i*LDB+j].real=b[j*(*ldb)+i].real; 356 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 357 } 358 } 359 LDC = *n+1; 360 C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); 361 for( i=0; i<*n; i++ ) 362 for( j=0; j<*n; j++ ) { 363 C[i*LDC+j].real=c[j*(*ldc)+i].real; 364 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 365 } 366 cblas_zher2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, 367 B, LDB, *beta, C, LDC ); 368 for( j=0; j<*n; j++ ) 369 for( i=0; i<*n; i++ ) { 370 c[j*(*ldc)+i].real=C[i*LDC+j].real; 371 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 372 } 373 free(A); 374 free(B); 375 free(C); 376 } 377 else if (*order == TEST_COL_MJR) 378 cblas_zher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, 379 b, *ldb, *beta, c, *ldc ); 380 else 381 cblas_zher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, 382 b, *ldb, *beta, c, *ldc ); 383 } 384 void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k, 385 CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, 386 CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, 387 CBLAS_TEST_ZOMPLEX *c, int *ldc ) { 388 int i,j,LDA,LDB,LDC; 389 CBLAS_TEST_ZOMPLEX *A, *B, *C; 390 enum CBLAS_UPLO uplo; 391 enum CBLAS_TRANSPOSE trans; 392 393 get_uplo_type(uplow,&uplo); 394 get_transpose_type(transp,&trans); 395 396 if (*order == TEST_ROW_MJR) { 397 if (trans == CblasNoTrans) { 398 LDA = *k+1; 399 LDB = *k+1; 400 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 401 B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); 402 for( i=0; i<*n; i++ ) 403 for( j=0; j<*k; j++ ) { 404 A[i*LDA+j].real=a[j*(*lda)+i].real; 405 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 406 B[i*LDB+j].real=b[j*(*ldb)+i].real; 407 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 408 } 409 } 410 else { 411 LDA = *n+1; 412 LDB = *n+1; 413 A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); 414 B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); 415 for( i=0; i<*k; i++ ) 416 for( j=0; j<*n; j++ ){ 417 A[i*LDA+j].real=a[j*(*lda)+i].real; 418 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 419 B[i*LDB+j].real=b[j*(*ldb)+i].real; 420 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 421 } 422 } 423 LDC = *n+1; 424 C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); 425 for( i=0; i<*n; i++ ) 426 for( j=0; j<*n; j++ ) { 427 C[i*LDC+j].real=c[j*(*ldc)+i].real; 428 C[i*LDC+j].imag=c[j*(*ldc)+i].imag; 429 } 430 cblas_zsyr2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, 431 B, LDB, beta, C, LDC ); 432 for( j=0; j<*n; j++ ) 433 for( i=0; i<*n; i++ ) { 434 c[j*(*ldc)+i].real=C[i*LDC+j].real; 435 c[j*(*ldc)+i].imag=C[i*LDC+j].imag; 436 } 437 free(A); 438 free(B); 439 free(C); 440 } 441 else if (*order == TEST_COL_MJR) 442 cblas_zsyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, 443 b, *ldb, beta, c, *ldc ); 444 else 445 cblas_zsyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, 446 b, *ldb, beta, c, *ldc ); 447 } 448 void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, 449 int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, 450 int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) { 451 int i,j,LDA,LDB; 452 CBLAS_TEST_ZOMPLEX *A, *B; 453 enum CBLAS_SIDE side; 454 enum CBLAS_DIAG diag; 455 enum CBLAS_UPLO uplo; 456 enum CBLAS_TRANSPOSE trans; 457 458 get_uplo_type(uplow,&uplo); 459 get_transpose_type(transp,&trans); 460 get_diag_type(diagn,&diag); 461 get_side_type(rtlf,&side); 462 463 if (*order == TEST_ROW_MJR) { 464 if (side == CblasLeft) { 465 LDA = *m+1; 466 A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 467 for( i=0; i<*m; i++ ) 468 for( j=0; j<*m; j++ ) { 469 A[i*LDA+j].real=a[j*(*lda)+i].real; 470 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 471 } 472 } 473 else{ 474 LDA = *n+1; 475 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 476 for( i=0; i<*n; i++ ) 477 for( j=0; j<*n; j++ ) { 478 A[i*LDA+j].real=a[j*(*lda)+i].real; 479 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 480 } 481 } 482 LDB = *n+1; 483 B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); 484 for( i=0; i<*m; i++ ) 485 for( j=0; j<*n; j++ ) { 486 B[i*LDB+j].real=b[j*(*ldb)+i].real; 487 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 488 } 489 cblas_ztrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, 490 A, LDA, B, LDB ); 491 for( j=0; j<*n; j++ ) 492 for( i=0; i<*m; i++ ) { 493 b[j*(*ldb)+i].real=B[i*LDB+j].real; 494 b[j*(*ldb)+i].imag=B[i*LDB+j].imag; 495 } 496 free(A); 497 free(B); 498 } 499 else if (*order == TEST_COL_MJR) 500 cblas_ztrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, 501 a, *lda, b, *ldb); 502 else 503 cblas_ztrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, 504 a, *lda, b, *ldb); 505 } 506 507 void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, 508 int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, 509 int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) { 510 int i,j,LDA,LDB; 511 CBLAS_TEST_ZOMPLEX *A, *B; 512 enum CBLAS_SIDE side; 513 enum CBLAS_DIAG diag; 514 enum CBLAS_UPLO uplo; 515 enum CBLAS_TRANSPOSE trans; 516 517 get_uplo_type(uplow,&uplo); 518 get_transpose_type(transp,&trans); 519 get_diag_type(diagn,&diag); 520 get_side_type(rtlf,&side); 521 522 if (*order == TEST_ROW_MJR) { 523 if (side == CblasLeft) { 524 LDA = *m+1; 525 A=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); 526 for( i=0; i<*m; i++ ) 527 for( j=0; j<*m; j++ ) { 528 A[i*LDA+j].real=a[j*(*lda)+i].real; 529 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 530 } 531 } 532 else{ 533 LDA = *n+1; 534 A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); 535 for( i=0; i<*n; i++ ) 536 for( j=0; j<*n; j++ ) { 537 A[i*LDA+j].real=a[j*(*lda)+i].real; 538 A[i*LDA+j].imag=a[j*(*lda)+i].imag; 539 } 540 } 541 LDB = *n+1; 542 B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); 543 for( i=0; i<*m; i++ ) 544 for( j=0; j<*n; j++ ) { 545 B[i*LDB+j].real=b[j*(*ldb)+i].real; 546 B[i*LDB+j].imag=b[j*(*ldb)+i].imag; 547 } 548 cblas_ztrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, 549 A, LDA, B, LDB ); 550 for( j=0; j<*n; j++ ) 551 for( i=0; i<*m; i++ ) { 552 b[j*(*ldb)+i].real=B[i*LDB+j].real; 553 b[j*(*ldb)+i].imag=B[i*LDB+j].imag; 554 } 555 free(A); 556 free(B); 557 } 558 else if (*order == TEST_COL_MJR) 559 cblas_ztrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, 560 a, *lda, b, *ldb); 561 else 562 cblas_ztrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, 563 a, *lda, b, *ldb); 564 } 565