1! 2! Copyright (C) 2008-2015 Michele Martone 3! 4! This file is part of librsb. 5! 6! librsb is free software; you can redistribute it and/or modify it 7! under the terms of the GNU Lesser General Public License as published 8! by the Free Software Foundation; either version 3 of the License, or 9! (at your option) any later version. 10! 11! librsb is distributed in the hope that it will be useful, but WITHOUT 12! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13! FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 14! License for more details. 15! 16! You should have received a copy of the GNU Lesser General Public 17! License along with librsb; see the file COPYING. 18! If not, see <http://www.gnu.org/licenses/>. 19! 20 21! 22!> @file 23!! @brief This file implements the Fortran Sparse BLAS interface to \librsb. 24!! 25!! 26 27#define RSB_HAVE_RSB_KERNELS 1 28 29 MODULE blas_sparse 30 !> A Sparse BLAS interface for RSB 31 IMPLICIT NONE 32PUBLIC 33 34 35 !> inserts a single entry 36 !> \rsb_spblas_f_istat_msg 37 !! 38 INTERFACE uscr_insert_entry 39 MODULE PROCEDURE suscr_insert_entry & 40 &, duscr_insert_entry & 41 &, cuscr_insert_entry & 42 &, zuscr_insert_entry & 43 & ; 44 END INTERFACE 45 46 !> inserts multiple entries 47 !> \rsb_spblas_f_istat_msg 48 !! 49 INTERFACE uscr_insert_entries 50 MODULE PROCEDURE suscr_insert_entries & 51 &, duscr_insert_entries & 52 &, cuscr_insert_entries & 53 &, zuscr_insert_entries & 54 & ; 55 END INTERFACE 56 57 !> inserts a sparse column 58 !> \rsb_spblas_f_istat_msg 59 !! 60 INTERFACE uscr_insert_col 61 MODULE PROCEDURE suscr_insert_col & 62 &, duscr_insert_col & 63 &, cuscr_insert_col & 64 &, zuscr_insert_col & 65 & ; 66 END INTERFACE 67 68 !> inserts a sparse row 69 !> \rsb_spblas_f_istat_msg 70 !! 71 INTERFACE uscr_insert_row 72 MODULE PROCEDURE suscr_insert_row & 73 &, duscr_insert_row & 74 &, cuscr_insert_row & 75 &, zuscr_insert_row & 76 & ; 77 END INTERFACE 78 79 !> inserts a clique 80 !> \rsb_spblas_f_istat_msg 81 !! 82 INTERFACE uscr_insert_clique 83 MODULE PROCEDURE suscr_insert_clique & 84 &, duscr_insert_clique & 85 &, cuscr_insert_clique & 86 &, zuscr_insert_clique & 87 & ; 88 END INTERFACE 89 90 !> inserts a dense block 91 !> \rsb_spblas_f_istat_msg 92 !! 93 INTERFACE uscr_insert_block 94 MODULE PROCEDURE suscr_insert_block & 95 &, duscr_insert_block & 96 &, cuscr_insert_block & 97 &, zuscr_insert_block & 98 & ; 99 END INTERFACE 100 101 !> multiplication : c <- beta c + alpha A b 102 !> \rsb_spblas_f_istat_msg 103 !! 104 INTERFACE usmv 105 MODULE PROCEDURE susmv & 106 &, dusmv & 107 &, cusmv & 108 &, zusmv & 109 & ; 110 END INTERFACE 111 112 !> triangular solve: b <- alpha A^-1 b 113 !> \rsb_spblas_f_istat_msg 114 !! 115 INTERFACE ussv 116 MODULE PROCEDURE sussv & 117 &, dussv & 118 &, cussv & 119 &, zussv & 120 & ; 121 END INTERFACE 122 123 !> multiplication : c <- beta c + alpha A b 124 !> \rsb_spblas_f_istat_msg 125 !! 126 INTERFACE usmm 127 MODULE PROCEDURE susmm & 128 &, dusmm & 129 &, cusmm & 130 &, zusmm & 131 & ; 132 END INTERFACE 133 134 !> triangular solve: b <- alpha A^-1 b 135 !> \rsb_spblas_f_istat_msg 136 !! 137 INTERFACE ussm 138 MODULE PROCEDURE sussm & 139 &, dussm & 140 &, cussm & 141 &, zussm & 142 & ; 143 END INTERFACE 144 145 INTEGER, PARAMETER :: blas_sparse_const_success=0 146 INTEGER, PARAMETER :: blas_sparse_const_failure=-1 ! value returned by this interface on failure 147 INTEGER, PARAMETER :: blas_sparse_const_not_available=-9999 ! value returned by this interface when deactivated 148! This file has been auto-generated from blas_enum.h. 149 INTEGER,PARAMETER :: blas_rowmajor=101 150 INTEGER,PARAMETER :: blas_colmajor=102 151 INTEGER,PARAMETER :: blas_no_trans=111 152 INTEGER,PARAMETER :: blas_trans=112 153 INTEGER,PARAMETER :: blas_conj_trans=113 154 INTEGER,PARAMETER :: blas_upper=121 155 INTEGER,PARAMETER :: blas_lower=122 156 INTEGER,PARAMETER :: blas_non_unit_diag=131 157 INTEGER,PARAMETER :: blas_unit_diag=132 158 INTEGER,PARAMETER :: blas_left_side=141 159 INTEGER,PARAMETER :: blas_right_side=142 160 INTEGER,PARAMETER :: blas_base=151 161 INTEGER,PARAMETER :: blas_t=152 162 INTEGER,PARAMETER :: blas_rnd=153 163 INTEGER,PARAMETER :: blas_ieee=154 164 INTEGER,PARAMETER :: blas_emin=155 165 INTEGER,PARAMETER :: blas_emax=156 166 INTEGER,PARAMETER :: blas_eps=157 167 INTEGER,PARAMETER :: blas_prec=158 168 INTEGER,PARAMETER :: blas_underflow=159 169 INTEGER,PARAMETER :: blas_overflow=160 170 INTEGER,PARAMETER :: blas_sfmin=161 171 INTEGER,PARAMETER :: blas_one_norm=171 172 INTEGER,PARAMETER :: blas_real_one_norm=172 173 INTEGER,PARAMETER :: blas_two_norm=173 174 INTEGER,PARAMETER :: blas_frobenius_norm=174 175 INTEGER,PARAMETER :: blas_inf_norm=175 176 INTEGER,PARAMETER :: blas_real_inf_norm=176 177 INTEGER,PARAMETER :: blas_max_norm=177 178 INTEGER,PARAMETER :: blas_real_max_norm=178 179 INTEGER,PARAMETER :: blas_increasing_order=181 180 INTEGER,PARAMETER :: blas_decreasing_order=182 181 INTEGER,PARAMETER :: blas_conj=191 182 INTEGER,PARAMETER :: blas_no_conj=192 183 INTEGER,PARAMETER :: blas_jrot_inner=201 184 INTEGER,PARAMETER :: blas_jrot_outer=202 185 INTEGER,PARAMETER :: blas_jrot_sorted=203 186 INTEGER,PARAMETER :: blas_prec_single=211 187 INTEGER,PARAMETER :: blas_prec_double=212 188 INTEGER,PARAMETER :: blas_prec_indigenous=213 189 INTEGER,PARAMETER :: blas_prec_extra=214 190 INTEGER,PARAMETER :: blas_zero_base=221 191 INTEGER,PARAMETER :: blas_one_base=222 192 INTEGER,PARAMETER :: blas_general=231 193 INTEGER,PARAMETER :: blas_symmetric=232 194 INTEGER,PARAMETER :: blas_hermitian=233 195 INTEGER,PARAMETER :: blas_triangular=234 196 INTEGER,PARAMETER :: blas_lower_triangular=235 197 INTEGER,PARAMETER :: blas_upper_triangular=236 198 INTEGER,PARAMETER :: blas_lower_symmetric=237 199 INTEGER,PARAMETER :: blas_upper_symmetric=238 200 INTEGER,PARAMETER :: blas_lower_hermitian=239 201 INTEGER,PARAMETER :: blas_upper_hermitian=240 202 INTEGER,PARAMETER :: blas_complex=241 203 INTEGER,PARAMETER :: blas_real=242 204 INTEGER,PARAMETER :: blas_double_precision=243 205 INTEGER,PARAMETER :: blas_single_precision=244 206 INTEGER,PARAMETER :: blas_num_rows=251 207 INTEGER,PARAMETER :: blas_num_cols=252 208 INTEGER,PARAMETER :: blas_num_nonzeros=253 209 INTEGER,PARAMETER :: blas_invalid_handle=261 210 INTEGER,PARAMETER :: blas_new_handle=262 211 INTEGER,PARAMETER :: blas_open_handle=263 212 INTEGER,PARAMETER :: blas_valid_handle=264 213 INTEGER,PARAMETER :: blas_regular=271 214 INTEGER,PARAMETER :: blas_irregular=272 215 INTEGER,PARAMETER :: blas_block=273 216 INTEGER,PARAMETER :: blas_unassembled=274 217 INTEGER,PARAMETER :: blas_rsb_spmv_autotuning_on=6660 218 INTEGER,PARAMETER :: blas_rsb_spmv_autotuning_off=6661 219 INTEGER,PARAMETER :: blas_rsb_spmv_n_autotuning_on=6662 220 INTEGER,PARAMETER :: blas_rsb_spmv_n_autotuning_off=6663 221 INTEGER,PARAMETER :: blas_rsb_spmv_t_autotuning_on=6664 222 INTEGER,PARAMETER :: blas_rsb_spmv_t_autotuning_off=6665 223 INTEGER,PARAMETER :: blas_rsb_autotune_next_operation=6666 224 INTEGER,PARAMETER :: blas_rsb_rep_rsb=9995 225 INTEGER,PARAMETER :: blas_rsb_rep_csr=9996 226 INTEGER,PARAMETER :: blas_rsb_rep_coo=9997 227 INTEGER,PARAMETER :: blas_rsb_duplicates_ovw=9998 228 INTEGER,PARAMETER :: blas_rsb_duplicates_sum=9999 229 230 INTERFACE 231 TYPE(C_PTR) FUNCTION & 232 &rsb_blas_get_mtx& 233 &(A)& 234 &BIND(c,NAME = "rsb_blas_get_mtx") 235 USE ISO_C_BINDING 236 INTEGER(C_INT), VALUE :: A 237 END FUNCTION rsb_blas_get_mtx 238 END INTERFACE 239 240CONTAINS 241 242 !> \rsb_spblasl2_ds_msg\rsb_spblas_return_msg 243 !> \rsb_spblas_f_istat_msg 244 !! 245 246 SUBROUTINE usds(A,istat) 247 IMPLICIT NONE 248 INTEGER,INTENT(IN)::A 249 INTEGER::istat 250 251 istat=blas_sparse_const_success 252#if defined(RSB_HAVE_RSB_KERNELS) 253 CALL blas_usds(A,istat) 254 IF(istat.NE.blas_sparse_const_success)& 255 &istat=blas_sparse_const_failure 256#else /* RSB_HAVE_RSB_KERNELS */ 257 istat=blas_sparse_const_not_available 258#endif /* RSB_HAVE_RSB_KERNELS */ 259 END SUBROUTINE 260 261 262 !> \rsb_spblasl2_cr_end_msg\rsb_spblas_return_msg 263 !> \rsb_spblas_f_istat_msg 264 !! 265 266 SUBROUTINE uscr_end(A,istat) 267 268 IMPLICIT NONE 269 INTEGER, INTENT(OUT) ::istat 270 INTEGER,INTENT(IN)::A 271 272 istat=blas_sparse_const_success 273#if defined(RSB_HAVE_RSB_KERNELS) 274 CALL blas_uscr_end(A,istat) 275 276 IF(istat.NE.blas_sparse_const_success)& 277 &istat=blas_sparse_const_failure 278#else /* RSB_HAVE_RSB_KERNELS */ 279 istat=blas_sparse_const_not_available 280#endif /* RSB_HAVE_RSB_KERNELS */ 281 END SUBROUTINE 282 283 284 !> \rsb_spblasl2_gp_msg\rsb_spblas_return_msg 285 !> \rsb_spblas_f_istat_msg 286 !! 287 288 SUBROUTINE usgp(A,pname,istat) 289 290 IMPLICIT NONE 291 INTEGER, INTENT(OUT) ::istat 292 INTEGER,INTENT(IN)::A 293 INTEGER,INTENT(IN)::pname 294 295 istat=blas_sparse_const_success 296#if defined(RSB_HAVE_RSB_KERNELS) 297 CALL blas_usgp(A,pname,istat) 298 299 !istat does not have the meaning of an error value, here 300 !IF(istat.NE.blas_sparse_const_success)istat=blas_sparse_const_failure 301#else /* RSB_HAVE_RSB_KERNELS */ 302 istat=blas_sparse_const_not_available 303#endif /* RSB_HAVE_RSB_KERNELS */ 304 END SUBROUTINE 305 306 307 !> \rsb_spblasl2_sp_msg\rsb_spblas_return_msg 308 !> \rsb_spblas_f_istat_msg 309 !! 310 311 SUBROUTINE ussp(A,pname,istat) 312 313 IMPLICIT NONE 314 INTEGER, INTENT(OUT) ::istat 315 INTEGER,INTENT(IN)::A 316 INTEGER,INTENT(IN)::pname 317 318 istat=blas_sparse_const_success 319#if defined(RSB_HAVE_RSB_KERNELS) 320 CALL blas_ussp(A,pname,istat) 321 322 IF(istat.NE.blas_sparse_const_success)& 323 &istat=blas_sparse_const_failure 324#else /* RSB_HAVE_RSB_KERNELS */ 325 istat=blas_sparse_const_not_available 326#endif /* RSB_HAVE_RSB_KERNELS */ 327 328 END SUBROUTINE 329 330 331 332 333 !> \rsb_spblasl2_cr_begin_msg\rsb_spblas_return_mtx_msg 334 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 335 336 !! 337 338 SUBROUTINE suscr_begin& 339 &(m,n,A,istat) 340 IMPLICIT NONE 341 INTEGER, INTENT(OUT) ::istat 342 INTEGER :: m 343 INTEGER :: n 344 INTEGER,INTENT(OUT) :: A 345 346 347 istat = blas_sparse_const_success 348 CALL blas_suscr_begin& 349 &(m,n,A,istat) 350 351 IF(istat.NE.blas_sparse_const_success)& 352 &istat = blas_sparse_const_failure 353 END SUBROUTINE 354 355 356 !> \rsb_spblasl2_cr_begin_msg\rsb_spblas_return_mtx_msg 357 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 358 359 !! 360 361 SUBROUTINE duscr_begin& 362 &(m,n,A,istat) 363 IMPLICIT NONE 364 INTEGER, INTENT(OUT) ::istat 365 INTEGER :: m 366 INTEGER :: n 367 INTEGER,INTENT(OUT) :: A 368 369 370 istat = blas_sparse_const_success 371 CALL blas_duscr_begin& 372 &(m,n,A,istat) 373 374 IF(istat.NE.blas_sparse_const_success)& 375 &istat = blas_sparse_const_failure 376 END SUBROUTINE 377 378 379 !> \rsb_spblasl2_cr_begin_msg\rsb_spblas_return_mtx_msg 380 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 381 382 !! 383 384 SUBROUTINE cuscr_begin& 385 &(m,n,A,istat) 386 IMPLICIT NONE 387 INTEGER, INTENT(OUT) ::istat 388 INTEGER :: m 389 INTEGER :: n 390 INTEGER,INTENT(OUT) :: A 391 392 393 istat = blas_sparse_const_success 394 CALL blas_cuscr_begin& 395 &(m,n,A,istat) 396 397 IF(istat.NE.blas_sparse_const_success)& 398 &istat = blas_sparse_const_failure 399 END SUBROUTINE 400 401 402 !> \rsb_spblasl2_cr_begin_msg\rsb_spblas_return_mtx_msg 403 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 404 405 !! 406 407 SUBROUTINE zuscr_begin& 408 &(m,n,A,istat) 409 IMPLICIT NONE 410 INTEGER, INTENT(OUT) ::istat 411 INTEGER :: m 412 INTEGER :: n 413 INTEGER,INTENT(OUT) :: A 414 415 416 istat = blas_sparse_const_success 417 CALL blas_zuscr_begin& 418 &(m,n,A,istat) 419 420 IF(istat.NE.blas_sparse_const_success)& 421 &istat = blas_sparse_const_failure 422 END SUBROUTINE 423 424 425 426 427 !> \rsb_spblasl2_cr_block_msg\rsb_spblas_return_mtx_msg 428 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 429 430 !! 431 432 SUBROUTINE suscr_block_begin& 433 &(Mb,Nb,k,l,A,istat) 434 IMPLICIT NONE 435 INTEGER, INTENT(OUT) ::istat 436 INTEGER :: Mb 437 INTEGER :: Nb 438 INTEGER :: k 439 INTEGER :: l 440 INTEGER,INTENT(OUT) :: A 441 442 443 istat = blas_sparse_const_success 444 CALL blas_suscr_block_begin& 445 &(Mb,Nb,k,l,A,istat) 446 447 IF(istat.NE.blas_sparse_const_success)& 448 &istat = blas_sparse_const_failure 449 END SUBROUTINE 450 451 452 !> \rsb_spblasl2_cr_block_msg\rsb_spblas_return_mtx_msg 453 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 454 455 !! 456 457 SUBROUTINE duscr_block_begin& 458 &(Mb,Nb,k,l,A,istat) 459 IMPLICIT NONE 460 INTEGER, INTENT(OUT) ::istat 461 INTEGER :: Mb 462 INTEGER :: Nb 463 INTEGER :: k 464 INTEGER :: l 465 INTEGER,INTENT(OUT) :: A 466 467 468 istat = blas_sparse_const_success 469 CALL blas_duscr_block_begin& 470 &(Mb,Nb,k,l,A,istat) 471 472 IF(istat.NE.blas_sparse_const_success)& 473 &istat = blas_sparse_const_failure 474 END SUBROUTINE 475 476 477 !> \rsb_spblasl2_cr_block_msg\rsb_spblas_return_mtx_msg 478 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 479 480 !! 481 482 SUBROUTINE cuscr_block_begin& 483 &(Mb,Nb,k,l,A,istat) 484 IMPLICIT NONE 485 INTEGER, INTENT(OUT) ::istat 486 INTEGER :: Mb 487 INTEGER :: Nb 488 INTEGER :: k 489 INTEGER :: l 490 INTEGER,INTENT(OUT) :: A 491 492 493 istat = blas_sparse_const_success 494 CALL blas_cuscr_block_begin& 495 &(Mb,Nb,k,l,A,istat) 496 497 IF(istat.NE.blas_sparse_const_success)& 498 &istat = blas_sparse_const_failure 499 END SUBROUTINE 500 501 502 !> \rsb_spblasl2_cr_block_msg\rsb_spblas_return_mtx_msg 503 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 504 505 !! 506 507 SUBROUTINE zuscr_block_begin& 508 &(Mb,Nb,k,l,A,istat) 509 IMPLICIT NONE 510 INTEGER, INTENT(OUT) ::istat 511 INTEGER :: Mb 512 INTEGER :: Nb 513 INTEGER :: k 514 INTEGER :: l 515 INTEGER,INTENT(OUT) :: A 516 517 518 istat = blas_sparse_const_success 519 CALL blas_zuscr_block_begin& 520 &(Mb,Nb,k,l,A,istat) 521 522 IF(istat.NE.blas_sparse_const_success)& 523 &istat = blas_sparse_const_failure 524 END SUBROUTINE 525 526 527 528 529 !> \rsb_spblasl2_cr_vbr_msg\rsb_spblas_return_mtx_msg 530 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 531 532 !! 533 534 SUBROUTINE suscr_variable_block_begin& 535 &(Mb,Nb,K,L,A,istat) 536 IMPLICIT NONE 537 INTEGER, INTENT(OUT) ::istat 538 INTEGER :: Mb 539 INTEGER :: Nb 540 INTEGER :: K (:) 541 INTEGER :: L (:) 542 INTEGER,INTENT(OUT) :: A 543 544 545 istat = blas_sparse_const_success 546 CALL blas_suscr_variable_block_begin& 547 &(Mb,Nb,K,L,A,istat) 548 549 IF(istat.NE.blas_sparse_const_success)& 550 &istat = blas_sparse_const_failure 551 END SUBROUTINE 552 553 554 !> \rsb_spblasl2_cr_vbr_msg\rsb_spblas_return_mtx_msg 555 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 556 557 !! 558 559 SUBROUTINE duscr_variable_block_begin& 560 &(Mb,Nb,K,L,A,istat) 561 IMPLICIT NONE 562 INTEGER, INTENT(OUT) ::istat 563 INTEGER :: Mb 564 INTEGER :: Nb 565 INTEGER :: K (:) 566 INTEGER :: L (:) 567 INTEGER,INTENT(OUT) :: A 568 569 570 istat = blas_sparse_const_success 571 CALL blas_duscr_variable_block_begin& 572 &(Mb,Nb,K,L,A,istat) 573 574 IF(istat.NE.blas_sparse_const_success)& 575 &istat = blas_sparse_const_failure 576 END SUBROUTINE 577 578 579 !> \rsb_spblasl2_cr_vbr_msg\rsb_spblas_return_mtx_msg 580 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 581 582 !! 583 584 SUBROUTINE cuscr_variable_block_begin& 585 &(Mb,Nb,K,L,A,istat) 586 IMPLICIT NONE 587 INTEGER, INTENT(OUT) ::istat 588 INTEGER :: Mb 589 INTEGER :: Nb 590 INTEGER :: K (:) 591 INTEGER :: L (:) 592 INTEGER,INTENT(OUT) :: A 593 594 595 istat = blas_sparse_const_success 596 CALL blas_cuscr_variable_block_begin& 597 &(Mb,Nb,K,L,A,istat) 598 599 IF(istat.NE.blas_sparse_const_success)& 600 &istat = blas_sparse_const_failure 601 END SUBROUTINE 602 603 604 !> \rsb_spblasl2_cr_vbr_msg\rsb_spblas_return_mtx_msg 605 !> \rsb_spblas_f_istat_msg\rsb_spblasl2_A_msg_ftn 606 607 !! 608 609 SUBROUTINE zuscr_variable_block_begin& 610 &(Mb,Nb,K,L,A,istat) 611 IMPLICIT NONE 612 INTEGER, INTENT(OUT) ::istat 613 INTEGER :: Mb 614 INTEGER :: Nb 615 INTEGER :: K (:) 616 INTEGER :: L (:) 617 INTEGER,INTENT(OUT) :: A 618 619 620 istat = blas_sparse_const_success 621 CALL blas_zuscr_variable_block_begin& 622 &(Mb,Nb,K,L,A,istat) 623 624 IF(istat.NE.blas_sparse_const_success)& 625 &istat = blas_sparse_const_failure 626 END SUBROUTINE 627 628 629 630 631 !> \rsb_spblasl2_cr_end_msg\rsb_spblas_return_msg 632 !> \rsb_spblas_f_istat_msg 633 !! 634 635 SUBROUTINE suscr_end& 636 &(A,istat) 637 IMPLICIT NONE 638 INTEGER, INTENT(OUT) ::istat 639 INTEGER :: A 640 641 642 istat = blas_sparse_const_success 643 CALL blas_suscr_end& 644 &(A,istat) 645 646 IF(istat.NE.blas_sparse_const_success)& 647 &istat = blas_sparse_const_failure 648 END SUBROUTINE 649 650 651 !> \rsb_spblasl2_cr_end_msg\rsb_spblas_return_msg 652 !> \rsb_spblas_f_istat_msg 653 !! 654 655 SUBROUTINE duscr_end& 656 &(A,istat) 657 IMPLICIT NONE 658 INTEGER, INTENT(OUT) ::istat 659 INTEGER :: A 660 661 662 istat = blas_sparse_const_success 663 CALL blas_duscr_end& 664 &(A,istat) 665 666 IF(istat.NE.blas_sparse_const_success)& 667 &istat = blas_sparse_const_failure 668 END SUBROUTINE 669 670 671 !> \rsb_spblasl2_cr_end_msg\rsb_spblas_return_msg 672 !> \rsb_spblas_f_istat_msg 673 !! 674 675 SUBROUTINE cuscr_end& 676 &(A,istat) 677 IMPLICIT NONE 678 INTEGER, INTENT(OUT) ::istat 679 INTEGER :: A 680 681 682 istat = blas_sparse_const_success 683 CALL blas_cuscr_end& 684 &(A,istat) 685 686 IF(istat.NE.blas_sparse_const_success)& 687 &istat = blas_sparse_const_failure 688 END SUBROUTINE 689 690 691 !> \rsb_spblasl2_cr_end_msg\rsb_spblas_return_msg 692 !> \rsb_spblas_f_istat_msg 693 !! 694 695 SUBROUTINE zuscr_end& 696 &(A,istat) 697 IMPLICIT NONE 698 INTEGER, INTENT(OUT) ::istat 699 INTEGER :: A 700 701 702 istat = blas_sparse_const_success 703 CALL blas_zuscr_end& 704 &(A,istat) 705 706 IF(istat.NE.blas_sparse_const_success)& 707 &istat = blas_sparse_const_failure 708 END SUBROUTINE 709 710 711 712 713 !> \rsb_spblasl2_cr_insert_entry_msg\rsb_spblas_return_msg 714 !> \rsb_spblas_f_istat_msg 715 !! 716 717 SUBROUTINE suscr_insert_entry& 718 &(A,val,i,j,istat) 719 IMPLICIT NONE 720 INTEGER, INTENT(OUT) ::istat 721 INTEGER :: A 722 REAL(KIND(1.e0)) :: val 723 INTEGER :: i 724 INTEGER :: j 725 726 727 istat = blas_sparse_const_success 728 CALL blas_suscr_insert_entry& 729 &(A,val,i,j,istat) 730 731 IF(istat.NE.blas_sparse_const_success)& 732 &istat = blas_sparse_const_failure 733 END SUBROUTINE 734 735 736 !> \rsb_spblasl2_cr_insert_entry_msg\rsb_spblas_return_msg 737 !> \rsb_spblas_f_istat_msg 738 !! 739 740 SUBROUTINE duscr_insert_entry& 741 &(A,val,i,j,istat) 742 IMPLICIT NONE 743 INTEGER, INTENT(OUT) ::istat 744 INTEGER :: A 745 REAL(KIND(1.d0)) :: val 746 INTEGER :: i 747 INTEGER :: j 748 749 750 istat = blas_sparse_const_success 751 CALL blas_duscr_insert_entry& 752 &(A,val,i,j,istat) 753 754 IF(istat.NE.blas_sparse_const_success)& 755 &istat = blas_sparse_const_failure 756 END SUBROUTINE 757 758 759 !> \rsb_spblasl2_cr_insert_entry_msg\rsb_spblas_return_msg 760 !> \rsb_spblas_f_istat_msg 761 !! 762 763 SUBROUTINE cuscr_insert_entry& 764 &(A,val,i,j,istat) 765 IMPLICIT NONE 766 INTEGER, INTENT(OUT) ::istat 767 INTEGER :: A 768 COMPLEX(KIND(1.e0)) :: val 769 INTEGER :: i 770 INTEGER :: j 771 772 773 istat = blas_sparse_const_success 774 CALL blas_cuscr_insert_entry& 775 &(A,val,i,j,istat) 776 777 IF(istat.NE.blas_sparse_const_success)& 778 &istat = blas_sparse_const_failure 779 END SUBROUTINE 780 781 782 !> \rsb_spblasl2_cr_insert_entry_msg\rsb_spblas_return_msg 783 !> \rsb_spblas_f_istat_msg 784 !! 785 786 SUBROUTINE zuscr_insert_entry& 787 &(A,val,i,j,istat) 788 IMPLICIT NONE 789 INTEGER, INTENT(OUT) ::istat 790 INTEGER :: A 791 COMPLEX(KIND(1.d0)) :: val 792 INTEGER :: i 793 INTEGER :: j 794 795 796 istat = blas_sparse_const_success 797 CALL blas_zuscr_insert_entry& 798 &(A,val,i,j,istat) 799 800 IF(istat.NE.blas_sparse_const_success)& 801 &istat = blas_sparse_const_failure 802 END SUBROUTINE 803 804 805 806 807 !> \rsb_spblasl2_cr_insert_entries_msg\rsb_spblas_return_msg 808 !> \rsb_spblas_f_istat_msg 809 !! 810 811 SUBROUTINE suscr_insert_entries& 812 &(A,nnz,val,indx,jndx,istat) 813 IMPLICIT NONE 814 INTEGER, INTENT(OUT) ::istat 815 INTEGER :: A 816 INTEGER :: nnz 817 REAL(KIND(1.e0)) :: val (:) 818 INTEGER :: indx (:) 819 INTEGER :: jndx (:) 820 821 822 istat = blas_sparse_const_success 823 CALL blas_suscr_insert_entries& 824 &(A,nnz,val,indx,jndx,istat) 825 826 IF(istat.NE.blas_sparse_const_success)& 827 &istat = blas_sparse_const_failure 828 END SUBROUTINE 829 830 831 !> \rsb_spblasl2_cr_insert_entries_msg\rsb_spblas_return_msg 832 !> \rsb_spblas_f_istat_msg 833 !! 834 835 SUBROUTINE duscr_insert_entries& 836 &(A,nnz,val,indx,jndx,istat) 837 IMPLICIT NONE 838 INTEGER, INTENT(OUT) ::istat 839 INTEGER :: A 840 INTEGER :: nnz 841 REAL(KIND(1.d0)) :: val (:) 842 INTEGER :: indx (:) 843 INTEGER :: jndx (:) 844 845 846 istat = blas_sparse_const_success 847 CALL blas_duscr_insert_entries& 848 &(A,nnz,val,indx,jndx,istat) 849 850 IF(istat.NE.blas_sparse_const_success)& 851 &istat = blas_sparse_const_failure 852 END SUBROUTINE 853 854 855 !> \rsb_spblasl2_cr_insert_entries_msg\rsb_spblas_return_msg 856 !> \rsb_spblas_f_istat_msg 857 !! 858 859 SUBROUTINE cuscr_insert_entries& 860 &(A,nnz,val,indx,jndx,istat) 861 IMPLICIT NONE 862 INTEGER, INTENT(OUT) ::istat 863 INTEGER :: A 864 INTEGER :: nnz 865 COMPLEX(KIND(1.e0)) :: val (:) 866 INTEGER :: indx (:) 867 INTEGER :: jndx (:) 868 869 870 istat = blas_sparse_const_success 871 CALL blas_cuscr_insert_entries& 872 &(A,nnz,val,indx,jndx,istat) 873 874 IF(istat.NE.blas_sparse_const_success)& 875 &istat = blas_sparse_const_failure 876 END SUBROUTINE 877 878 879 !> \rsb_spblasl2_cr_insert_entries_msg\rsb_spblas_return_msg 880 !> \rsb_spblas_f_istat_msg 881 !! 882 883 SUBROUTINE zuscr_insert_entries& 884 &(A,nnz,val,indx,jndx,istat) 885 IMPLICIT NONE 886 INTEGER, INTENT(OUT) ::istat 887 INTEGER :: A 888 INTEGER :: nnz 889 COMPLEX(KIND(1.d0)) :: val (:) 890 INTEGER :: indx (:) 891 INTEGER :: jndx (:) 892 893 894 istat = blas_sparse_const_success 895 CALL blas_zuscr_insert_entries& 896 &(A,nnz,val,indx,jndx,istat) 897 898 IF(istat.NE.blas_sparse_const_success)& 899 &istat = blas_sparse_const_failure 900 END SUBROUTINE 901 902 903 904 905 !> \rsb_spblasl2_cr_insert_col_msg\rsb_spblas_return_msg 906 !> \rsb_spblas_f_istat_msg 907 !! 908 909 SUBROUTINE suscr_insert_col& 910 &(A,j,nnz,val,indx,istat) 911 IMPLICIT NONE 912 INTEGER, INTENT(OUT) ::istat 913 INTEGER :: A 914 INTEGER :: j 915 INTEGER :: nnz 916 REAL(KIND(1.e0)) :: val (:) 917 INTEGER :: indx (:) 918 919 920 istat = blas_sparse_const_success 921 CALL blas_suscr_insert_col& 922 &(A,j,nnz,val,indx,istat) 923 924 IF(istat.NE.blas_sparse_const_success)& 925 &istat = blas_sparse_const_failure 926 END SUBROUTINE 927 928 929 !> \rsb_spblasl2_cr_insert_col_msg\rsb_spblas_return_msg 930 !> \rsb_spblas_f_istat_msg 931 !! 932 933 SUBROUTINE duscr_insert_col& 934 &(A,j,nnz,val,indx,istat) 935 IMPLICIT NONE 936 INTEGER, INTENT(OUT) ::istat 937 INTEGER :: A 938 INTEGER :: j 939 INTEGER :: nnz 940 REAL(KIND(1.d0)) :: val (:) 941 INTEGER :: indx (:) 942 943 944 istat = blas_sparse_const_success 945 CALL blas_duscr_insert_col& 946 &(A,j,nnz,val,indx,istat) 947 948 IF(istat.NE.blas_sparse_const_success)& 949 &istat = blas_sparse_const_failure 950 END SUBROUTINE 951 952 953 !> \rsb_spblasl2_cr_insert_col_msg\rsb_spblas_return_msg 954 !> \rsb_spblas_f_istat_msg 955 !! 956 957 SUBROUTINE cuscr_insert_col& 958 &(A,j,nnz,val,indx,istat) 959 IMPLICIT NONE 960 INTEGER, INTENT(OUT) ::istat 961 INTEGER :: A 962 INTEGER :: j 963 INTEGER :: nnz 964 COMPLEX(KIND(1.e0)) :: val (:) 965 INTEGER :: indx (:) 966 967 968 istat = blas_sparse_const_success 969 CALL blas_cuscr_insert_col& 970 &(A,j,nnz,val,indx,istat) 971 972 IF(istat.NE.blas_sparse_const_success)& 973 &istat = blas_sparse_const_failure 974 END SUBROUTINE 975 976 977 !> \rsb_spblasl2_cr_insert_col_msg\rsb_spblas_return_msg 978 !> \rsb_spblas_f_istat_msg 979 !! 980 981 SUBROUTINE zuscr_insert_col& 982 &(A,j,nnz,val,indx,istat) 983 IMPLICIT NONE 984 INTEGER, INTENT(OUT) ::istat 985 INTEGER :: A 986 INTEGER :: j 987 INTEGER :: nnz 988 COMPLEX(KIND(1.d0)) :: val (:) 989 INTEGER :: indx (:) 990 991 992 istat = blas_sparse_const_success 993 CALL blas_zuscr_insert_col& 994 &(A,j,nnz,val,indx,istat) 995 996 IF(istat.NE.blas_sparse_const_success)& 997 &istat = blas_sparse_const_failure 998 END SUBROUTINE 999 1000 1001 1002 1003 !> \rsb_spblasl2_cr_insert_row_msg\rsb_spblas_return_msg 1004 !> \rsb_spblas_f_istat_msg 1005 !! 1006 1007 SUBROUTINE suscr_insert_row& 1008 &(A,i,nnz,val,indx,istat) 1009 IMPLICIT NONE 1010 INTEGER, INTENT(OUT) ::istat 1011 INTEGER :: A 1012 INTEGER :: i 1013 INTEGER :: nnz 1014 REAL(KIND(1.e0)) :: val (:) 1015 INTEGER :: indx (:) 1016 1017 1018 istat = blas_sparse_const_success 1019 CALL blas_suscr_insert_row& 1020 &(A,i,nnz,val,indx,istat) 1021 1022 IF(istat.NE.blas_sparse_const_success)& 1023 &istat = blas_sparse_const_failure 1024 END SUBROUTINE 1025 1026 1027 !> \rsb_spblasl2_cr_insert_row_msg\rsb_spblas_return_msg 1028 !> \rsb_spblas_f_istat_msg 1029 !! 1030 1031 SUBROUTINE duscr_insert_row& 1032 &(A,i,nnz,val,indx,istat) 1033 IMPLICIT NONE 1034 INTEGER, INTENT(OUT) ::istat 1035 INTEGER :: A 1036 INTEGER :: i 1037 INTEGER :: nnz 1038 REAL(KIND(1.d0)) :: val (:) 1039 INTEGER :: indx (:) 1040 1041 1042 istat = blas_sparse_const_success 1043 CALL blas_duscr_insert_row& 1044 &(A,i,nnz,val,indx,istat) 1045 1046 IF(istat.NE.blas_sparse_const_success)& 1047 &istat = blas_sparse_const_failure 1048 END SUBROUTINE 1049 1050 1051 !> \rsb_spblasl2_cr_insert_row_msg\rsb_spblas_return_msg 1052 !> \rsb_spblas_f_istat_msg 1053 !! 1054 1055 SUBROUTINE cuscr_insert_row& 1056 &(A,i,nnz,val,indx,istat) 1057 IMPLICIT NONE 1058 INTEGER, INTENT(OUT) ::istat 1059 INTEGER :: A 1060 INTEGER :: i 1061 INTEGER :: nnz 1062 COMPLEX(KIND(1.e0)) :: val (:) 1063 INTEGER :: indx (:) 1064 1065 1066 istat = blas_sparse_const_success 1067 CALL blas_cuscr_insert_row& 1068 &(A,i,nnz,val,indx,istat) 1069 1070 IF(istat.NE.blas_sparse_const_success)& 1071 &istat = blas_sparse_const_failure 1072 END SUBROUTINE 1073 1074 1075 !> \rsb_spblasl2_cr_insert_row_msg\rsb_spblas_return_msg 1076 !> \rsb_spblas_f_istat_msg 1077 !! 1078 1079 SUBROUTINE zuscr_insert_row& 1080 &(A,i,nnz,val,indx,istat) 1081 IMPLICIT NONE 1082 INTEGER, INTENT(OUT) ::istat 1083 INTEGER :: A 1084 INTEGER :: i 1085 INTEGER :: nnz 1086 COMPLEX(KIND(1.d0)) :: val (:) 1087 INTEGER :: indx (:) 1088 1089 1090 istat = blas_sparse_const_success 1091 CALL blas_zuscr_insert_row& 1092 &(A,i,nnz,val,indx,istat) 1093 1094 IF(istat.NE.blas_sparse_const_success)& 1095 &istat = blas_sparse_const_failure 1096 END SUBROUTINE 1097 1098 1099 1100 1101 !> \rsb_spblasl2_cr_insert_clique_msg\rsb_spblas_return_msg 1102 !> \rsb_spblas_f_istat_msg 1103 !! 1104 1105 SUBROUTINE suscr_insert_clique& 1106 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1107 IMPLICIT NONE 1108 INTEGER, INTENT(OUT) ::istat 1109 INTEGER :: A 1110 INTEGER :: k 1111 INTEGER :: l 1112 REAL(KIND(1.e0)) :: val (:) 1113 INTEGER :: row_stride 1114 INTEGER :: col_stride 1115 INTEGER :: indx (:) 1116 INTEGER :: jndx (:) 1117 1118 1119 istat = blas_sparse_const_success 1120 CALL blas_suscr_insert_clique& 1121 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1122 1123 IF(istat.NE.blas_sparse_const_success)& 1124 &istat = blas_sparse_const_failure 1125 END SUBROUTINE 1126 1127 1128 !> \rsb_spblasl2_cr_insert_clique_msg\rsb_spblas_return_msg 1129 !> \rsb_spblas_f_istat_msg 1130 !! 1131 1132 SUBROUTINE duscr_insert_clique& 1133 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1134 IMPLICIT NONE 1135 INTEGER, INTENT(OUT) ::istat 1136 INTEGER :: A 1137 INTEGER :: k 1138 INTEGER :: l 1139 REAL(KIND(1.d0)) :: val (:) 1140 INTEGER :: row_stride 1141 INTEGER :: col_stride 1142 INTEGER :: indx (:) 1143 INTEGER :: jndx (:) 1144 1145 1146 istat = blas_sparse_const_success 1147 CALL blas_duscr_insert_clique& 1148 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1149 1150 IF(istat.NE.blas_sparse_const_success)& 1151 &istat = blas_sparse_const_failure 1152 END SUBROUTINE 1153 1154 1155 !> \rsb_spblasl2_cr_insert_clique_msg\rsb_spblas_return_msg 1156 !> \rsb_spblas_f_istat_msg 1157 !! 1158 1159 SUBROUTINE cuscr_insert_clique& 1160 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1161 IMPLICIT NONE 1162 INTEGER, INTENT(OUT) ::istat 1163 INTEGER :: A 1164 INTEGER :: k 1165 INTEGER :: l 1166 COMPLEX(KIND(1.e0)) :: val (:) 1167 INTEGER :: row_stride 1168 INTEGER :: col_stride 1169 INTEGER :: indx (:) 1170 INTEGER :: jndx (:) 1171 1172 1173 istat = blas_sparse_const_success 1174 CALL blas_cuscr_insert_clique& 1175 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1176 1177 IF(istat.NE.blas_sparse_const_success)& 1178 &istat = blas_sparse_const_failure 1179 END SUBROUTINE 1180 1181 1182 !> \rsb_spblasl2_cr_insert_clique_msg\rsb_spblas_return_msg 1183 !> \rsb_spblas_f_istat_msg 1184 !! 1185 1186 SUBROUTINE zuscr_insert_clique& 1187 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1188 IMPLICIT NONE 1189 INTEGER, INTENT(OUT) ::istat 1190 INTEGER :: A 1191 INTEGER :: k 1192 INTEGER :: l 1193 COMPLEX(KIND(1.d0)) :: val (:) 1194 INTEGER :: row_stride 1195 INTEGER :: col_stride 1196 INTEGER :: indx (:) 1197 INTEGER :: jndx (:) 1198 1199 1200 istat = blas_sparse_const_success 1201 CALL blas_zuscr_insert_clique& 1202 &(A,k,l,val,row_stride,col_stride,indx,jndx,istat) 1203 1204 IF(istat.NE.blas_sparse_const_success)& 1205 &istat = blas_sparse_const_failure 1206 END SUBROUTINE 1207 1208 1209 1210 1211 !> \rsb_spblasl2_cr_insert_block_msg\rsb_spblas_return_msg 1212 !> \rsb_spblas_f_istat_msg 1213 !! 1214 1215 SUBROUTINE suscr_insert_block& 1216 &(A,val,row_stride,col_stride,i,j,istat) 1217 IMPLICIT NONE 1218 INTEGER, INTENT(OUT) ::istat 1219 INTEGER :: A 1220 REAL(KIND(1.e0)) :: val (:) 1221 INTEGER :: row_stride 1222 INTEGER :: col_stride 1223 INTEGER :: i 1224 INTEGER :: j 1225 1226 1227 istat = blas_sparse_const_success 1228 CALL blas_suscr_insert_block& 1229 &(A,val,row_stride,col_stride,i,j,istat) 1230 1231 IF(istat.NE.blas_sparse_const_success)& 1232 &istat = blas_sparse_const_failure 1233 END SUBROUTINE 1234 1235 1236 !> \rsb_spblasl2_cr_insert_block_msg\rsb_spblas_return_msg 1237 !> \rsb_spblas_f_istat_msg 1238 !! 1239 1240 SUBROUTINE duscr_insert_block& 1241 &(A,val,row_stride,col_stride,i,j,istat) 1242 IMPLICIT NONE 1243 INTEGER, INTENT(OUT) ::istat 1244 INTEGER :: A 1245 REAL(KIND(1.d0)) :: val (:) 1246 INTEGER :: row_stride 1247 INTEGER :: col_stride 1248 INTEGER :: i 1249 INTEGER :: j 1250 1251 1252 istat = blas_sparse_const_success 1253 CALL blas_duscr_insert_block& 1254 &(A,val,row_stride,col_stride,i,j,istat) 1255 1256 IF(istat.NE.blas_sparse_const_success)& 1257 &istat = blas_sparse_const_failure 1258 END SUBROUTINE 1259 1260 1261 !> \rsb_spblasl2_cr_insert_block_msg\rsb_spblas_return_msg 1262 !> \rsb_spblas_f_istat_msg 1263 !! 1264 1265 SUBROUTINE cuscr_insert_block& 1266 &(A,val,row_stride,col_stride,i,j,istat) 1267 IMPLICIT NONE 1268 INTEGER, INTENT(OUT) ::istat 1269 INTEGER :: A 1270 COMPLEX(KIND(1.e0)) :: val (:) 1271 INTEGER :: row_stride 1272 INTEGER :: col_stride 1273 INTEGER :: i 1274 INTEGER :: j 1275 1276 1277 istat = blas_sparse_const_success 1278 CALL blas_cuscr_insert_block& 1279 &(A,val,row_stride,col_stride,i,j,istat) 1280 1281 IF(istat.NE.blas_sparse_const_success)& 1282 &istat = blas_sparse_const_failure 1283 END SUBROUTINE 1284 1285 1286 !> \rsb_spblasl2_cr_insert_block_msg\rsb_spblas_return_msg 1287 !> \rsb_spblas_f_istat_msg 1288 !! 1289 1290 SUBROUTINE zuscr_insert_block& 1291 &(A,val,row_stride,col_stride,i,j,istat) 1292 IMPLICIT NONE 1293 INTEGER, INTENT(OUT) ::istat 1294 INTEGER :: A 1295 COMPLEX(KIND(1.d0)) :: val (:) 1296 INTEGER :: row_stride 1297 INTEGER :: col_stride 1298 INTEGER :: i 1299 INTEGER :: j 1300 1301 1302 istat = blas_sparse_const_success 1303 CALL blas_zuscr_insert_block& 1304 &(A,val,row_stride,col_stride,i,j,istat) 1305 1306 IF(istat.NE.blas_sparse_const_success)& 1307 &istat = blas_sparse_const_failure 1308 END SUBROUTINE 1309 1310 1311 1312 1313 !> \rsb_spblasl2_mv_msg\rsb_spblas_return_msg 1314 !> \rsb_spblas_f_istat_msg 1315 !! 1316 1317 SUBROUTINE susmv& 1318 &(transA,alpha,A,x,incx,y,incy,istat) 1319 IMPLICIT NONE 1320 INTEGER, INTENT(OUT) ::istat 1321 INTEGER :: transA 1322 REAL(KIND(1.e0)) :: alpha 1323 INTEGER :: A 1324 REAL(KIND(1.e0)) :: x (:) 1325 INTEGER :: incx 1326 REAL(KIND(1.e0)) :: y (:) 1327 INTEGER :: incy 1328 1329 1330 istat = blas_sparse_const_success 1331 CALL blas_susmv& 1332 &(transA,alpha,A,x,incx,y,incy,istat) 1333 1334 IF(istat.NE.blas_sparse_const_success)& 1335 &istat = blas_sparse_const_failure 1336 END SUBROUTINE 1337 1338 1339 !> \rsb_spblasl2_mv_msg\rsb_spblas_return_msg 1340 !> \rsb_spblas_f_istat_msg 1341 !! 1342 1343 SUBROUTINE dusmv& 1344 &(transA,alpha,A,x,incx,y,incy,istat) 1345 IMPLICIT NONE 1346 INTEGER, INTENT(OUT) ::istat 1347 INTEGER :: transA 1348 REAL(KIND(1.d0)) :: alpha 1349 INTEGER :: A 1350 REAL(KIND(1.d0)) :: x (:) 1351 INTEGER :: incx 1352 REAL(KIND(1.d0)) :: y (:) 1353 INTEGER :: incy 1354 1355 1356 istat = blas_sparse_const_success 1357 CALL blas_dusmv& 1358 &(transA,alpha,A,x,incx,y,incy,istat) 1359 1360 IF(istat.NE.blas_sparse_const_success)& 1361 &istat = blas_sparse_const_failure 1362 END SUBROUTINE 1363 1364 1365 !> \rsb_spblasl2_mv_msg\rsb_spblas_return_msg 1366 !> \rsb_spblas_f_istat_msg 1367 !! 1368 1369 SUBROUTINE cusmv& 1370 &(transA,alpha,A,x,incx,y,incy,istat) 1371 IMPLICIT NONE 1372 INTEGER, INTENT(OUT) ::istat 1373 INTEGER :: transA 1374 COMPLEX(KIND(1.e0)) :: alpha 1375 INTEGER :: A 1376 COMPLEX(KIND(1.e0)) :: x (:) 1377 INTEGER :: incx 1378 COMPLEX(KIND(1.e0)) :: y (:) 1379 INTEGER :: incy 1380 1381 1382 istat = blas_sparse_const_success 1383 CALL blas_cusmv& 1384 &(transA,alpha,A,x,incx,y,incy,istat) 1385 1386 IF(istat.NE.blas_sparse_const_success)& 1387 &istat = blas_sparse_const_failure 1388 END SUBROUTINE 1389 1390 1391 !> \rsb_spblasl2_mv_msg\rsb_spblas_return_msg 1392 !> \rsb_spblas_f_istat_msg 1393 !! 1394 1395 SUBROUTINE zusmv& 1396 &(transA,alpha,A,x,incx,y,incy,istat) 1397 IMPLICIT NONE 1398 INTEGER, INTENT(OUT) ::istat 1399 INTEGER :: transA 1400 COMPLEX(KIND(1.d0)) :: alpha 1401 INTEGER :: A 1402 COMPLEX(KIND(1.d0)) :: x (:) 1403 INTEGER :: incx 1404 COMPLEX(KIND(1.d0)) :: y (:) 1405 INTEGER :: incy 1406 1407 1408 istat = blas_sparse_const_success 1409 CALL blas_zusmv& 1410 &(transA,alpha,A,x,incx,y,incy,istat) 1411 1412 IF(istat.NE.blas_sparse_const_success)& 1413 &istat = blas_sparse_const_failure 1414 END SUBROUTINE 1415 1416 1417 1418 1419 !> \rsb_spblasl2_sv_msg\rsb_spblas_return_msg 1420 !> \rsb_spblas_f_istat_msg 1421 !! 1422 1423 SUBROUTINE sussv& 1424 &(transT,alpha,T,x,incx,istat) 1425 IMPLICIT NONE 1426 INTEGER, INTENT(OUT) ::istat 1427 INTEGER :: transT 1428 REAL(KIND(1.e0)) :: alpha 1429 INTEGER :: T 1430 REAL(KIND(1.e0)) :: x (:) 1431 INTEGER :: incx 1432 1433 1434 istat = blas_sparse_const_success 1435 CALL blas_sussv& 1436 &(transT,alpha,T,x,incx,istat) 1437 1438 IF(istat.NE.blas_sparse_const_success)& 1439 &istat = blas_sparse_const_failure 1440 END SUBROUTINE 1441 1442 1443 !> \rsb_spblasl2_sv_msg\rsb_spblas_return_msg 1444 !> \rsb_spblas_f_istat_msg 1445 !! 1446 1447 SUBROUTINE dussv& 1448 &(transT,alpha,T,x,incx,istat) 1449 IMPLICIT NONE 1450 INTEGER, INTENT(OUT) ::istat 1451 INTEGER :: transT 1452 REAL(KIND(1.d0)) :: alpha 1453 INTEGER :: T 1454 REAL(KIND(1.d0)) :: x (:) 1455 INTEGER :: incx 1456 1457 1458 istat = blas_sparse_const_success 1459 CALL blas_dussv& 1460 &(transT,alpha,T,x,incx,istat) 1461 1462 IF(istat.NE.blas_sparse_const_success)& 1463 &istat = blas_sparse_const_failure 1464 END SUBROUTINE 1465 1466 1467 !> \rsb_spblasl2_sv_msg\rsb_spblas_return_msg 1468 !> \rsb_spblas_f_istat_msg 1469 !! 1470 1471 SUBROUTINE cussv& 1472 &(transT,alpha,T,x,incx,istat) 1473 IMPLICIT NONE 1474 INTEGER, INTENT(OUT) ::istat 1475 INTEGER :: transT 1476 COMPLEX(KIND(1.e0)) :: alpha 1477 INTEGER :: T 1478 COMPLEX(KIND(1.e0)) :: x (:) 1479 INTEGER :: incx 1480 1481 1482 istat = blas_sparse_const_success 1483 CALL blas_cussv& 1484 &(transT,alpha,T,x,incx,istat) 1485 1486 IF(istat.NE.blas_sparse_const_success)& 1487 &istat = blas_sparse_const_failure 1488 END SUBROUTINE 1489 1490 1491 !> \rsb_spblasl2_sv_msg\rsb_spblas_return_msg 1492 !> \rsb_spblas_f_istat_msg 1493 !! 1494 1495 SUBROUTINE zussv& 1496 &(transT,alpha,T,x,incx,istat) 1497 IMPLICIT NONE 1498 INTEGER, INTENT(OUT) ::istat 1499 INTEGER :: transT 1500 COMPLEX(KIND(1.d0)) :: alpha 1501 INTEGER :: T 1502 COMPLEX(KIND(1.d0)) :: x (:) 1503 INTEGER :: incx 1504 1505 1506 istat = blas_sparse_const_success 1507 CALL blas_zussv& 1508 &(transT,alpha,T,x,incx,istat) 1509 1510 IF(istat.NE.blas_sparse_const_success)& 1511 &istat = blas_sparse_const_failure 1512 END SUBROUTINE 1513 1514 1515 1516 1517 !> \rsb_spblasl2_mm_msg\rsb_spblas_return_msg 1518 !> \rsb_spblas_f_istat_msg 1519 !! 1520 1521 SUBROUTINE susmm& 1522 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1523 IMPLICIT NONE 1524 INTEGER, INTENT(OUT) ::istat 1525 INTEGER :: order 1526 INTEGER :: transA 1527 INTEGER :: nrhs 1528 REAL(KIND(1.e0)) :: alpha 1529 INTEGER :: A 1530 REAL(KIND(1.e0)) :: b (:,:) 1531 INTEGER :: ldb 1532 REAL(KIND(1.e0)) :: c (:,:) 1533 INTEGER :: ldc 1534 1535 1536 istat = blas_sparse_const_success 1537 CALL blas_susmm& 1538 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1539 1540 IF(istat.NE.blas_sparse_const_success)& 1541 &istat = blas_sparse_const_failure 1542 END SUBROUTINE 1543 1544 1545 !> \rsb_spblasl2_mm_msg\rsb_spblas_return_msg 1546 !> \rsb_spblas_f_istat_msg 1547 !! 1548 1549 SUBROUTINE dusmm& 1550 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1551 IMPLICIT NONE 1552 INTEGER, INTENT(OUT) ::istat 1553 INTEGER :: order 1554 INTEGER :: transA 1555 INTEGER :: nrhs 1556 REAL(KIND(1.d0)) :: alpha 1557 INTEGER :: A 1558 REAL(KIND(1.d0)) :: b (:,:) 1559 INTEGER :: ldb 1560 REAL(KIND(1.d0)) :: c (:,:) 1561 INTEGER :: ldc 1562 1563 1564 istat = blas_sparse_const_success 1565 CALL blas_dusmm& 1566 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1567 1568 IF(istat.NE.blas_sparse_const_success)& 1569 &istat = blas_sparse_const_failure 1570 END SUBROUTINE 1571 1572 1573 !> \rsb_spblasl2_mm_msg\rsb_spblas_return_msg 1574 !> \rsb_spblas_f_istat_msg 1575 !! 1576 1577 SUBROUTINE cusmm& 1578 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1579 IMPLICIT NONE 1580 INTEGER, INTENT(OUT) ::istat 1581 INTEGER :: order 1582 INTEGER :: transA 1583 INTEGER :: nrhs 1584 COMPLEX(KIND(1.e0)) :: alpha 1585 INTEGER :: A 1586 COMPLEX(KIND(1.e0)) :: b (:,:) 1587 INTEGER :: ldb 1588 COMPLEX(KIND(1.e0)) :: c (:,:) 1589 INTEGER :: ldc 1590 1591 1592 istat = blas_sparse_const_success 1593 CALL blas_cusmm& 1594 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1595 1596 IF(istat.NE.blas_sparse_const_success)& 1597 &istat = blas_sparse_const_failure 1598 END SUBROUTINE 1599 1600 1601 !> \rsb_spblasl2_mm_msg\rsb_spblas_return_msg 1602 !> \rsb_spblas_f_istat_msg 1603 !! 1604 1605 SUBROUTINE zusmm& 1606 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1607 IMPLICIT NONE 1608 INTEGER, INTENT(OUT) ::istat 1609 INTEGER :: order 1610 INTEGER :: transA 1611 INTEGER :: nrhs 1612 COMPLEX(KIND(1.d0)) :: alpha 1613 INTEGER :: A 1614 COMPLEX(KIND(1.d0)) :: b (:,:) 1615 INTEGER :: ldb 1616 COMPLEX(KIND(1.d0)) :: c (:,:) 1617 INTEGER :: ldc 1618 1619 1620 istat = blas_sparse_const_success 1621 CALL blas_zusmm& 1622 &(order,transA,nrhs,alpha,A,b,ldb,c,ldc,istat) 1623 1624 IF(istat.NE.blas_sparse_const_success)& 1625 &istat = blas_sparse_const_failure 1626 END SUBROUTINE 1627 1628 1629 1630 1631 !> \rsb_spblasl2_sm_msg\rsb_spblas_return_msg 1632 !> \rsb_spblas_f_istat_msg 1633 !! 1634 1635 SUBROUTINE sussm& 1636 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1637 IMPLICIT NONE 1638 INTEGER, INTENT(OUT) ::istat 1639 INTEGER :: order 1640 INTEGER :: transT 1641 INTEGER :: nrhs 1642 REAL(KIND(1.e0)) :: alpha 1643 INTEGER :: T 1644 REAL(KIND(1.e0)) :: b (:,:) 1645 INTEGER :: ldb 1646 1647 1648 istat = blas_sparse_const_success 1649 CALL blas_sussm& 1650 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1651 1652 IF(istat.NE.blas_sparse_const_success)& 1653 &istat = blas_sparse_const_failure 1654 END SUBROUTINE 1655 1656 1657 !> \rsb_spblasl2_sm_msg\rsb_spblas_return_msg 1658 !> \rsb_spblas_f_istat_msg 1659 !! 1660 1661 SUBROUTINE dussm& 1662 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1663 IMPLICIT NONE 1664 INTEGER, INTENT(OUT) ::istat 1665 INTEGER :: order 1666 INTEGER :: transT 1667 INTEGER :: nrhs 1668 REAL(KIND(1.d0)) :: alpha 1669 INTEGER :: T 1670 REAL(KIND(1.d0)) :: b (:,:) 1671 INTEGER :: ldb 1672 1673 1674 istat = blas_sparse_const_success 1675 CALL blas_dussm& 1676 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1677 1678 IF(istat.NE.blas_sparse_const_success)& 1679 &istat = blas_sparse_const_failure 1680 END SUBROUTINE 1681 1682 1683 !> \rsb_spblasl2_sm_msg\rsb_spblas_return_msg 1684 !> \rsb_spblas_f_istat_msg 1685 !! 1686 1687 SUBROUTINE cussm& 1688 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1689 IMPLICIT NONE 1690 INTEGER, INTENT(OUT) ::istat 1691 INTEGER :: order 1692 INTEGER :: transT 1693 INTEGER :: nrhs 1694 COMPLEX(KIND(1.e0)) :: alpha 1695 INTEGER :: T 1696 COMPLEX(KIND(1.e0)) :: b (:,:) 1697 INTEGER :: ldb 1698 1699 1700 istat = blas_sparse_const_success 1701 CALL blas_cussm& 1702 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1703 1704 IF(istat.NE.blas_sparse_const_success)& 1705 &istat = blas_sparse_const_failure 1706 END SUBROUTINE 1707 1708 1709 !> \rsb_spblasl2_sm_msg\rsb_spblas_return_msg 1710 !> \rsb_spblas_f_istat_msg 1711 !! 1712 1713 SUBROUTINE zussm& 1714 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1715 IMPLICIT NONE 1716 INTEGER, INTENT(OUT) ::istat 1717 INTEGER :: order 1718 INTEGER :: transT 1719 INTEGER :: nrhs 1720 COMPLEX(KIND(1.d0)) :: alpha 1721 INTEGER :: T 1722 COMPLEX(KIND(1.d0)) :: b (:,:) 1723 INTEGER :: ldb 1724 1725 1726 istat = blas_sparse_const_success 1727 CALL blas_zussm& 1728 &(order,transT,nrhs,alpha,T,b,ldb,istat) 1729 1730 IF(istat.NE.blas_sparse_const_success)& 1731 &istat = blas_sparse_const_failure 1732 END SUBROUTINE 1733 1734 1735 1736 END MODULE blas_sparse 1737