39{
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 char btop, * negone, * one, * talpha1, * talpha2, * zero;
255 Int Acol, Aii, Aimb1, Ainb1, Ais1Col, Ais1Row, AisColRep,
256 AisRowRep, Ajj, Alcol, Ald, Alrow, Amb, Anpprev, Anb, Anp,
257 Anq, Arow, Asrc, ChangeRoc=0, LNorRT, Na, Nb, bcst, ctxt,
258 izero=0, k=0, kb, kbprev=0, kbsize, lside, mb1, mycol, myrow,
259 n1, n1last, n1p, n1pprev=0, nb1, nlast, notran, npcol, nprow,
260 rocprev, size, tmp1, tmp2;
269
270
271
272 char * Aprev = NULL, * Bd = NULL, * Bdprev = NULL,
273 * Bprev = NULL, * work = NULL;
274
275
276
277
278 if( ( M <= 0 ) || ( N <= 0 ) ) return;
279
280
281
283
286 LNorRT = ( lside && notran ) || ( !( lside ) && !( notran ) );
287 if( LNorRT ) { Na = M; Nb = N; } else { Na = N; Nb = M; }
288
289
290
291 PB_Cinfog2l( IA, JA, DESCA, nprow, npcol, myrow, mycol, &Aii, &Ajj, &Arow,
292 &Acol );
293
294
295
296
297 Amb = DESCA[
MB_]; Anb = DESCA[
NB_]; Ald = DESCA[
LLD_ ];
299 Anp =
PB_Cnumroc( Na, 0, Aimb1, Amb, myrow, Arow, nprow );
300 Ais1Row = !(
PB_Cspan( Na, 0, Aimb1, Amb, Arow, nprow ) );
302 Anq =
PB_Cnumroc( Na, 0, Ainb1, Anb, mycol, Acol, npcol );
303 Ais1Col = !(
PB_Cspan( Na, 0, Ainb1, Anb, Acol, npcol ) );
304
305
306
307 if( Ais1Row && Ais1Col )
308 {
309 if( LNorRT )
310 {
311 if( Anq > 0 )
312 {
313 if( Anp > 0 )
314 {
318 Ald,
TYPE->size ), &Ald, BC, &LDBC );
319 TYPE->Fmmtadd( &M, &N,
TYPE->one, BC, &LDBC,
TYPE->zero, BR,
320 &LDBR );
321 }
322 if( ( Arow >= 0 ) && FBCAST )
323 {
325 if( myrow == Arow )
326 TYPE->Cgebs2d( ctxt,
COLUMN, &btop, N, M, BR, LDBR );
327 else
328 TYPE->Cgebr2d( ctxt,
COLUMN, &btop, N, M, BR, LDBR, Arow,
329 mycol );
330 }
331 }
332 }
333 else
334 {
335 if( Anp > 0 )
336 {
337 if( Anq > 0 )
338 {
342 Ald,
TYPE->size ), &Ald, BR, &LDBR );
343 TYPE->Fmmtadd( &M, &N,
TYPE->one, BR, &LDBR,
TYPE->zero, BC,
344 &LDBC );
345 }
346 if( ( Acol >= 0 ) && FBCAST )
347 {
349 if( mycol == Acol )
350 TYPE->Cgebs2d( ctxt,
ROW, &btop, N, M, BC, LDBC );
351 else
352 TYPE->Cgebr2d( ctxt,
ROW, &btop, N, M, BC, LDBC, myrow,
353 Acol );
354 }
355 }
356 }
357 return;
358 }
359
360
361
363 negone =
TYPE->negone; one =
TYPE->one; zero =
TYPE->zero;
364 add =
TYPE->Fmmadd; tadd =
TYPE->Fmmtadd; pad =
TYPE->Ftzpad;
365 gemm =
TYPE->Fgemm; trsm =
TYPE->Ftrsm;
366 send =
TYPE->Cgesd2d; recv =
TYPE->Cgerv2d;
367 bsend =
TYPE->Cgebs2d; brecv =
TYPE->Cgebr2d;
368
369 if( ( Anp > 0 ) && ( Anq > 0 ) ) A =
Mptr( A, Aii, Ajj, Ald, size );
370
371 if( LNorRT )
372 {
373
374
375
376 if( ( Anq <= 0 ) || ( Ais1Row && ( ( Arow >= 0 ) && !( FBCAST ) &&
377 ( myrow != Arow ) ) ) ) return;
379 bcst = ( ( !Ais1Row ) || ( Ais1Row && ( Arow >= 0 ) && FBCAST ) );
380 AisRowRep = ( ( Arow < 0 ) || ( nprow == 1 ) );
381
383 {
384
385
386
387 nlast = ( npcol - 1 ) * Anb;
388 n1 =
MAX( nlast, Anb );
389 nlast += Ainb1;
390 n1last = n1 - Anb +
MAX( Ainb1, Anb );
392 tmp1 = Na-1;
393 Alrow =
PB_Cindxg2p( tmp1, Aimb1, Amb, Arow, Arow, nprow );
394 Alcol =
PB_Cindxg2p( tmp1, Ainb1, Anb, Acol, Acol, npcol );
395 rocprev = Alcol; Anpprev = Anp; Bprev = BC; Bdprev = BR;
396 Aprev = A =
Mptr( A, 0, Anq, Ald, size );
399 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) );
400 n1 = ( ( Ais1Col || ( Na - nb1 < nlast ) ) ? n1last : n1 );
401 tmp2 = n1 + nb1 - kb; tmp1 -= ( tmp2 =
MIN( tmp1, tmp2 ) );
402 Asrc = Arow;
403 n1p =
PB_Cnumroc( tmp2,
MAX( 0, tmp1 ), Aimb1, Amb, myrow, Asrc,
404 nprow );
405 talpha1 = talpha2 = ( ( Ais1Col || ( mycol == Alcol ) ) ?
406 ALPHA : one );
407 while( Na > 0 )
408 {
409 kbsize = kb * size;
410
411 if( Ais1Col || ( mycol == Alcol ) )
412 { A -= Ald*kbsize; Anq -= kb; Bd =
Mptr( BR, 0, Anq, LDBR, size ); }
413 if( ( Arow < 0 ) || ( myrow == Alrow ) ) { Anp -= kb; }
414
415
416
417 if( n1pprev > 0 )
418 {
419 if( ( Ais1Col || ( mycol == rocprev ) ) && ( kbprev > 0 ) )
420 {
421 tmp1 = ( Anpprev - n1pprev ) * size;
423 &kbprev, negone, Aprev+tmp1, &Ald, Bdprev, &LDBR,
424 talpha1, Bprev+tmp1, &LDBC );
425 }
426
427
428
429 if( !( Ais1Col ) && ChangeRoc )
430 {
431 if( mycol == rocprev )
432 {
433 send( ctxt, n1pprev, Nb,
Mptr( Bprev, Anpprev-n1pprev, 0,
434 LDBC, size ), LDBC, myrow, Alcol );
435 }
436 else if( mycol == Alcol )
437 {
438 recv( ctxt, n1pprev, Nb, work, n1pprev, myrow, rocprev );
439 add( &n1pprev, &Nb, one, work, &n1pprev, one,
Mptr( Bprev,
440 Anpprev-n1pprev, 0, LDBC, size ), &LDBC );
441 }
442 }
443 }
444
445
446
447 if( Ais1Col || ( mycol == Alcol ) )
448 {
449 if( AisRowRep || ( myrow == Alrow ) )
450 {
453 Ald, size ), &Ald,
Mptr( BC, Anp, 0, LDBC, size ),
454 &LDBC );
455 tadd( &kb, &Nb, one,
Mptr( BC, Anp, 0, LDBC, size ), &LDBC,
456 zero,
Mptr( BR, 0, Anq, LDBR, size ), &LDBR );
457 }
458 if( bcst )
459 {
460 if( myrow == Alrow )
461 bsend( ctxt,
COLUMN, &btop, Nb, kb,
Mptr( BR, 0, Anq, LDBR,
462 size ), LDBR );
463 else
464 brecv( ctxt,
COLUMN, &btop, Nb, kb,
Mptr( BR, 0, Anq, LDBR,
465 size ), LDBR, Alrow, mycol );
466 }
467 talpha2 = one;
468 }
469 else
470 {
471 if( !( Ais1Col ) && ( AisRowRep || ( myrow == Alrow ) ) )
473 zero, zero,
Mptr( BC, Anp, 0, LDBC, size ), &LDBC );
474 }
475
476
477
478 if( ( Ais1Col || ( mycol == rocprev ) ) && ( kbprev > 0 ) )
479 {
480 if( ( tmp1 = Anpprev - n1pprev ) > 0 )
482 &kbprev, negone, Aprev, &Ald, Bdprev, &LDBR, talpha1,
483 Bprev, &LDBC );
484 talpha1 = one;
485 }
486
487
488
489 if( Ais1Col || ( mycol == Alcol ) ) { Bdprev = Bd; Aprev = A; }
490 if( AisRowRep || ( myrow == Alrow ) ) { Anpprev -= kb; }
491
492 n1pprev = n1p;
493 rocprev = Alcol;
494 kbprev = kb;
495 k += kb;
496 Na -= kb;
497
498 mb1 -= kb;
499 if( mb1 == 0 )
500 {
501 if( !( Ais1Row ) && ( Alrow >= 0 ) )
503 mb1 = ( Na > Aimb1 ? Amb : Aimb1 );
504 }
505
506 nb1 -= kb;
507 ChangeRoc = ( nb1 == 0 );
508
509 if( ChangeRoc )
510 {
511 if( !( Ais1Col ) && ( Alcol >= 0 ) )
513 nb1 = ( Na > Ainb1 ? Anb : Ainb1 );
514 }
515 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) );
516 n1 = ( ( Ais1Col || ( Na-nb1 < nlast ) ) ? n1last : n1 );
517 tmp2 = n1 + nb1 - kb; tmp1 -= ( tmp2 =
MIN( tmp1, tmp2 ) );
518 n1p =
PB_Cnumroc( tmp2,
MAX( 0, tmp1 ), Aimb1, Amb, myrow, Asrc,
519 nprow );
520 }
521 }
522 else
523 {
524
525
526
527 n1 = (
MAX( npcol, 2 ) - 1 ) * Anb;
529 Aprev = A; Bprev = BC, Bdprev = BR; Anpprev = Anp;
530 mb1 = Aimb1; nb1 = Ainb1; rocprev = Acol;
531 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) ); tmp2 = n1 + nb1 - kb;
532 Asrc = Arow;
533 n1p =
PB_Cnumroc(
MIN( tmp1, tmp2 ), kb, Aimb1, Amb, myrow, Asrc,
534 nprow );
535 talpha1 = talpha2 = ( ( Ais1Col || ( mycol == Acol ) ) ?
536 ALPHA : one );
537 while( kb > 0 )
538 {
539 kbsize = kb * size;
540
541
542
543 if( n1pprev > 0 )
544 {
545 if( ( Ais1Col || ( mycol == rocprev ) ) && ( kbprev > 0 ) )
547 &kbprev, negone, Aprev, &Ald, Bdprev, &LDBR, talpha1,
548 Bprev, &LDBC );
549
550
551
552 if( !( Ais1Col ) && ChangeRoc )
553 {
554 if( mycol == rocprev )
555 {
556 send( ctxt, n1pprev, Nb, Bprev, LDBC, myrow, Acol );
557 }
558 else if( mycol == Acol )
559 {
560 recv( ctxt, n1pprev, Nb, work, n1pprev, myrow, rocprev );
561 add( &n1pprev, &Nb, one, work, &n1pprev, one, Bprev,
562 &LDBC );
563 }
564 }
565 }
566
567
568
569 if( Ais1Col || ( mycol == Acol ) )
570 {
571 if( AisRowRep || ( myrow == Arow ) )
572 {
574 C2F_CHAR( DIAG ), &kb, &Nb, talpha2, A, &Ald, BC,
575 &LDBC );
576 tadd( &kb, &Nb, one, BC, &LDBC, zero, BR, &LDBR );
577 }
578 if( bcst )
579 {
580 if( myrow == Arow )
581 bsend( ctxt,
COLUMN, &btop, Nb, kb, BR, LDBR );
582 else
583 brecv( ctxt,
COLUMN, &btop, Nb, kb, BR, LDBR, Arow,
584 mycol );
585 }
586 talpha2 = one;
587 }
588 else
589 {
590 if( !( Ais1Col ) && ( AisRowRep || ( myrow == Arow ) ) )
592 zero, zero, BC, &LDBC );
593 }
594
595
596
597 if( ( Ais1Col || ( mycol == rocprev ) ) && ( kbprev > 0 ) )
598 {
599 if( ( tmp1 = Anpprev - n1pprev ) > 0 )
600 {
601 tmp2 = n1pprev * size;
603 &kbprev, negone, Aprev+tmp2, &Ald, Bdprev, &LDBR,
604 talpha1, Bprev+tmp2, &LDBC );
605 }
606 Aprev += Ald * kbprev * size; talpha1 = one;
607 }
608
609
610
611 if( Ais1Col || ( mycol == Acol ) )
612 { A += Ald*kbsize; Bdprev = Bd = BR; BR += LDBR*kbsize; }
613 if( AisRowRep || ( myrow == Arow ) )
614 {
615 Bprev = ( BC += kbsize );
616 A += kbsize;
617 Aprev += kbsize;
618 Anpprev = ( Anp -= kb );
619 }
620 n1pprev = n1p;
621 rocprev = Acol;
622 kbprev = kb;
623 k += kb;
624 Na -= kb;
625
626 mb1 -= kb;
627 if( mb1 == 0 )
628 {
629 if( !( Ais1Row ) && ( Arow >= 0 ) )
631 mb1 =
MIN( Amb, Na );
632 }
633
634 nb1 -= kb;
635 ChangeRoc = ( nb1 == 0 );
636
637 if( ChangeRoc )
638 {
639 if( !( Ais1Col ) && ( Acol >= 0 ) )
641 nb1 =
MIN( Anb, Na );
642 }
643 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) ); tmp2 = n1 + nb1 - kb;
644 n1p =
PB_Cnumroc(
MIN( tmp2, tmp1 ), k + kb, Aimb1, Amb, myrow,
645 Asrc, nprow );
646 }
647 }
648 }
649 else
650 {
651
652
653
654 if( ( Anp <= 0 ) || ( Ais1Col && ( ( Acol >= 0 ) && !( FBCAST ) &&
655 ( mycol != Acol ) ) ) ) return;
657 bcst = ( ( !Ais1Col ) || ( Ais1Col && ( Acol >= 0 ) && FBCAST ) );
658 AisColRep = ( ( Acol < 0 ) || ( npcol == 1 ) );
659
661 {
662
663
664
665 n1 = (
MAX( nprow, 2 ) - 1 ) * Amb;
667 Aprev = A; Bprev = BR, Bdprev = BC; Anpprev = Anq;
668 mb1 = Aimb1; nb1 = Ainb1; rocprev = Arow;
669 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) ); tmp2 = n1 + mb1 - kb;
670 Asrc = Acol;
671 n1p =
PB_Cnumroc(
MIN( tmp1, tmp2 ), kb, Ainb1, Anb, mycol, Asrc,
672 npcol );
673 talpha1 = talpha2 = ( ( Ais1Row || ( myrow == Arow ) ) ?
674 ALPHA : one );
675 while( kb > 0 )
676 {
677 kbsize = kb * size;
678
679
680
681 if( n1pprev > 0 )
682 {
683 if( ( Ais1Row || ( myrow == rocprev ) ) && ( kbprev > 0 ) )
685 &kbprev, negone, Bdprev, &LDBC, Aprev, &Ald, talpha1,
686 Bprev, &LDBR );
687
688
689
690 if( !( Ais1Row ) && ChangeRoc )
691 {
692 if( myrow == rocprev )
693 {
694 send( ctxt, Nb, n1pprev, Bprev, LDBR, Arow, mycol );
695 }
696 else if( myrow == Arow )
697 {
698 recv( ctxt, Nb, n1pprev, work, Nb, rocprev, mycol );
699 add( &Nb, &n1pprev, one, work, &Nb, one, Bprev, &LDBR );
700 }
701 }
702 }
703
704
705
706 if( Ais1Row || ( myrow == Arow ) )
707 {
708 if( AisColRep || ( mycol == Acol ) )
709 {
711 C2F_CHAR( DIAG ), &Nb, &kb, talpha2, A, &Ald, BR,
712 &LDBR );
713 tadd( &Nb, &kb, one, BR, &LDBR, zero, BC, &LDBC );
714 }
715 if( bcst )
716 {
717 if( mycol == Acol )
718 bsend( ctxt,
ROW, &btop, kb, Nb, BC, LDBC );
719 else
720 brecv( ctxt,
ROW, &btop, kb, Nb, BC, LDBC, myrow, Acol );
721 }
722 talpha2 = one;
723 }
724 else
725 {
726 if( !( Ais1Row ) && ( AisColRep || ( mycol == Acol ) ) )
728 zero, zero, BR, &LDBR );
729 }
730
731
732
733 if( ( Ais1Row || ( myrow == rocprev ) ) && ( kbprev > 0 ) )
734 {
735 if( ( tmp1 = Anpprev - n1pprev ) > 0 )
736 {
737 tmp2 = n1pprev * size;
739 &kbprev, negone, Bdprev, &LDBC, Aprev+Ald*tmp2, &Ald,
740 talpha1, Bprev+LDBR*tmp2, &LDBR );
741 }
742 Aprev += kbprev * size; talpha1 = one;
743 }
744
745
746
747 if( Ais1Row || ( myrow == Arow ) )
748 { A += kbsize; Bdprev = Bd = BC; BC += kbsize; }
749 if( AisColRep || ( mycol == Acol ) )
750 {
751 Bprev = ( BR += LDBR * kbsize );
752 A += Ald * kbsize;
753 Anpprev = ( Anq -= kb );
754 Aprev += Ald * kbsize;
755 }
756 n1pprev = n1p;
757 rocprev = Arow;
758 kbprev = kb;
759 k += kb;
760 Na -= kb;
761
762 nb1 -= kb;
763 if( nb1 == 0 )
764 {
765 if( !( Ais1Col ) && ( Acol >= 0 ) )
767 nb1 =
MIN( Anb, Na );
768 }
769
770 mb1 -= kb;
771 ChangeRoc = ( mb1 == 0 );
772
773 if( ChangeRoc )
774 {
775 if( !( Ais1Row ) && ( Arow >= 0 ) )
777 mb1 =
MIN( Amb, Na );
778 }
779 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) ); tmp2 = n1 + mb1 - kb;
780 n1p =
PB_Cnumroc(
MIN( tmp2, tmp1 ), k + kb, Ainb1, Anb, mycol,
781 Asrc, npcol );
782 }
783 }
784 else
785 {
786
787
788
789 nlast = ( nprow - 1 ) * Amb;
790 n1 =
MAX( nlast, Amb );
791 nlast += Aimb1;
792 n1last = n1 - Amb +
MAX( Aimb1, Amb );
794 tmp1 = Na-1;
795 Alrow =
PB_Cindxg2p( tmp1, Aimb1, Amb, Arow, Arow, nprow );
796 Alcol =
PB_Cindxg2p( tmp1, Ainb1, Anb, Acol, Acol, npcol );
797 rocprev = Alrow; Anpprev = Anq; Bprev = BR; Bdprev = BC;
798 Aprev = A =
Mptr( A, Anp, 0, Ald, size );
801 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) );
802 n1 = ( ( Ais1Row || ( Na-mb1 < nlast ) ) ? n1last : n1 );
803 tmp2 = n1 + mb1 - kb; tmp1 -= ( tmp2 =
MIN( tmp1, tmp2 ) );
804 Asrc = Acol;
805 n1p =
PB_Cnumroc( tmp2,
MAX( 0, tmp1 ), Ainb1, Anb, mycol, Asrc,
806 npcol );
807 talpha1 = talpha2 = ( ( Ais1Row || ( myrow == Alrow ) ) ?
808 ALPHA : one );
809 while( Na > 0 )
810 {
811 kbsize = kb * size;
812
813 if( Ais1Row || ( myrow == Alrow ) )
814 { A -= kbsize; Anp -= kb; Bd =
Mptr( BC, Anp, 0, LDBC, size ); }
815 if( ( Acol < 0 ) || ( mycol == Alcol ) ) { Anq -= kb; }
816
817
818
819 if( n1pprev > 0 )
820 {
821 if( ( Ais1Row || ( myrow == rocprev ) ) && ( kbprev > 0 ) )
822 {
823 tmp1 = ( Anpprev - n1pprev ) * size;
825 &Nb, &n1pprev, &kbprev, negone, Bdprev,
826 &LDBC, Aprev+Ald*tmp1, &Ald, talpha1,
827 Bprev+LDBR*tmp1, &LDBR );
828 }
829
830
831
832 if( !( Ais1Row ) && ChangeRoc )
833 {
834 if( myrow == rocprev )
835 {
836 send( ctxt, Nb, n1pprev,
Mptr( Bprev, 0, Anpprev-n1pprev,
837 LDBR, size ), LDBR, Alrow, mycol );
838 }
839 else if( myrow == Alrow )
840 {
841 recv( ctxt, Nb, n1pprev, work, Nb, rocprev, mycol );
842 add( &Nb, &n1pprev, one, work, &Nb, one,
Mptr( Bprev, 0,
843 Anpprev-n1pprev, LDBR, size ), &LDBR );
844 }
845 }
846 }
847
848
849
850 if( Ais1Row || ( myrow == Alrow ) )
851 {
852 if( AisColRep || ( mycol == Alcol ) )
853 {
856 Ald, size ), &Ald,
Mptr( BR, 0, Anq, LDBR, size ),
857 &LDBR );
858 tadd( &Nb, &kb, one,
Mptr( BR, 0, Anq, LDBR, size ), &LDBR,
859 zero,
Mptr( BC, Anp, 0, LDBC, size ), &LDBC );
860 }
861 if( bcst )
862 {
863 if( mycol == Alcol )
864 bsend( ctxt,
ROW, &btop, kb, Nb,
Mptr( BC, Anp, 0, LDBC,
865 size ), LDBC );
866 else
867 brecv( ctxt,
ROW, &btop, kb, Nb,
Mptr( BC, Anp, 0, LDBC,
868 size ), LDBC, myrow, Alcol );
869 }
870 talpha2 = one;
871 }
872 else
873 {
874 if( !( Ais1Row ) && ( AisColRep || ( mycol == Alcol ) ) )
876 zero, zero,
Mptr( BR, 0, Anq, LDBR, size ), &LDBR );
877 }
878
879
880
881 if( ( Ais1Row || ( myrow == rocprev ) ) && ( kbprev > 0 ) )
882 {
883 if( ( tmp1 = Anpprev - n1pprev ) > 0 )
885 &kbprev, negone, Bdprev, &LDBC, Aprev, &Ald, talpha1,
886 Bprev, &LDBR );
887 talpha1 = one;
888 }
889
890
891
892 if( Ais1Row || ( myrow == Alrow ) ) { Bdprev = Bd; Aprev = A; }
893 if( AisColRep || ( mycol == Alcol ) ) { Anpprev -= kb; }
894
895 n1pprev = n1p;
896 rocprev = Alrow;
897 kbprev = kb;
898 k += kb;
899 Na -= kb;
900
901 nb1 -= kb;
902 if( nb1 == 0 )
903 {
904 if( !( Ais1Col ) && ( Alcol >= 0 ) )
906 nb1 = ( Na > Ainb1 ? Anb : Ainb1 );
907 }
908
909 mb1 -= kb;
910 ChangeRoc = ( mb1 == 0 );
911
912 if( ChangeRoc )
913 {
914 if( !( Ais1Row ) && ( Alrow >= 0 ) )
916 mb1 = ( Na > Aimb1 ? Amb : Aimb1 );
917 }
918 tmp1 = Na - ( kb =
MIN( mb1, nb1 ) );
919 n1 = ( ( Ais1Row || ( Na-mb1 < nlast ) ) ? n1last : n1 );
920 tmp2 = n1 + mb1 - kb; tmp1 -= ( tmp2 =
MIN( tmp1, tmp2 ) );
921 n1p =
PB_Cnumroc( tmp2,
MAX( 0, tmp1 ), Ainb1, Anb, mycol, Asrc,
922 npcol );
923 }
924 }
925 }
926 if( work ) free( work );
927
928
929
930}