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