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