91 integer,
parameter :: wp = kind(1.d0)
98 real(wp),
parameter :: zero = 0.0_wp
99 real(wp),
parameter :: one = 1.0_wp
100 complex(wp),
parameter :: czero = 0.0_wp
103 real(wp),
parameter :: safmin = real(radix(0._wp),wp)**max( &
104 minexponent(0._wp)-1, &
105 1-maxexponent(0._wp) &
107 real(wp),
parameter :: safmax = real(radix(0._wp),wp)**max( &
108 1-minexponent(0._wp), &
109 maxexponent(0._wp)-1 &
111 real(wp),
parameter :: rtmin = sqrt( real(radix(0._wp),wp)**max( &
112 minexponent(0._wp)-1, &
113 1-maxexponent(0._wp) &
115 real(wp),
parameter :: rtmax = sqrt( real(radix(0._wp),wp)**max( &
116 1-minexponent(0._wp), &
117 maxexponent(0._wp)-1 &
122 complex(wp) :: a, b, s
125 real(wp) :: d, f1, f2, g1, g2, h2, p, u, uu, v, vv, w
126 complex(wp) :: f, fs, g, gs, r, t
129 intrinsic :: abs, aimag, conjg, max, min, real, sqrt
135 abssq( t ) = real( t )**2 + aimag( t )**2
141 if( g == czero )
then
145 else if( f == czero )
then
147 g1 = max( abs(real(g)), abs(aimag(g)) )
148 if( g1 > rtmin .and. g1 < rtmax )
then
160 u = min( safmax, max( safmin, g1 ) )
169 f1 = max( abs(real(f)), abs(aimag(f)) )
170 g1 = max( abs(real(g)), abs(aimag(g)) )
171 if( f1 > rtmin .and. f1 < rtmax .and. &
172 g1 > rtmin .and. g1 < rtmax )
then
179 if( f2 > rtmin .and. h2 < rtmax )
then
182 d = sqrt( f2 )*sqrt( h2 )
186 s = conjg( g )*( f*p )
192 u = min( safmax, max( safmin, f1, g1 ) )
196 if( f1*uu < rtmin )
then
201 v = min( safmax, max( safmin, f1 ) )
216 if( f2 > rtmin .and. h2 < rtmax )
then
219 d = sqrt( f2 )*sqrt( h2 )
223 s = conjg( gs )*( fs*p )
224 r = ( fs*( h2*p ) )*u
subroutine zrotg(a, b, c, s)
ZROTG