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 Int Acol, Aimb, Ainb, AisD, AisR, Amb, Amp, Anb, Anq, Arow, Ycol,
229 Yii, Yimb, Yimb1, Yinb, Yinb1, YisD, YisR, YisRow, Yjj, Yld,
230 Ymb, Ymp, Ynb, Ynq, Yrow, ctxt, izero=0, nprow, myrow, npcol,
231 mycol;
232
233
234
235
236
237
238
239 *YAFREE = 0;
240 *YASUM = 0;
241 *YAPBY = 0;
242 *YAPTR = NULL;
243 *TBETA = BETA;
244
245
246
247 if( ( M <= 0 ) || ( N <= 0 ) || ( K <= 0 ) )
248 {
250 {
253 }
254 else
255 {
258 }
259 return;
260 }
261
262
263
265
266
267
268 Minfog2l( IY, JY, DESCY, nprow, npcol, myrow, mycol, Yii, Yjj, Yrow, Ycol );
269
270
271
272 if( ( YisRow = (
Mupcase( YROC[0] ) ==
CROW ) ) != 0 )
273 {
274 YisD = ( ( Ycol >= 0 ) && ( npcol > 1 ) );
275 YisR = ( ( Yrow == -1 ) || ( nprow == 1 ) );
276 }
277 else
278 {
279 YisD = ( ( Yrow >= 0 ) && ( nprow > 1 ) );
280 YisR = ( ( Ycol == -1 ) || ( npcol == 1 ) );
281 }
282
283 Aimb = DESCA[
IMB_ ]; Ainb = DESCA[
INB_ ];
284 Amb = DESCA[
MB_ ]; Anb = DESCA[
NB_ ];
286
288 {
289
290
291
292 AisR = ( ( Arow < 0 ) || ( nprow == 1 ) );
293
294 if( YisRow )
295 {
296
297
298
299 AisD = ( ( Acol >= 0 ) && ( npcol > 1 ) );
300
301 Yinb = DESCY[
INB_]; Ynb = DESCY[
NB_];
302 Mfirstnb( Yinb1, N, JY, Yinb, Ynb );
303
304
305
306
307
308
309 if( ( !AisD && !YisD ) ||
310 ( ( AisD && YisD ) &&
311 ( ( Acol == Ycol ) &&
312 ( ( ( Ainb >= N ) && ( Yinb1 >= N ) ) ||
313 ( ( Ainb == Yinb1 ) && ( Anb == Ynb ) ) ) ) ) )
314 {
315 Mnumroc( Ynq, N, 0, Yinb1, Ynb, mycol, Ycol, npcol );
316 Ymp = ( YisR ? K : ( ( myrow == Yrow ) ? K : 0 ) );
317
318 if( YisR )
319 {
320
321
322
323
324 *YAPBY = 0;
326 if( Ynq > 0 )
327 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
328
329 if( AisR )
330 {
331
332
333
334
335 *TBETA = BETA;
336 *YASUM = 0;
337 }
338 else
339 {
340
341
342
343
344 *TBETA = ( ( myrow == Arow ) ? BETA :
TYPE->zero );
345 *YASUM = ( nprow > 1 );
346
347
348
349
350 Mnumroc( Amp, M, 0, Aimb, Amb, myrow, Arow, nprow );
351 if( Amp <= 0 )
353 *YAPTR, &Yld );
354 }
355 }
356 else
357 {
358
359
360
361 if( AisR )
362 {
363
364
365
366
367 *TBETA = BETA;
368 *YASUM = 0;
369 *YAPBY = 0;
372 DESCA[
RSRC_ ] = Yrow;
373 if( ( Ynq > 0 ) && ( Ymp > 0 ) )
374 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
375 }
376 else
377 {
378 if(
Mspan( M, 0, Aimb, Amb, Arow, nprow ) )
379 {
380
381
382
383
384 *YASUM = ( nprow > 1 );
385 *YAPBY = 0;
386
387 if( myrow == Yrow )
388 {
389
390
391
392
393 *TBETA = BETA;
395 if( Ynq > 0 )
396 {
397 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
398 Mnumroc( Amp, M, 0, Aimb, Amb, myrow, Arow, nprow );
399 if( Amp <= 0 )
401 *TBETA, *YAPTR, &Yld );
402 }
403 }
404 else
405 {
406
407
408
411 if( Ynq > 0 )
412 {
414 *YAFREE = 1;
416 &K, &Ynq, &izero, *TBETA, *TBETA,
417 *YAPTR, &Yld );
418 }
419 }
420 }
421 else
422 {
423
424
425
426 if( Yrow == Arow )
427 {
428
429
430
431 *TBETA = BETA;
432 *YASUM = 0;
433 *YAPBY = 0;
435 if( ( myrow == Yrow ) && ( Ynq > 0 ) )
436 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
437 }
438 else
439 {
440
441
442
443
444
446 *YASUM = 0;
447 *YAPBY = 1;
448 Yrow = Arow;
450 if( myrow == Arow )
451 {
452 if( Ynq > 0 )
453 {
455 *YAFREE = 1;
458 &izero, *TBETA, *TBETA, *YAPTR,
459 &Yld );
460 }
461 }
462 }
463 }
464 }
465 }
466
467
468
469
470
471 MDescSet( DYA, K, N, K, Yinb1, 1, Ynb, Yrow, Ycol, ctxt, Yld );
472 return;
473 }
474 }
475
476
477
478
480 *YAPBY = 1;
481 Mnumroc( Anq, N, 0, Ainb, Anb, mycol, Acol, npcol );
483
484 if( YisR )
485 {
486
487
488
489
490
491
492 *YASUM = ( AisR ? 0 : ( nprow > 1 ) );
493 Arow = -1;
494 if( Anq > 0 )
495 {
497 *YAFREE = 1;
499 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
500 }
501 }
502 else
503 {
504
505
506
507 if( AisR )
508 {
509
510
511
512
513 *YASUM = 0;
515
516 if( YisRow )
517 {
518
519
520
521
523 }
524 else
525 {
526 DESCA[
RSRC_] = Arow = 0;
527 }
528 if( ( myrow == Arow ) && ( Anq > 0 ) )
529 {
531 *YAFREE = 1;
533 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
534 }
535 }
536 else
537 {
538 if(
Mspan( M, 0, Aimb, Amb, Arow, nprow ) )
539 {
540
541
542
543
544 *YASUM = ( nprow > 1 );
545 if( Anq > 0 )
546 {
548 *YAFREE = 1;
550 &izero, *TBETA, *TBETA, *YAPTR, &K );
551 }
552 }
553 else
554 {
555
556
557
558
559 *YASUM = 0;
560 if( ( myrow == Arow ) && ( Anq > 0 ) )
561 {
563 *YAFREE = 1;
565 &izero, *TBETA, *TBETA, *YAPTR, &K );
566 }
567 }
568 }
569 }
570
571
572
573
574
575 MDescSet( DYA, K, N, K, Ainb, 1, Anb, Arow, Acol, ctxt, Yld );
576 }
577 else
578 {
579
580
581
582 AisR = ( ( Acol < 0 ) || ( npcol == 1 ) );
583
584 if( !YisRow )
585 {
586
587
588
589 AisD = ( ( Arow >= 0 ) && ( nprow > 1 ) );
590
591 Yimb = DESCY[
IMB_]; Ymb = DESCY[
MB_];
592 Mfirstnb( Yimb1, M, IY, Yimb, Ymb );
593
594
595
596
597
598
599 if( ( !AisD && !YisD ) ||
600 ( ( AisD && YisD ) &&
601 ( ( Arow == Yrow ) &&
602 ( ( ( Aimb >= M ) && ( Yimb1 >= M ) ) ||
603 ( ( Aimb == Yimb1 ) && ( Amb == Ymb ) ) ) ) ) )
604 {
605 Mnumroc( Ymp, M, 0, Yimb1, Ymb, myrow, Yrow, nprow );
606 Ynq = ( YisR ? K : ( ( mycol == Ycol ) ? K : 0 ) );
607
608 if( YisR )
609 {
610
611
612
613
614 *YAPBY = 0;
616 if( Ymp > 0 )
617 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
618
619 if( AisR )
620 {
621
622
623
624
625 *TBETA = BETA;
626 *YASUM = 0;
627 }
628 else
629 {
630
631
632
633
634 *TBETA = ( ( mycol == Acol ) ? BETA :
TYPE->zero );
635 *YASUM = ( npcol > 1 );
636
637
638
639
640 Mnumroc( Anq, N, 0, Ainb, Anb, mycol, Acol, npcol );
641 if( Anq <= 0 )
643 *YAPTR, &Yld );
644 }
645 }
646 else
647 {
648
649
650
651 if( AisR )
652 {
653
654
655
656
657 *TBETA = BETA;
658 *YASUM = 0;
659 *YAPBY = 0;
662 DESCA[
CSRC_ ] = Ycol;
663 if( ( Ymp > 0 ) && ( Ynq > 0 ) )
664 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
665 }
666 else
667 {
668 if(
Mspan( N, 0, Ainb, Anb, Acol, npcol ) )
669 {
670
671
672
673
674 *YASUM = ( npcol > 1 );
675 *YAPBY = 0;
676
677 if( mycol == Ycol )
678 {
679
680
681
682
683 *TBETA = BETA;
685 if( Ymp > 0 )
686 {
687 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
688 Mnumroc( Anq, N, 0, Ainb, Anb, mycol, Acol, npcol );
689 if( Anq <= 0 )
691 *TBETA, *YAPTR, &Yld );
692 }
693 }
694 else
695 {
696
697
698
701 if( Ymp > 0 )
702 {
704 *YAFREE = 1;
706 &Ymp, &K, &izero, *TBETA, *TBETA,
707 *YAPTR, &Yld );
708 }
709 }
710 }
711 else
712 {
713
714
715
716 if( Ycol == Acol )
717 {
718
719
720
721 *TBETA = BETA;
722 *YASUM = 0;
723 *YAPBY = 0;
725 if( ( mycol == Ycol ) && ( Ymp > 0 ) )
726 *YAPTR =
Mptr( Y, Yii, Yjj, Yld,
TYPE->size );
727 }
728 else
729 {
730
731
732
733
734
736 *YASUM = 0;
737 *YAPBY = 1;
738 Ycol = Acol;
739 Yld =
MAX( 1, Ymp ) ;
740 if( mycol == Acol )
741 {
742 if( Ymp > 0 )
743 {
745 *YAFREE = 1;
748 &izero, *TBETA, *TBETA, *YAPTR,
749 &Yld );
750 }
751 }
752 }
753 }
754 }
755 }
756
757
758
759
760
761 MDescSet( DYA, M, K, Yimb1, K, Ymb, 1, Yrow, Ycol, ctxt, Yld );
762 return;
763 }
764 }
765
766
767
768
770 *YAPBY = 1;
771 Mnumroc( Amp, M, 0, Aimb, Amb, myrow, Arow, nprow );
773
774 if( YisR )
775 {
776
777
778
779
780
781
782 *YASUM = ( AisR ? 0 : ( npcol > 1 ) );
783 Acol = -1;
784 if( Amp > 0 )
785 {
787 *YAFREE = 1;
789 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
790 }
791 }
792 else
793 {
794
795
796
797 if( AisR )
798 {
799
800
801
802
803 *YASUM = 0;
805
806 if( YisRow )
807 {
808 DESCA[
CSRC_ ] = Acol = 0;
809 }
810 else
811 {
812
813
814
815
817 }
818 if( ( mycol == Acol ) && ( Amp > 0 ) )
819 {
821 *YAFREE = 1;
823 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
824 }
825 }
826 else
827 {
828 if(
Mspan( N, 0, Ainb, Anb, Acol, npcol ) )
829 {
830
831
832
833
834 *YASUM = ( npcol > 1 );
835 if( Amp > 0 )
836 {
838 *YAFREE = 1;
840 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
841 }
842 }
843 else
844 {
845
846
847
848
849 *YASUM = 0;
850 if( ( mycol == Acol ) && ( Amp > 0 ) )
851 {
853 *YAFREE = 1;
855 &izero, *TBETA, *TBETA, *YAPTR, &Yld );
856 }
857 }
858 }
859 }
860
861
862
863
864
865 MDescSet( DYA, M, K, Aimb, K, Amb, 1, Arow, Acol, ctxt, Yld );
866 }
867
868
869
870}