244
245
246
247
248
249
250 CHARACTER NORM, TRANSR, UPLO
251 INTEGER N
252
253
254 REAL WORK( 0: * )
255 COMPLEX A( 0: * )
256
257
258
259
260
261 REAL ONE, ZERO
262 parameter( one = 1.0e+0, zero = 0.0e+0 )
263
264
265 INTEGER I, J, IFM, ILU, NOE, N1, K, L, LDA
266 REAL SCALE, S, VALUE, AA, TEMP
267
268
269 LOGICAL LSAME, SISNAN
271
272
274
275
276 INTRINSIC abs, real, sqrt
277
278
279
280 IF( n.EQ.0 ) THEN
282 RETURN
283 ELSE IF( n.EQ.1 ) THEN
285 RETURN
286 END IF
287
288
289
290 noe = 1
291 IF( mod( n, 2 ).EQ.0 )
292 $ noe = 0
293
294
295
296 ifm = 1
297 IF(
lsame( transr,
'C' ) )
298 $ ifm = 0
299
300
301
302 ilu = 1
303 IF(
lsame( uplo,
'U' ) )
304 $ ilu = 0
305
306
307
308
309
310 IF( ifm.EQ.1 ) THEN
311 IF( noe.EQ.1 ) THEN
312 lda = n
313 ELSE
314
315 lda = n + 1
316 END IF
317 ELSE
318
319 lda = ( n+1 ) / 2
320 END IF
321
322 IF(
lsame( norm,
'M' ) )
THEN
323
324
325
326 k = ( n+1 ) / 2
327 VALUE = zero
328 IF( noe.EQ.1 ) THEN
329
330 IF( ifm.EQ.1 ) THEN
331
332 IF( ilu.EQ.1 ) THEN
333
334 j = 0
335
336 temp = abs( real( a( j+j*lda ) ) )
337 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
338 $ VALUE = temp
339 DO i = 1, n - 1
340 temp = abs( a( i+j*lda ) )
341 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
342 $ VALUE = temp
343 END DO
344 DO j = 1, k - 1
345 DO i = 0, j - 2
346 temp = abs( a( i+j*lda ) )
347 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
348 $ VALUE = temp
349 END DO
350 i = j - 1
351
352 temp = abs( real( a( i+j*lda ) ) )
353 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
354 $ VALUE = temp
355 i = j
356
357 temp = abs( real( a( i+j*lda ) ) )
358 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
359 $ VALUE = temp
360 DO i = j + 1, n - 1
361 temp = abs( a( i+j*lda ) )
362 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
363 $ VALUE = temp
364 END DO
365 END DO
366 ELSE
367
368 DO j = 0, k - 2
369 DO i = 0, k + j - 2
370 temp = abs( a( i+j*lda ) )
371 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
372 $ VALUE = temp
373 END DO
374 i = k + j - 1
375
376 temp = abs( real( a( i+j*lda ) ) )
377 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
378 $ VALUE = temp
379 i = i + 1
380
381 temp = abs( real( a( i+j*lda ) ) )
382 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
383 $ VALUE = temp
384 DO i = k + j + 1, n - 1
385 temp = abs( a( i+j*lda ) )
386 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
387 $ VALUE = temp
388 END DO
389 END DO
390 DO i = 0, n - 2
391 temp = abs( a( i+j*lda ) )
392 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
393 $ VALUE = temp
394
395 END DO
396
397 temp = abs( real( a( i+j*lda ) ) )
398 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
399 $ VALUE = temp
400 END IF
401 ELSE
402
403 IF( ilu.EQ.1 ) THEN
404
405 DO j = 0, k - 2
406 DO i = 0, j - 1
407 temp = abs( a( i+j*lda ) )
408 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
409 $ VALUE = temp
410 END DO
411 i = j
412
413 temp = abs( real( a( i+j*lda ) ) )
414 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
415 $ VALUE = temp
416 i = j + 1
417
418 temp = abs( real( a( i+j*lda ) ) )
419 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
420 $ VALUE = temp
421 DO i = j + 2, k - 1
422 temp = abs( a( i+j*lda ) )
423 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
424 $ VALUE = temp
425 END DO
426 END DO
427 j = k - 1
428 DO i = 0, k - 2
429 temp = abs( a( i+j*lda ) )
430 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
431 $ VALUE = temp
432 END DO
433 i = k - 1
434
435 temp = abs( real( a( i+j*lda ) ) )
436 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
437 $ VALUE = temp
438 DO j = k, n - 1
439 DO i = 0, k - 1
440 temp = abs( a( i+j*lda ) )
441 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
442 $ VALUE = temp
443 END DO
444 END DO
445 ELSE
446
447 DO j = 0, k - 2
448 DO i = 0, k - 1
449 temp = abs( a( i+j*lda ) )
450 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
451 $ VALUE = temp
452 END DO
453 END DO
454 j = k - 1
455
456 temp = abs( real( a( 0+j*lda ) ) )
457 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
458 $ VALUE = temp
459 DO i = 1, k - 1
460 temp = abs( a( i+j*lda ) )
461 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
462 $ VALUE = temp
463 END DO
464 DO j = k, n - 1
465 DO i = 0, j - k - 1
466 temp = abs( a( i+j*lda ) )
467 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
468 $ VALUE = temp
469 END DO
470 i = j - k
471
472 temp = abs( real( a( i+j*lda ) ) )
473 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
474 $ VALUE = temp
475 i = j - k + 1
476
477 temp = abs( real( a( i+j*lda ) ) )
478 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
479 $ VALUE = temp
480 DO i = j - k + 2, k - 1
481 temp = abs( a( i+j*lda ) )
482 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
483 $ VALUE = temp
484 END DO
485 END DO
486 END IF
487 END IF
488 ELSE
489
490 IF( ifm.EQ.1 ) THEN
491
492 IF( ilu.EQ.1 ) THEN
493
494 j = 0
495
496 temp = abs( real( a( j+j*lda ) ) )
497 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
498 $ VALUE = temp
499 temp = abs( real( a( j+1+j*lda ) ) )
500 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
501 $ VALUE = temp
502 DO i = 2, n
503 temp = abs( a( i+j*lda ) )
504 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
505 $ VALUE = temp
506 END DO
507 DO j = 1, k - 1
508 DO i = 0, j - 1
509 temp = abs( a( i+j*lda ) )
510 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
511 $ VALUE = temp
512 END DO
513 i = j
514
515 temp = abs( real( a( i+j*lda ) ) )
516 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
517 $ VALUE = temp
518 i = j + 1
519
520 temp = abs( real( a( i+j*lda ) ) )
521 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
522 $ VALUE = temp
523 DO i = j + 2, n
524 temp = abs( a( i+j*lda ) )
525 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
526 $ VALUE = temp
527 END DO
528 END DO
529 ELSE
530
531 DO j = 0, k - 2
532 DO i = 0, k + j - 1
533 temp = abs( a( i+j*lda ) )
534 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
535 $ VALUE = temp
536 END DO
537 i = k + j
538
539 temp = abs( real( a( i+j*lda ) ) )
540 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
541 $ VALUE = temp
542 i = i + 1
543
544 temp = abs( real( a( i+j*lda ) ) )
545 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
546 $ VALUE = temp
547 DO i = k + j + 2, n
548 temp = abs( a( i+j*lda ) )
549 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
550 $ VALUE = temp
551 END DO
552 END DO
553 DO i = 0, n - 2
554 temp = abs( a( i+j*lda ) )
555 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
556 $ VALUE = temp
557
558 END DO
559
560 temp = abs( real( a( i+j*lda ) ) )
561 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
562 $ VALUE = temp
563 i = n
564
565 temp = abs( real( a( i+j*lda ) ) )
566 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
567 $ VALUE = temp
568 END IF
569 ELSE
570
571 IF( ilu.EQ.1 ) THEN
572
573 j = 0
574
575 temp = abs( real( a( j+j*lda ) ) )
576 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
577 $ VALUE = temp
578 DO i = 1, k - 1
579 temp = abs( a( i+j*lda ) )
580 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
581 $ VALUE = temp
582 END DO
583 DO j = 1, k - 1
584 DO i = 0, j - 2
585 temp = abs( a( i+j*lda ) )
586 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
587 $ VALUE = temp
588 END DO
589 i = j - 1
590
591 temp = abs( real( a( i+j*lda ) ) )
592 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
593 $ VALUE = temp
594 i = j
595
596 temp = abs( real( a( i+j*lda ) ) )
597 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
598 $ VALUE = temp
599 DO i = j + 1, k - 1
600 temp = abs( a( i+j*lda ) )
601 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
602 $ VALUE = temp
603 END DO
604 END DO
605 j = k
606 DO i = 0, k - 2
607 temp = abs( a( i+j*lda ) )
608 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
609 $ VALUE = temp
610 END DO
611 i = k - 1
612
613 temp = abs( real( a( i+j*lda ) ) )
614 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
615 $ VALUE = temp
616 DO j = k + 1, n
617 DO i = 0, k - 1
618 temp = abs( a( i+j*lda ) )
619 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
620 $ VALUE = temp
621 END DO
622 END DO
623 ELSE
624
625 DO j = 0, k - 1
626 DO i = 0, k - 1
627 temp = abs( a( i+j*lda ) )
628 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
629 $ VALUE = temp
630 END DO
631 END DO
632 j = k
633
634 temp = abs( real( a( 0+j*lda ) ) )
635 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
636 $ VALUE = temp
637 DO i = 1, k - 1
638 temp = abs( a( i+j*lda ) )
639 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
640 $ VALUE = temp
641 END DO
642 DO j = k + 1, n - 1
643 DO i = 0, j - k - 2
644 temp = abs( a( i+j*lda ) )
645 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
646 $ VALUE = temp
647 END DO
648 i = j - k - 1
649
650 temp = abs( real( a( i+j*lda ) ) )
651 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
652 $ VALUE = temp
653 i = j - k
654
655 temp = abs( real( a( i+j*lda ) ) )
656 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
657 $ VALUE = temp
658 DO i = j - k + 1, k - 1
659 temp = abs( a( i+j*lda ) )
660 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
661 $ VALUE = temp
662 END DO
663 END DO
664 j = n
665 DO i = 0, k - 2
666 temp = abs( a( i+j*lda ) )
667 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
668 $ VALUE = temp
669 END DO
670 i = k - 1
671
672 temp = abs( real( a( i+j*lda ) ) )
673 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
674 $ VALUE = temp
675 END IF
676 END IF
677 END IF
678 ELSE IF( (
lsame( norm,
'I' ) ) .OR.
679 $ (
lsame( norm,
'O' ) ) .OR.
680 $ ( norm.EQ.'1' ) ) THEN
681
682
683
684 IF( ifm.EQ.1 ) THEN
685
686 k = n / 2
687 IF( noe.EQ.1 ) THEN
688
689 IF( ilu.EQ.0 ) THEN
690
691 DO i = 0, k - 1
692 work( i ) = zero
693 END DO
694 DO j = 0, k
695 s = zero
696 DO i = 0, k + j - 1
697 aa = abs( a( i+j*lda ) )
698
699 s = s + aa
700 work( i ) = work( i ) + aa
701 END DO
702 aa = abs( real( a( i+j*lda ) ) )
703
704 work( j+k ) = s + aa
705 IF( i.EQ.k+k )
706 $ GO TO 10
707 i = i + 1
708 aa = abs( real( a( i+j*lda ) ) )
709
710 work( j ) = work( j ) + aa
711 s = zero
712 DO l = j + 1, k - 1
713 i = i + 1
714 aa = abs( a( i+j*lda ) )
715
716 s = s + aa
717 work( l ) = work( l ) + aa
718 END DO
719 work( j ) = work( j ) + s
720 END DO
721 10 CONTINUE
722 VALUE = work( 0 )
723 DO i = 1, n-1
724 temp = work( i )
725 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
726 $ VALUE = temp
727 END DO
728 ELSE
729
730 k = k + 1
731
732 DO i = k, n - 1
733 work( i ) = zero
734 END DO
735 DO j = k - 1, 0, -1
736 s = zero
737 DO i = 0, j - 2
738 aa = abs( a( i+j*lda ) )
739
740 s = s + aa
741 work( i+k ) = work( i+k ) + aa
742 END DO
743 IF( j.GT.0 ) THEN
744 aa = abs( real( a( i+j*lda ) ) )
745
746 s = s + aa
747 work( i+k ) = work( i+k ) + s
748
749 i = i + 1
750 END IF
751 aa = abs( real( a( i+j*lda ) ) )
752
753 work( j ) = aa
754 s = zero
755 DO l = j + 1, n - 1
756 i = i + 1
757 aa = abs( a( i+j*lda ) )
758
759 s = s + aa
760 work( l ) = work( l ) + aa
761 END DO
762 work( j ) = work( j ) + s
763 END DO
764 VALUE = work( 0 )
765 DO i = 1, n-1
766 temp = work( i )
767 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
768 $ VALUE = temp
769 END DO
770 END IF
771 ELSE
772
773 IF( ilu.EQ.0 ) THEN
774
775 DO i = 0, k - 1
776 work( i ) = zero
777 END DO
778 DO j = 0, k - 1
779 s = zero
780 DO i = 0, k + j - 1
781 aa = abs( a( i+j*lda ) )
782
783 s = s + aa
784 work( i ) = work( i ) + aa
785 END DO
786 aa = abs( real( a( i+j*lda ) ) )
787
788 work( j+k ) = s + aa
789 i = i + 1
790 aa = abs( real( a( i+j*lda ) ) )
791
792 work( j ) = work( j ) + aa
793 s = zero
794 DO l = j + 1, k - 1
795 i = i + 1
796 aa = abs( a( i+j*lda ) )
797
798 s = s + aa
799 work( l ) = work( l ) + aa
800 END DO
801 work( j ) = work( j ) + s
802 END DO
803 VALUE = work( 0 )
804 DO i = 1, n-1
805 temp = work( i )
806 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
807 $ VALUE = temp
808 END DO
809 ELSE
810
811 DO i = k, n - 1
812 work( i ) = zero
813 END DO
814 DO j = k - 1, 0, -1
815 s = zero
816 DO i = 0, j - 1
817 aa = abs( a( i+j*lda ) )
818
819 s = s + aa
820 work( i+k ) = work( i+k ) + aa
821 END DO
822 aa = abs( real( a( i+j*lda ) ) )
823
824 s = s + aa
825 work( i+k ) = work( i+k ) + s
826
827 i = i + 1
828 aa = abs( real( a( i+j*lda ) ) )
829
830 work( j ) = aa
831 s = zero
832 DO l = j + 1, n - 1
833 i = i + 1
834 aa = abs( a( i+j*lda ) )
835
836 s = s + aa
837 work( l ) = work( l ) + aa
838 END DO
839 work( j ) = work( j ) + s
840 END DO
841 VALUE = work( 0 )
842 DO i = 1, n-1
843 temp = work( i )
844 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
845 $ VALUE = temp
846 END DO
847 END IF
848 END IF
849 ELSE
850
851 k = n / 2
852 IF( noe.EQ.1 ) THEN
853
854 IF( ilu.EQ.0 ) THEN
855
856 n1 = k
857
858 k = k + 1
859
860 DO i = n1, n - 1
861 work( i ) = zero
862 END DO
863 DO j = 0, n1 - 1
864 s = zero
865 DO i = 0, k - 1
866 aa = abs( a( i+j*lda ) )
867
868 work( i+n1 ) = work( i+n1 ) + aa
869 s = s + aa
870 END DO
871 work( j ) = s
872 END DO
873
874 s = abs( real( a( 0+j*lda ) ) )
875
876 DO i = 1, k - 1
877 aa = abs( a( i+j*lda ) )
878
879 work( i+n1 ) = work( i+n1 ) + aa
880 s = s + aa
881 END DO
882 work( j ) = work( j ) + s
883 DO j = k, n - 1
884 s = zero
885 DO i = 0, j - k - 1
886 aa = abs( a( i+j*lda ) )
887
888 work( i ) = work( i ) + aa
889 s = s + aa
890 END DO
891
892 aa = abs( real( a( i+j*lda ) ) )
893
894 s = s + aa
895 work( j-k ) = work( j-k ) + s
896 i = i + 1
897 s = abs( real( a( i+j*lda ) ) )
898
899 DO l = j + 1, n - 1
900 i = i + 1
901 aa = abs( a( i+j*lda ) )
902
903 work( l ) = work( l ) + aa
904 s = s + aa
905 END DO
906 work( j ) = work( j ) + s
907 END DO
908 VALUE = work( 0 )
909 DO i = 1, n-1
910 temp = work( i )
911 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
912 $ VALUE = temp
913 END DO
914 ELSE
915
916 k = k + 1
917
918 DO i = k, n - 1
919 work( i ) = zero
920 END DO
921 DO j = 0, k - 2
922
923 s = zero
924 DO i = 0, j - 1
925 aa = abs( a( i+j*lda ) )
926
927 work( i ) = work( i ) + aa
928 s = s + aa
929 END DO
930 aa = abs( real( a( i+j*lda ) ) )
931
932 s = s + aa
933 work( j ) = s
934
935 i = i + 1
936
937 aa = abs( real( a( i+j*lda ) ) )
938 s = aa
939 DO l = k + j + 1, n - 1
940 i = i + 1
941 aa = abs( a( i+j*lda ) )
942
943 s = s + aa
944 work( l ) = work( l ) + aa
945 END DO
946 work( k+j ) = work( k+j ) + s
947 END DO
948
949 s = zero
950 DO i = 0, k - 2
951 aa = abs( a( i+j*lda ) )
952
953 work( i ) = work( i ) + aa
954 s = s + aa
955 END DO
956
957 aa = abs( real( a( i+j*lda ) ) )
958
959 s = s + aa
960 work( i ) = s
961
962 DO j = k, n - 1
963
964 s = zero
965 DO i = 0, k - 1
966 aa = abs( a( i+j*lda ) )
967
968 work( i ) = work( i ) + aa
969 s = s + aa
970 END DO
971 work( j ) = work( j ) + s
972 END DO
973 VALUE = work( 0 )
974 DO i = 1, n-1
975 temp = work( i )
976 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
977 $ VALUE = temp
978 END DO
979 END IF
980 ELSE
981
982 IF( ilu.EQ.0 ) THEN
983
984 DO i = k, n - 1
985 work( i ) = zero
986 END DO
987 DO j = 0, k - 1
988 s = zero
989 DO i = 0, k - 1
990 aa = abs( a( i+j*lda ) )
991
992 work( i+k ) = work( i+k ) + aa
993 s = s + aa
994 END DO
995 work( j ) = s
996 END DO
997
998 aa = abs( real( a( 0+j*lda ) ) )
999
1000 s = aa
1001 DO i = 1, k - 1
1002 aa = abs( a( i+j*lda ) )
1003
1004 work( i+k ) = work( i+k ) + aa
1005 s = s + aa
1006 END DO
1007 work( j ) = work( j ) + s
1008 DO j = k + 1, n - 1
1009 s = zero
1010 DO i = 0, j - 2 - k
1011 aa = abs( a( i+j*lda ) )
1012
1013 work( i ) = work( i ) + aa
1014 s = s + aa
1015 END DO
1016
1017 aa = abs( real( a( i+j*lda ) ) )
1018
1019 s = s + aa
1020 work( j-k-1 ) = work( j-k-1 ) + s
1021 i = i + 1
1022 aa = abs( real( a( i+j*lda ) ) )
1023
1024 s = aa
1025 DO l = j + 1, n - 1
1026 i = i + 1
1027 aa = abs( a( i+j*lda ) )
1028
1029 work( l ) = work( l ) + aa
1030 s = s + aa
1031 END DO
1032 work( j ) = work( j ) + s
1033 END DO
1034
1035 s = zero
1036 DO i = 0, k - 2
1037 aa = abs( a( i+j*lda ) )
1038
1039 work( i ) = work( i ) + aa
1040 s = s + aa
1041 END DO
1042
1043 aa = abs( real( a( i+j*lda ) ) )
1044
1045 s = s + aa
1046 work( i ) = work( i ) + s
1047 VALUE = work( 0 )
1048 DO i = 1, n-1
1049 temp = work( i )
1050 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
1051 $ VALUE = temp
1052 END DO
1053 ELSE
1054
1055 DO i = k, n - 1
1056 work( i ) = zero
1057 END DO
1058
1059 s = abs( real( a( 0 ) ) )
1060
1061 DO i = 1, k - 1
1062 aa = abs( a( i ) )
1063
1064 work( i+k ) = work( i+k ) + aa
1065 s = s + aa
1066 END DO
1067 work( k ) = work( k ) + s
1068 DO j = 1, k - 1
1069
1070 s = zero
1071 DO i = 0, j - 2
1072 aa = abs( a( i+j*lda ) )
1073
1074 work( i ) = work( i ) + aa
1075 s = s + aa
1076 END DO
1077 aa = abs( real( a( i+j*lda ) ) )
1078
1079 s = s + aa
1080 work( j-1 ) = s
1081
1082 i = i + 1
1083
1084 aa = abs( real( a( i+j*lda ) ) )
1085 s = aa
1086 DO l = k + j + 1, n - 1
1087 i = i + 1
1088 aa = abs( a( i+j*lda ) )
1089
1090 s = s + aa
1091 work( l ) = work( l ) + aa
1092 END DO
1093 work( k+j ) = work( k+j ) + s
1094 END DO
1095
1096 s = zero
1097 DO i = 0, k - 2
1098 aa = abs( a( i+j*lda ) )
1099
1100 work( i ) = work( i ) + aa
1101 s = s + aa
1102 END DO
1103
1104
1105 aa = abs( real( a( i+j*lda ) ) )
1106
1107 s = s + aa
1108 work( i ) = s
1109
1110 DO j = k + 1, n
1111
1112
1113 s = zero
1114 DO i = 0, k - 1
1115 aa = abs( a( i+j*lda ) )
1116
1117 work( i ) = work( i ) + aa
1118 s = s + aa
1119 END DO
1120 work( j-1 ) = work( j-1 ) + s
1121 END DO
1122 VALUE = work( 0 )
1123 DO i = 1, n-1
1124 temp = work( i )
1125 IF(
VALUE .LT. temp .OR.
sisnan( temp ) )
1126 $ VALUE = temp
1127 END DO
1128 END IF
1129 END IF
1130 END IF
1131 ELSE IF( (
lsame( norm,
'F' ) ) .OR.
1132 $ (
lsame( norm,
'E' ) ) )
THEN
1133
1134
1135
1136 k = ( n+1 ) / 2
1137 scale = zero
1138 s = one
1139 IF( noe.EQ.1 ) THEN
1140
1141 IF( ifm.EQ.1 ) THEN
1142
1143 IF( ilu.EQ.0 ) THEN
1144
1145 DO j = 0, k - 3
1146 CALL classq( k-j-2, a( k+j+1+j*lda ), 1, scale,
1147 $ s )
1148
1149 END DO
1150 DO j = 0, k - 1
1151 CALL classq( k+j-1, a( 0+j*lda ), 1, scale, s )
1152
1153 END DO
1154 s = s + s
1155
1156 l = k - 1
1157
1158 DO i = 0, k - 2
1159 aa = real( a( l ) )
1160
1161 IF( aa.NE.zero ) THEN
1162 IF( scale.LT.aa ) THEN
1163 s = one + s*( scale / aa )**2
1164 scale = aa
1165 ELSE
1166 s = s + ( aa / scale )**2
1167 END IF
1168 END IF
1169 aa = real( a( l+1 ) )
1170
1171 IF( aa.NE.zero ) THEN
1172 IF( scale.LT.aa ) THEN
1173 s = one + s*( scale / aa )**2
1174 scale = aa
1175 ELSE
1176 s = s + ( aa / scale )**2
1177 END IF
1178 END IF
1179 l = l + lda + 1
1180 END DO
1181 aa = real( a( l ) )
1182
1183 IF( aa.NE.zero ) THEN
1184 IF( scale.LT.aa ) THEN
1185 s = one + s*( scale / aa )**2
1186 scale = aa
1187 ELSE
1188 s = s + ( aa / scale )**2
1189 END IF
1190 END IF
1191 ELSE
1192
1193 DO j = 0, k - 1
1194 CALL classq( n-j-1, a( j+1+j*lda ), 1, scale,
1195 $ s )
1196
1197 END DO
1198 DO j = 1, k - 2
1199 CALL classq( j, a( 0+( 1+j )*lda ), 1, scale,
1200 $ s )
1201
1202 END DO
1203 s = s + s
1204
1205 aa = real( a( 0 ) )
1206
1207 IF( aa.NE.zero ) THEN
1208 IF( scale.LT.aa ) THEN
1209 s = one + s*( scale / aa )**2
1210 scale = aa
1211 ELSE
1212 s = s + ( aa / scale )**2
1213 END IF
1214 END IF
1215 l = lda
1216
1217 DO i = 1, k - 1
1218 aa = real( a( l ) )
1219
1220 IF( aa.NE.zero ) THEN
1221 IF( scale.LT.aa ) THEN
1222 s = one + s*( scale / aa )**2
1223 scale = aa
1224 ELSE
1225 s = s + ( aa / scale )**2
1226 END IF
1227 END IF
1228 aa = real( a( l+1 ) )
1229
1230 IF( aa.NE.zero ) THEN
1231 IF( scale.LT.aa ) THEN
1232 s = one + s*( scale / aa )**2
1233 scale = aa
1234 ELSE
1235 s = s + ( aa / scale )**2
1236 END IF
1237 END IF
1238 l = l + lda + 1
1239 END DO
1240 END IF
1241 ELSE
1242
1243 IF( ilu.EQ.0 ) THEN
1244
1245 DO j = 1, k - 2
1246 CALL classq( j, a( 0+( k+j )*lda ), 1, scale,
1247 $ s )
1248
1249 END DO
1250 DO j = 0, k - 2
1251 CALL classq( k, a( 0+j*lda ), 1, scale, s )
1252
1253 END DO
1254 DO j = 0, k - 2
1255 CALL classq( k-j-1, a( j+1+( j+k-1 )*lda ), 1,
1256 $ scale, s )
1257
1258 END DO
1259 s = s + s
1260
1261 l = 0 + k*lda - lda
1262
1263 aa = real( a( l ) )
1264
1265 IF( aa.NE.zero ) THEN
1266 IF( scale.LT.aa ) THEN
1267 s = one + s*( scale / aa )**2
1268 scale = aa
1269 ELSE
1270 s = s + ( aa / scale )**2
1271 END IF
1272 END IF
1273 l = l + lda
1274
1275 DO j = k, n - 1
1276 aa = real( a( l ) )
1277
1278 IF( aa.NE.zero ) THEN
1279 IF( scale.LT.aa ) THEN
1280 s = one + s*( scale / aa )**2
1281 scale = aa
1282 ELSE
1283 s = s + ( aa / scale )**2
1284 END IF
1285 END IF
1286 aa = real( a( l+1 ) )
1287
1288 IF( aa.NE.zero ) THEN
1289 IF( scale.LT.aa ) THEN
1290 s = one + s*( scale / aa )**2
1291 scale = aa
1292 ELSE
1293 s = s + ( aa / scale )**2
1294 END IF
1295 END IF
1296 l = l + lda + 1
1297 END DO
1298 ELSE
1299
1300 DO j = 1, k - 1
1301 CALL classq( j, a( 0+j*lda ), 1, scale, s )
1302
1303 END DO
1304 DO j = k, n - 1
1305 CALL classq( k, a( 0+j*lda ), 1, scale, s )
1306
1307 END DO
1308 DO j = 0, k - 3
1309 CALL classq( k-j-2, a( j+2+j*lda ), 1, scale,
1310 $ s )
1311
1312 END DO
1313 s = s + s
1314
1315 l = 0
1316
1317 DO i = 0, k - 2
1318 aa = real( a( l ) )
1319
1320 IF( aa.NE.zero ) THEN
1321 IF( scale.LT.aa ) THEN
1322 s = one + s*( scale / aa )**2
1323 scale = aa
1324 ELSE
1325 s = s + ( aa / scale )**2
1326 END IF
1327 END IF
1328 aa = real( a( l+1 ) )
1329
1330 IF( aa.NE.zero ) THEN
1331 IF( scale.LT.aa ) THEN
1332 s = one + s*( scale / aa )**2
1333 scale = aa
1334 ELSE
1335 s = s + ( aa / scale )**2
1336 END IF
1337 END IF
1338 l = l + lda + 1
1339 END DO
1340
1341 aa = real( a( l ) )
1342
1343 IF( aa.NE.zero ) THEN
1344 IF( scale.LT.aa ) THEN
1345 s = one + s*( scale / aa )**2
1346 scale = aa
1347 ELSE
1348 s = s + ( aa / scale )**2
1349 END IF
1350 END IF
1351 END IF
1352 END IF
1353 ELSE
1354
1355 IF( ifm.EQ.1 ) THEN
1356
1357 IF( ilu.EQ.0 ) THEN
1358
1359 DO j = 0, k - 2
1360 CALL classq( k-j-1, a( k+j+2+j*lda ), 1, scale,
1361 $ s )
1362
1363 END DO
1364 DO j = 0, k - 1
1365 CALL classq( k+j, a( 0+j*lda ), 1, scale, s )
1366
1367 END DO
1368 s = s + s
1369
1370 l = k
1371
1372 DO i = 0, k - 1
1373 aa = real( a( l ) )
1374
1375 IF( aa.NE.zero ) THEN
1376 IF( scale.LT.aa ) THEN
1377 s = one + s*( scale / aa )**2
1378 scale = aa
1379 ELSE
1380 s = s + ( aa / scale )**2
1381 END IF
1382 END IF
1383 aa = real( a( l+1 ) )
1384
1385 IF( aa.NE.zero ) THEN
1386 IF( scale.LT.aa ) THEN
1387 s = one + s*( scale / aa )**2
1388 scale = aa
1389 ELSE
1390 s = s + ( aa / scale )**2
1391 END IF
1392 END IF
1393 l = l + lda + 1
1394 END DO
1395 ELSE
1396
1397 DO j = 0, k - 1
1398 CALL classq( n-j-1, a( j+2+j*lda ), 1, scale,
1399 $ s )
1400
1401 END DO
1402 DO j = 1, k - 1
1403 CALL classq( j, a( 0+j*lda ), 1, scale, s )
1404
1405 END DO
1406 s = s + s
1407
1408 l = 0
1409
1410 DO i = 0, k - 1
1411 aa = real( a( l ) )
1412
1413 IF( aa.NE.zero ) THEN
1414 IF( scale.LT.aa ) THEN
1415 s = one + s*( scale / aa )**2
1416 scale = aa
1417 ELSE
1418 s = s + ( aa / scale )**2
1419 END IF
1420 END IF
1421 aa = real( a( l+1 ) )
1422
1423 IF( aa.NE.zero ) THEN
1424 IF( scale.LT.aa ) THEN
1425 s = one + s*( scale / aa )**2
1426 scale = aa
1427 ELSE
1428 s = s + ( aa / scale )**2
1429 END IF
1430 END IF
1431 l = l + lda + 1
1432 END DO
1433 END IF
1434 ELSE
1435
1436 IF( ilu.EQ.0 ) THEN
1437
1438 DO j = 1, k - 1
1439 CALL classq( j, a( 0+( k+1+j )*lda ), 1, scale,
1440 $ s )
1441
1442 END DO
1443 DO j = 0, k - 1
1444 CALL classq( k, a( 0+j*lda ), 1, scale, s )
1445
1446 END DO
1447 DO j = 0, k - 2
1448 CALL classq( k-j-1, a( j+1+( j+k )*lda ), 1,
1449 $ scale,
1450 $ s )
1451
1452 END DO
1453 s = s + s
1454
1455 l = 0 + k*lda
1456
1457 aa = real( a( l ) )
1458
1459 IF( aa.NE.zero ) THEN
1460 IF( scale.LT.aa ) THEN
1461 s = one + s*( scale / aa )**2
1462 scale = aa
1463 ELSE
1464 s = s + ( aa / scale )**2
1465 END IF
1466 END IF
1467 l = l + lda
1468
1469 DO j = k + 1, n - 1
1470 aa = real( a( l ) )
1471
1472 IF( aa.NE.zero ) THEN
1473 IF( scale.LT.aa ) THEN
1474 s = one + s*( scale / aa )**2
1475 scale = aa
1476 ELSE
1477 s = s + ( aa / scale )**2
1478 END IF
1479 END IF
1480 aa = real( a( l+1 ) )
1481
1482 IF( aa.NE.zero ) THEN
1483 IF( scale.LT.aa ) THEN
1484 s = one + s*( scale / aa )**2
1485 scale = aa
1486 ELSE
1487 s = s + ( aa / scale )**2
1488 END IF
1489 END IF
1490 l = l + lda + 1
1491 END DO
1492
1493
1494 aa = real( a( l ) )
1495
1496 IF( aa.NE.zero ) THEN
1497 IF( scale.LT.aa ) THEN
1498 s = one + s*( scale / aa )**2
1499 scale = aa
1500 ELSE
1501 s = s + ( aa / scale )**2
1502 END IF
1503 END IF
1504 ELSE
1505
1506 DO j = 1, k - 1
1507 CALL classq( j, a( 0+( j+1 )*lda ), 1, scale,
1508 $ s )
1509
1510 END DO
1511 DO j = k + 1, n
1512 CALL classq( k, a( 0+j*lda ), 1, scale, s )
1513
1514 END DO
1515 DO j = 0, k - 2
1516 CALL classq( k-j-1, a( j+1+j*lda ), 1, scale,
1517 $ s )
1518
1519 END DO
1520 s = s + s
1521
1522 l = 0
1523
1524 aa = real( a( l ) )
1525
1526 IF( aa.NE.zero ) THEN
1527 IF( scale.LT.aa ) THEN
1528 s = one + s*( scale / aa )**2
1529 scale = aa
1530 ELSE
1531 s = s + ( aa / scale )**2
1532 END IF
1533 END IF
1534 l = lda
1535
1536 DO i = 0, k - 2
1537 aa = real( a( l ) )
1538
1539 IF( aa.NE.zero ) THEN
1540 IF( scale.LT.aa ) THEN
1541 s = one + s*( scale / aa )**2
1542 scale = aa
1543 ELSE
1544 s = s + ( aa / scale )**2
1545 END IF
1546 END IF
1547 aa = real( a( l+1 ) )
1548
1549 IF( aa.NE.zero ) THEN
1550 IF( scale.LT.aa ) THEN
1551 s = one + s*( scale / aa )**2
1552 scale = aa
1553 ELSE
1554 s = s + ( aa / scale )**2
1555 END IF
1556 END IF
1557 l = l + lda + 1
1558 END DO
1559
1560 aa = real( a( l ) )
1561
1562 IF( aa.NE.zero ) THEN
1563 IF( scale.LT.aa ) THEN
1564 s = one + s*( scale / aa )**2
1565 scale = aa
1566 ELSE
1567 s = s + ( aa / scale )**2
1568 END IF
1569 END IF
1570 END IF
1571 END IF
1572 END IF
1573 VALUE = scale*sqrt( s )
1574 END IF
1575
1577 RETURN
1578
1579
1580
logical function sisnan(sin)
SISNAN tests input for NaN.
real function clanhf(norm, transr, uplo, n, a, work)
CLANHF returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine classq(n, x, incx, scale, sumsq)
CLASSQ updates a sum of squares represented in scaled form.
logical function lsame(ca, cb)
LSAME