Go to the documentation of this file.00001 SUBROUTINE SLATB5( PATH, IMAT, N, TYPE, KL, KU, ANORM, MODE,
00002 $ CNDNUM, DIST )
00003
00004
00005
00006
00007
00008
00009 REAL ANORM, CNDNUM
00010 INTEGER IMAT, KL, KU, MODE, N
00011 CHARACTER DIST, TYPE
00012 CHARACTER*3 PATH
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 REAL SHRINK, TENTH
00065 PARAMETER ( SHRINK = 0.25E0, TENTH = 0.1E+0 )
00066 REAL ONE
00067 PARAMETER ( ONE = 1.0E+0 )
00068 REAL TWO
00069 PARAMETER ( TWO = 2.0E+0 )
00070
00071
00072 REAL BADC1, BADC2, EPS, LARGE, SMALL
00073 LOGICAL FIRST
00074 CHARACTER*2 C2
00075
00076
00077 REAL SLAMCH
00078 EXTERNAL SLAMCH
00079
00080
00081 INTRINSIC MAX, SQRT
00082
00083
00084 EXTERNAL SLABAD
00085
00086
00087 SAVE EPS, SMALL, LARGE, BADC1, BADC2, FIRST
00088
00089
00090 DATA FIRST / .TRUE. /
00091
00092
00093
00094
00095
00096 IF( FIRST ) THEN
00097 FIRST = .FALSE.
00098 EPS = SLAMCH( 'Precision' )
00099 BADC2 = TENTH / EPS
00100 BADC1 = SQRT( BADC2 )
00101 SMALL = SLAMCH( 'Safe minimum' )
00102 LARGE = ONE / SMALL
00103
00104
00105
00106
00107 CALL SLABAD( SMALL, LARGE )
00108 SMALL = SHRINK*( SMALL / EPS )
00109 LARGE = ONE / SMALL
00110 END IF
00111
00112 C2 = PATH( 2: 3 )
00113
00114
00115
00116 DIST = 'S'
00117 MODE = 3
00118
00119
00120
00121 TYPE = C2( 1: 1 )
00122
00123
00124
00125 IF( IMAT.EQ.1 ) THEN
00126 KL = 0
00127 ELSE
00128 KL = MAX( N-1, 0 )
00129 END IF
00130 KU = KL
00131
00132
00133
00134 IF( IMAT.EQ.3 ) THEN
00135 CNDNUM = 1.0E4
00136 MODE = 2
00137 ELSE IF( IMAT.EQ.4 ) THEN
00138 CNDNUM = 1.0E4
00139 MODE = 1
00140 ELSE IF( IMAT.EQ.5 ) THEN
00141 CNDNUM = 1.0E4
00142 MODE = 3
00143 ELSE IF( IMAT.EQ.6 ) THEN
00144 CNDNUM = BADC1
00145 ELSE IF( IMAT.EQ.7 ) THEN
00146 CNDNUM = BADC2
00147 ELSE
00148 CNDNUM = TWO
00149 END IF
00150
00151 IF( IMAT.EQ.8 ) THEN
00152 ANORM = SMALL
00153 ELSE IF( IMAT.EQ.9 ) THEN
00154 ANORM = LARGE
00155 ELSE
00156 ANORM = ONE
00157 END IF
00158
00159 IF( N.LE.1 )
00160 $ CNDNUM = ONE
00161
00162 RETURN
00163
00164
00165
00166 END