40{
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257 char conjg, * one, top, * zero;
258 Int Afr, Bcol, Bcurcol, Bcurimb1, Bcurinb1, Bcurrow, Bfr, Bii,
259 Bimb, Bimb1, Binb, Binb1, Bjj, Bld, Bmb, Bmp, Bmp0, Bnb, Bnq,
260 Bnq0, Brow, WAfr, WBfr, WBsum, ctxt, k, kb, kbb, ktmp, lside,
261 mycol, myrow, notran, npcol, nprow, size, unit, upper;
262
263
264
267 char * Aptr = NULL, * Bptr = NULL, * Bptr0 = NULL, * WA = NULL,
268 * WB = NULL;
271
272
273
274
280 gsum2d =
TYPE->Cgsum2d; gemm =
TYPE->Fgemm;
282
283
284
286
287
288
289 Bimb = DESCB[
IMB_]; Binb = DESCB[
INB_];
290 Bmb = DESCB[
MB_ ]; Bnb = DESCB[
NB_ ]; Bld = DESCB[
LLD_];
291 PB_Cinfog2l( IB, JB, DESCB, nprow, npcol, myrow, mycol, &Bii, &Bjj, &Brow,
292 &Bcol );
294 Bmp0 =
PB_Cnumroc( M, 0, Bimb1, Bmb, myrow, Brow, nprow );
296 Bnq0 =
PB_Cnumroc( N, 0, Binb1, Bnb, mycol, Bcol, npcol );
297 if( ( Bmp0 > 0 ) && ( Bnq0 > 0 ) ) Bptr0 =
Mptr( B, Bii, Bjj, Bld, size );
298
299 if( notran )
300 {
301 if( lside )
302 {
303 if( upper )
304 {
305 for( k = 0; k < M; k += kb )
306 {
307 kbb = M - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
308
309
310
312 DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
313
314
315
316
317 PB_Cdescset( Bd0, ktmp, N, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
318 ctxt, Bld );
319 PB_CInV(
TYPE,
NOCONJG,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
320 DBUFA,
COLUMN, &WA, WAd, &WAfr );
321
322
323
324 if( unit )
326 WA, k, 0, WAd );
327 else if( kbb > 1 )
329 WA, k+1, 0, WAd );
330
331
332
334 ROW, &Bptr, DBUFB, &Bfr );
335
336
337
338
339 PB_CInV(
TYPE,
NOCONJG,
ROW, ktmp, N, Bd0, kbb, Bptr, 0, 0,
340 DBUFB,
ROW, &WB, WBd, &WBfr );
341
342
343
344 PB_Cplapad(
TYPE,
ALL,
NOCONJG, kbb, N, zero, zero, B, IB+k, JB,
345 DESCB );
346
347
348
349 Bmp =
PB_Cnumroc( ktmp, 0, Bimb1, Bmb, myrow, Brow, nprow );
350 if( ( Bmp > 0 ) && ( Bnq0 > 0 ) )
352 &kbb, ALPHA, WA, &WAd[
LLD_], WB, &WBd[
LLD_], one, Bptr0,
353 &Bld );
354
355 if( WBfr ) free( WB );
356 if( WAfr ) free( WA );
357 if( Bfr ) free( Bptr );
358 if( Afr ) free( Aptr );
359 }
360 }
361 else
362 {
363 for( k = ( ( M - 1 ) / kb ) * kb; k >= 0; k -= kb )
364 {
365 ktmp = M - k; kbb =
MIN( ktmp, kb );
366
367
368
370 DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
371
372
373
374
376 Bcurrow =
PB_Cindxg2p( k, Bimb1, Bmb, Brow, Brow, nprow );
377 PB_Cdescset( Bd0, ktmp, N, Bcurimb1, Binb1, Bmb, Bnb, Bcurrow,
378 Bcol, ctxt, Bld );
379 PB_CInV(
TYPE,
NOCONJG,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
380 DBUFA,
COLUMN, &WA, WAd, &WAfr );
381
382
383
384 if( unit )
386 WA, 0, 0, WAd );
387 else if( kbb > 1 )
389 WA, 0, 1, WAd );
390
391
392
394 DESCB,
ROW, &Bptr, DBUFB, &Bfr );
395
396
397
398
399 PB_CInV(
TYPE,
NOCONJG,
ROW, ktmp, N, Bd0, kbb, Bptr, 0, 0,
400 DBUFB,
ROW, &WB, WBd, &WBfr );
401
402
403
404 PB_Cplapad(
TYPE,
ALL,
NOCONJG, kbb, N, zero, zero, B, IB+k, JB,
405 DESCB );
406
407
408
409 Bmp =
PB_Cnumroc( ktmp, k, Bimb1, Bmb, myrow, Brow, nprow );
410 if( ( Bmp > 0 ) && ( Bnq0 > 0 ) )
412 &kbb, ALPHA, WA, &WAd[
LLD_], WB, &WBd[
LLD_], one,
413 Mptr( Bptr0, Bmp0-Bmp, 0, Bld, size ), &Bld );
414
415 if( WBfr ) free( WB );
416 if( WAfr ) free( WA );
417 if( Bfr ) free( Bptr );
418 if( Afr ) free( Aptr );
419 }
420 }
421 }
422 else
423 {
424 if( upper )
425 {
426 for( k = ( ( N - 1 ) / kb ) * kb; k >= 0; k -= kb )
427 {
428 ktmp = N - k; kbb =
MIN( ktmp, kb );
429
430
431
433 DESCA,
ROW, &Aptr, DBUFA, &Afr );
434
435
436
437
439 Bcurcol =
PB_Cindxg2p( k, Binb1, Bnb, Bcol, Bcol, npcol );
440 PB_Cdescset( Bd0, M, ktmp, Bimb1, Bcurinb1, Bmb, Bnb, Brow,
441 Bcurcol, ctxt, Bld );
442 PB_CInV(
TYPE,
NOCONJG,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
443 DBUFA,
ROW, &WA, WAd, &WAfr );
444
445
446
447 if( unit )
449 WA, 0, 0, WAd );
450 else if( kbb > 1 )
452 WA, 1, 0, WAd );
453
454
455
457 DESCB,
COLUMN, &Bptr, DBUFB, &Bfr );
458
459
460
461
462 PB_CInV(
TYPE,
NOCONJG,
COLUMN, M, ktmp, Bd0, kbb, Bptr, 0, 0,
463 DBUFB,
COLUMN, &WB, WBd, &WBfr );
464
465
466
467 PB_Cplapad(
TYPE,
ALL,
NOCONJG, M, kbb, zero, zero, B, IB, JB+k,
468 DESCB );
469
470
471
472 Bnq =
PB_Cnumroc( ktmp, k, Binb1, Bnb, mycol, Bcol, npcol );
473 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
475 &kbb, ALPHA, WB, &WBd[
LLD_], WA, &WAd[
LLD_], one,
476 Mptr( Bptr0, 0, Bnq0-Bnq, Bld, size ), &Bld );
477
478 if( WBfr ) free( WB );
479 if( WAfr ) free( WA );
480 if( Bfr ) free( Bptr );
481 if( Afr ) free( Aptr );
482 }
483 }
484 else
485 {
486 for( k = 0; k < N; k += kb )
487 {
488 kbb = N - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
489
490
491
493 DESCA,
ROW, &Aptr, DBUFA, &Afr );
494
495
496
497
498 PB_Cdescset( Bd0, M, ktmp, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
499 ctxt, Bld );
500 PB_CInV(
TYPE,
NOCONJG,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
501 DBUFA,
ROW, &WA, WAd, &WAfr );
502
503
504
505 if( unit )
507 WA, 0, k, WAd );
508 else if( kbb > 1 )
510 WA, 0, k+1, WAd );
511
512
513
515 COLUMN, &Bptr, DBUFB, &Bfr );
516
517
518
519
520 PB_CInV(
TYPE,
NOCONJG,
COLUMN, M, ktmp, Bd0, kbb, Bptr, 0, 0,
521 DBUFB,
COLUMN, &WB, WBd, &WBfr );
522
523
524
525 PB_Cplapad(
TYPE,
ALL,
NOCONJG, M, kbb, zero, zero, B, IB, JB+k,
526 DESCB );
527
528
529
530 Bnq =
PB_Cnumroc( ktmp, 0, Binb1, Bnb, mycol, Bcol, npcol );
531 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
533 &kbb, ALPHA, WB, &WBd[
LLD_], WA, &WAd[
LLD_], one, Bptr0,
534 &Bld );
535
536 if( WBfr ) free( WB );
537 if( WAfr ) free( WA );
538 if( Bfr ) free( Bptr );
539 if( Afr ) free( Aptr );
540 }
541 }
542 }
543 }
544 else
545 {
547 {
548
549
550
552
553 if( lside )
554 {
555 if( !upper )
556 {
557 for( k = 0; k < M; k += kb )
558 {
559 kbb = M - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
560
561
562
564 DESCA,
ROW, &Aptr, DBUFA, &Afr );
565
566
567
568
569 PB_Cdescset( Bd0, ktmp, N, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
570 ctxt, Bld );
571 PB_CInV(
TYPE, &conjg,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
572 DBUFA,
ROW, &WA, WAd, &WAfr );
573
574
575
576 if( unit )
578 WA, k, 0, WAd );
579 else if( kbb > 1 )
581 WA, k+1, 0, WAd );
582
583
584
586 DESCB,
ROW, &Bptr, DBUFB, &Bfr );
587
588
589
590
591 PB_CInV(
TYPE,
NOCONJG,
ROW, ktmp, N, Bd0, kbb, Bptr, 0, 0,
592 DBUFB,
ROW, &WB, WBd, &WBfr );
593
594
595
597 JB, DESCB );
598
599
600
601 Bmp =
PB_Cnumroc( ktmp, 0, Bimb1, Bmb, myrow, Brow, nprow );
602 if( ( Bmp > 0 ) && ( Bnq0 > 0 ) )
604 &kbb, ALPHA, WA, &WAd[
LLD_], WB, &WBd[
LLD_], one,
605 Bptr0, &Bld );
606
607 if( WBfr ) free( WB );
608 if( WAfr ) free( WA );
609 if( Bfr ) free( Bptr );
610 if( Afr ) free( Aptr );
611 }
612 }
613 else
614 {
615 for( k = ( ( M - 1 ) / kb ) * kb; k >= 0; k -= kb )
616 {
617 ktmp = M - k; kbb =
MIN( ktmp, kb );
618
619
620
622 JA+k, DESCA,
ROW, &Aptr, DBUFA, &Afr );
623
624
625
626
628 Bcurrow =
PB_Cindxg2p( k, Bimb1, Bmb, Brow, Brow, nprow );
629 PB_Cdescset( Bd0, ktmp, N, Bcurimb1, Binb1, Bmb, Bnb, Bcurrow,
630 Bcol, ctxt, Bld );
631 PB_CInV(
TYPE, &conjg,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
632 DBUFA,
ROW, &WA, WAd, &WAfr );
633
634
635
636 if( unit )
638 WA, 0, 0, WAd );
639 else if( kbb > 1 )
641 WA, 0, 1, WAd );
642
643
644
646 DESCB,
ROW, &Bptr, DBUFB, &Bfr );
647
648
649
650
651 PB_CInV(
TYPE,
NOCONJG,
ROW, ktmp, N, Bd0, kbb, Bptr, 0, 0,
652 DBUFB,
ROW, &WB, WBd, &WBfr );
653
654
655
657 JB, DESCB );
658
659
660
661 Bmp =
PB_Cnumroc( ktmp, k, Bimb1, Bmb, myrow, Brow, nprow );
662 if( ( Bmp > 0 ) && ( Bnq0 > 0 ) )
664 &kbb, ALPHA, WA, &WAd[
LLD_], WB, &WBd[
LLD_], one,
665 Mptr( Bptr0, Bmp0-Bmp, 0, Bld, size ), &Bld );
666
667 if( WBfr ) free( WB );
668 if( WAfr ) free( WA );
669 if( Bfr ) free( Bptr );
670 if( Afr ) free( Aptr );
671 }
672 }
673 }
674 else
675 {
676 if( !upper )
677 {
678 for( k = ( ( N - 1 ) / kb ) * kb; k >= 0; k -= kb )
679 {
680 ktmp = N - k; kbb =
MIN( ktmp, kb );
681
682
683
685 JA+k, DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
686
687
688
689
691 Bcurcol =
PB_Cindxg2p( k, Binb1, Bnb, Bcol, Bcol, npcol );
692 PB_Cdescset( Bd0, M, ktmp, Bimb1, Bcurinb1, Bmb, Bnb, Brow,
693 Bcurcol, ctxt, Bld );
694 PB_CInV(
TYPE, &conjg,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
695 DBUFA,
COLUMN, &WA, WAd, &WAfr );
696
697
698
699 if( unit )
701 WA, 0, 0, WAd );
702 else if( kbb > 1 )
704 WA, 1, 0, WAd );
705
706
707
709 DESCB,
COLUMN, &Bptr, DBUFB, &Bfr );
710
711
712
713
714 PB_CInV(
TYPE,
NOCONJG,
COLUMN, M, ktmp, Bd0, kbb, Bptr, 0, 0,
715 DBUFB,
COLUMN, &WB, WBd, &WBfr );
716
717
718
720 JB+k, DESCB );
721
722
723
724 Bnq =
PB_Cnumroc( ktmp, k, Binb1, Bnb, mycol, Bcol, npcol );
725 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
727 &kbb, ALPHA, WB, &WBd[
LLD_], WA, &WAd[
LLD_], one,
728 Mptr( Bptr0, 0, Bnq0-Bnq, Bld, size ), &Bld );
729
730 if( WBfr ) free( WB );
731 if( WAfr ) free( WA );
732 if( Bfr ) free( Bptr );
733 if( Afr ) free( Aptr );
734 }
735 }
736 else
737 {
738 for( k = 0; k < N; k += kb )
739 {
740 kbb = N - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
741
742
743
745 DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
746
747
748
749
750 PB_Cdescset( Bd0, M, ktmp, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
751 ctxt, Bld );
752 PB_CInV(
TYPE, &conjg,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
753 DBUFA,
COLUMN, &WA, WAd, &WAfr );
754
755
756
757 if( unit )
759 WA, 0, k, WAd );
760 else if( kbb > 1 )
762 WA, 0, k+1, WAd );
763
764
765
767 DESCB,
COLUMN, &Bptr, DBUFB, &Bfr );
768
769
770
771
772 PB_CInV(
TYPE,
NOCONJG,
COLUMN, M, ktmp, Bd0, kbb, Bptr, 0, 0,
773 DBUFB,
COLUMN, &WB, WBd, &WBfr );
774
775
776
778 JB+k, DESCB );
779
780
781
782 Bnq =
PB_Cnumroc( ktmp, 0, Binb1, Bnb, mycol, Bcol, npcol );
783 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
785 &kbb, ALPHA, WB, &WBd[
LLD_], WA, &WAd[
LLD_], one,
786 Bptr0, &Bld );
787
788 if( WBfr ) free( WB );
789 if( WAfr ) free( WA );
790 if( Bfr ) free( Bptr );
791 if( Afr ) free( Aptr );
792 }
793 }
794 }
795 }
796 else
797 {
798
799
800
801 if( lside )
802 {
804
805 if( upper )
806 {
807 for( k = ( ( M - 1 ) / kb ) * kb; k >= 0; k -= kb )
808 {
809 kbb = M - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
810
811
812
814 DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
815
816
817
818
819 PB_Cdescset( Bd0, ktmp, N, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
820 ctxt, Bld );
821 PB_CInV(
TYPE,
NOCONJG,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
822 DBUFA,
COLUMN, &WA, WAd, &WAfr );
823
824
825
826 if( unit )
828 WA, k, 0, WAd );
829 else if( kbb > 1 )
831 WA, k+1, 0, WAd );
832
833
834
835 PB_COutV(
TYPE,
ROW,
INIT, ktmp, N, Bd0, kbb, &WB, WBd, &WBfr,
836 &WBsum );
837 Bmp =
PB_Cnumroc( ktmp, 0, Bimb1, Bmb, myrow, Brow, nprow );
838 if( ( Bnq0 > 0 ) && ( Bmp > 0 ) )
840 &Bmp, ALPHA, WA, &WAd[
LLD_], Bptr0, &Bld, zero, WB,
842 if( WBsum )
843 {
845 nprow );
846 if( Bnq0 > 0 )
847 gsum2d( ctxt,
COLUMN, &top, kbb, Bnq0, WB, WBd[
LLD_],
849 }
850 if( WAfr ) free( WA );
851 if( Afr ) free( Aptr );
852
853
854
855 PB_CScatterV(
TYPE,
FORWARD, kbb, N, WB, 0, 0, WBd,
ROW, zero,
856 B, IB+k, JB, DESCB,
ROW );
857 if( WBfr ) free( WB );
858 }
859 }
860 else
861 {
862 for( k = 0; k < M; k += kb )
863 {
864 ktmp = M - k; kbb =
MIN( ktmp, kb );
865
866
867
869 JA+k, DESCA,
COLUMN, &Aptr, DBUFA, &Afr );
870
871
872
873
875 Bcurrow =
PB_Cindxg2p( k, Bimb1, Bmb, Brow, Brow, nprow );
876 PB_Cdescset( Bd0, ktmp, N, Bcurimb1, Binb1, Bmb, Bnb, Bcurrow,
877 Bcol, ctxt, Bld );
878 PB_CInV(
TYPE,
NOCONJG,
COLUMN, ktmp, N, Bd0, kbb, Aptr, 0, 0,
879 DBUFA,
COLUMN, &WA, WAd, &WAfr );
880
881
882
883 if( unit )
885 WA, 0, 0, WAd );
886 else if( kbb > 1 )
888 WA, 0, 1, WAd );
889
890
891
892 PB_COutV(
TYPE,
ROW,
INIT, ktmp, N, Bd0, kbb, &WB, WBd, &WBfr,
893 &WBsum );
894 Bmp =
PB_Cnumroc( ktmp, k, Bimb1, Bmb, myrow, Brow, nprow );
895 if( ( Bnq0 > 0 ) && ( Bmp > 0 ) )
897 &Bmp, ALPHA, WA, &WAd[
LLD_],
Mptr( Bptr0, Bmp0-Bmp,
898 0, Bld, size ), &Bld, zero, WB, &WBd[
LLD_] );
899 if( WBsum )
900 {
902 Brow, nprow );
903 if( Bnq0 > 0 )
904 gsum2d( ctxt,
COLUMN, &top, kbb, Bnq0, WB, WBd[
LLD_],
906
907 }
908 if( WAfr ) free( WA );
909 if( Afr ) free( Aptr );
910
911
912
914 zero, B, IB+k, JB, DESCB,
ROW );
915 if( WBfr ) free( WB );
916 }
917 }
918 }
919 else
920 {
922
923 if( upper )
924 {
925 for( k = 0; k < N; k += kb )
926 {
927 ktmp = N - k; kbb =
MIN( ktmp, kb );
928
929
930
932 JA+k, DESCA,
ROW, &Aptr, DBUFA, &Afr );
933
934
935
936
938 Bcurcol =
PB_Cindxg2p( k, Binb1, Bnb, Bcol, Bcol, npcol );
939 PB_Cdescset( Bd0, M, ktmp, Bimb1, Bcurinb1, Bmb, Bnb, Brow,
940 Bcurcol, ctxt, Bld );
941 PB_CInV(
TYPE,
NOCONJG,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
942 DBUFA,
ROW, &WA, WAd, &WAfr );
943
944
945
946 if( unit )
948 WA, 0, 0, WAd );
949 else if( kbb > 1 )
951 WA, 1, 0, WAd );
952
953
954
956 &WBfr, &WBsum );
957 Bnq =
PB_Cnumroc( ktmp, k, Binb1, Bnb, mycol, Bcol, npcol );
958 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
960 &Bnq, ALPHA,
Mptr( Bptr0, 0, Bnq0-Bnq, Bld, size ),
961 &Bld, WA, &WAd[
LLD_], zero, WB, &WBd[
LLD_] );
962 if( WBsum )
963 {
965 Bcol, npcol );
966 if( Bmp0 > 0 )
967 gsum2d( ctxt,
ROW, &top, Bmp0, kbb, WB, WBd[
LLD_],
969 }
970 if( WAfr ) free( WA );
971 if( Afr ) free( Aptr );
972
973
974
976 zero, B, IB, JB+k, DESCB,
COLUMN );
977 if( WBfr ) free( WB );
978 }
979 }
980 else
981 {
982 for( k = ( ( N - 1 ) / kb ) * kb; k >= 0; k -= kb )
983 {
984 kbb = N - k; kbb =
MIN( kbb, kb ); ktmp = k + kbb;
985
986
987
989 DESCA,
ROW, &Aptr, DBUFA, &Afr );
990
991
992
993
994 PB_Cdescset( Bd0, M, ktmp, Bimb1, Binb1, Bmb, Bnb, Brow, Bcol,
995 ctxt, Bld );
996 PB_CInV(
TYPE,
NOCONJG,
ROW, M, ktmp, Bd0, kbb, Aptr, 0, 0,
997 DBUFA,
ROW, &WA, WAd, &WAfr );
998
999
1000
1001 if( unit )
1003 WA, 0, k, WAd );
1004 else if( kbb > 1 )
1006 WA, 0, k+1, WAd );
1007
1008
1009
1011 &WBfr, &WBsum );
1012 Bnq =
PB_Cnumroc( ktmp, 0, Binb1, Bnb, mycol, Bcol, npcol );
1013 if( ( Bmp0 > 0 ) && ( Bnq > 0 ) )
1015 &Bnq, ALPHA, Bptr0, &Bld, WA, &WAd[
LLD_], zero, WB,
1017 if( WBsum )
1018 {
1020 npcol );
1021 if( Bmp0 > 0 )
1022 gsum2d( ctxt,
ROW, &top, Bmp0, kbb, WB, WBd[
LLD_],
1023 myrow, WBd[
CSRC_] );
1024 }
1025 if( WAfr ) free( WA );
1026 if( Afr ) free( Aptr );
1027
1028
1029
1031 zero, B, IB, JB+k, DESCB,
COLUMN );
1032 if( WBfr ) free( WB );
1033 }
1034 }
1035 }
1036 }
1037 }
1038
1039
1040
1041}