|
[Fortran] 纯文本查看 复制代码 001 | SUBROUTINE cbdb ( cz , cnu , fn , w ) |
014 | REAL ( dp ) , INTENT ( IN ) :: fn |
018 | REAL ( dp ) :: is , inu , izn |
024 | REAL ( dp ) , PARAMETER :: c = . 398942280401433 _dp , pi = 3.14159265358979 _dp , & |
025 | pi 2 = 6.28318530717959 _dp , bnd = 1.04719755119660 _dp |
027 | REAL ( dp ) :: alpha , am , aq , ar |
028 | REAL ( dp ) :: phi , sgn , theta |
029 | REAL ( dp ) :: u , v , x , y |
030 | INTEGER :: ind , k , l , m |
037 | REAL ( dp ) :: a ( 136 ) = ( / 1.0 _dp , - . 208333333333333 _dp , . 125000000000000 _dp , . 334201388888889 _dp , & |
038 | - . 401041666666667 _dp , . 703125000000000 D -01 , - . 102581259645062 D +01 , . 184646267361111 D +01 , & |
039 | - . 891210937500000 _dp , . 732421875000000 D -01 , . 466958442342625 D +01 , - . 112070026162230 D +02 , & |
040 | . 878912353515625 D +01 , - . 236408691406250 D +01 , . 112152099609375 _dp , - . 282120725582002 D +02 , & |
041 | . 846362176746007 D +02 , - . 918182415432400 D +02 , . 425349987453885 D +02 , - . 736879435947963 D +01 , & |
042 | . 227108001708984 _dp , . 212570130039217 D +03 , - . 765252468141182 D +03 , . 105999045252800 D +04 , & |
043 | - . 699579627376133 D +03 , . 218190511744212 D +03 , - . 264914304869516 D +02 , . 572501420974731 _dp , & |
044 | - . 191945766231841 D +04 , . 806172218173731 D +04 , - . 135865500064341 D +05 , . 116553933368645 D +05 , & |
045 | - . 530564697861340 D +04 , . 120090291321635 D +04 , - . 108090919788395 D +03 , . 172772750258446 D +01 , & |
046 | . 202042913309661 D +05 , - . 969805983886375 D +05 , . 192547001232532 D +06 , - . 203400177280416 D +06 , & |
047 | . 122200464983017 D +06 , - . 411926549688976 D +05 , . 710951430248936 D +04 , - . 493915304773088 D +03 , & |
048 | . 607404200127348 D +01 , - . 242919187900551 D +06 , . 131176361466298 D +07 , - . 299801591853811 D +07 , & |
049 | . 376327129765640 D +07 , - . 281356322658653 D +07 , . 126836527332162 D +07 , - . 331645172484564 D +06 , & |
050 | . 452187689813627 D +05 , - . 249983048181121 D +04 , . 243805296995561 D +02 , . 328446985307204 D +07 , & |
051 | - . 197068191184322 D +08 , . 509526024926646 D +08 , - . 741051482115327 D +08 , . 663445122747290 D +08 , & |
052 | - . 375671766607634 D +08 , . 132887671664218 D +08 , - . 278561812808645 D +07 , . 308186404612662 D +06 , & |
053 | - . 138860897537170 D +05 , . 110017140269247 D +03 , - . 493292536645100 D +08 , . 325573074185766 D +09 , & |
054 | - . 939462359681578 D +09 , . 155359689957058 D +10 , - . 162108055210834 D +10 , . 110684281682301 D +10 , & |
055 | - . 495889784275030 D +09 , . 142062907797533 D +09 , - . 244740627257387 D +08 , . 224376817792245 D +07 , & |
056 | - . 840054336030241 D +05 , . 551335896122021 D +03 , . 814789096118312 D +09 , - . 586648149205185 D +10 , & |
057 | . 186882075092958 D +11 , - . 346320433881588 D +11 , . 412801855797540 D +11 , - . 330265997498007 D +11 , & |
058 | . 179542137311556 D +11 , - . 656329379261928 D +10 , . 155927986487926 D +10 , - . 225105661889415 D +09 , & |
059 | . 173951075539782 D +08 , - . 549842327572289 D +06 , . 303809051092238 D +04 , - . 146792612476956 D +11 , & |
060 | . 114498237732026 D +12 , - . 399096175224466 D +12 , . 819218669548577 D +12 , - . 109837515608122 D +13 , & |
061 | . 100815810686538 D +13 , - . 645364869245377 D +12 , . 287900649906151 D +12 , - . 878670721780233 D +11 , & |
062 | . 176347306068350 D +11 , - . 216716498322380 D +10 , . 143157876718889 D +09 , - . 387183344257261 D +07 , & |
063 | . 182577554742932 D +05 , . 286464035717679 D +12 , - . 240629790002850 D +13 , . 910934118523990 D +13 , & |
064 | - . 205168994109344 D +14 , . 305651255199353 D +14 , - . 316670885847852 D +14 , . 233483640445818 D +14 , & |
065 | - . 123204913055983 D +14 , . 461272578084913 D +13 , - . 119655288019618 D +13 , . 205914503232410 D +12 , & |
066 | - . 218229277575292 D +11 , . 124700929351271 D +10 , - . 291883881222208 D +08 , . 118838426256783 D +06 , & |
067 | - . 601972341723401 D +13 , . 541775107551060 D +14 , - . 221349638702525 D +15 , . 542739664987660 D +15 , & |
068 | - . 889496939881026 D +15 , . 102695519608276 D +16 , - . 857461032982895 D +15 , . 523054882578445 D +15 , & |
069 | - . 232604831188940 D +15 , . 743731229086791 D +14 , - . 166348247248925 D +14 , . 248500092803409 D +13 , & |
070 | - . 229619372968246 D +12 , . 114657548994482 D +11 , - . 234557963522252 D +09 , . 832859304016289 D +06 / ) |
087 | IF ( ABS ( izn ) <= 0.1D0 * ABS ( REAL ( zn , KIND = dp ) ) ) THEN |
089 | s = ( 1.0D0 - zn ) * ( 1.0D0 + zn ) |
094 | t = EXP ( nu * ( q + LOG ( t ) ) ) |
101 | IF ( REAL ( q , KIND = dp ) < 0.0D0 ) w = - w |
104 | t = EXP ( w + nu * LOG ( t ) ) |
110 | ar = REAL ( r , KIND = dp ) * REAL ( r , KIND = dp ) + AIMAG ( r ) * AIMAG ( r ) |
111 | aq = -1.0D0 / ( REAL ( q , KIND = dp ) * REAL ( q , KIND = dp ) + AIMAG ( q ) * AIMAG ( q ) ) |
113 | phi = ATAN2 ( y , x ) / 3.0D0 |
115 | theta = ATAN2 ( AIMAG ( q ) , REAL ( q , KIND = dp ) ) - phi |
117 | IF ( ABS ( theta ) >= 2.0D0 * bnd ) THEN |
120 | CALL dcrec ( REAL ( t , KIND = dp ) , AIMAG ( t ) , u , v ) |
121 | c 2 = - j * r * CMPLX ( u , v , KIND = dp ) |
122 | IF ( is >= 0.0D0 ) THEN |
123 | IF ( is > 0.0D0 ) GO TO 10 |
124 | IF ( REAL ( s , KIND = dp ) <= 0.0D0 ) GO TO 10 |
132 | p = ( a ( 2 ) * eta + a ( 3 ) ) * s |
133 | p 1 = ( ( a ( 4 ) * eta + a ( 5 ) ) * eta + a ( 6 ) ) * sm |
135 | IF ( ind /= 0 ) s 2 = ( 1.0D0 - p ) + p 1 |
145 | p = CMPLX ( a ( l ) , 0.0D0 , KIND = dp ) |
148 | alpha = a ( l ) + aq * alpha |
162 | IF ( 1.0D0 + alpha * am /= 1.0D0 ) THEN |
164 | IF ( m <= 16 ) GO TO 20 |
176 | theta = ATAN2 ( AIMAG ( q ) , REAL ( q , KIND = dp ) ) - phi |
177 | IF ( ABS ( theta ) <= bnd ) THEN |
182 | IF ( izn < 0.0D0 ) alpha = - alpha |
183 | t = alpha * CMPLX ( ABS ( inu ) , - fn , KIND = dp ) |
186 | r = CMPLX ( COS ( u ) , SIN ( u ) , KIND = dp ) |
187 | t = s 1 - ( alpha * r ) * s 1 |
188 | IF ( x == 0.0D0 .AND. inu == 0.0D0 ) t = - t |
191 | IF ( izn >= 0.0D0 .AND. theta <= SIGN ( pi , theta ) ) s 2 = & |
192 | s 2 * ( CONJG ( r ) / alpha ) |
193 | IF ( x == 0.0D0 ) GO TO 40 |
194 | IF ( izn >= 0.0D0 ) THEN |
195 | IF ( is < 0.0D0 ) GO TO 40 |
205 | 50 IF ( inu < 0.0D0 ) w = CONJG ( w ) |
211 | SUBROUTINE cbja ( cz , cnu , w ) |
221 | REAL ( dp ) :: eps , inu , m |
224 | REAL ( dp ) :: r , rnu , tol , u , v |
232 | REAL ( dp ) , PARAMETER :: pihalf = 1.5707963267949 _dp , c = 1.12837916709551 _dp |
247 | IF ( ABS ( x ) <= 1 .d -2 * ABS ( y ) ) THEN |
248 | IF ( AIMAG ( nu ) < 0.0D0 .AND. ABS ( REAL ( nu ) ) < 1 .d -2 * ABS ( AIMAG ( nu ) ) ) THEN |
256 | IF ( x < -1 .d -2 * y ) z = - z |
259 | zr = CMPLX ( u , v , KIND = dp ) |
278 | IF ( anorm ( t ) <= tol ) GO TO 20 |
284 | IF ( ABS ( AIMAG ( w ) ) <= 1.0D0 ) THEN |
285 | arg = w - 0.5D0 * pihalf |
286 | w = c * SQRT ( zr ) * ( p * COS ( arg ) - q * SIN ( arg ) ) |
290 | IF ( AIMAG ( z ) > 0.0D0 .AND. REAL ( z , KIND = dp ) <= 1 .d -2 * AIMAG ( z ) .AND. & |
291 | ABS ( REAL ( nu , KIND = dp ) ) < 1 .d -2 * AIMAG ( nu ) ) t = 0.5D0 * t |
292 | CALL dcrec ( REAL ( e , KIND = dp ) , AIMAG ( e ) , u , v ) |
293 | w = 0.5D0 * c * SQRT ( j * zr ) * ( ( p - j * q ) * e + t * CMPLX ( u , v , KIND = dp ) ) |
296 | IF ( x < -1 .d -2 * y ) THEN |
297 | IF ( y < 0.0D0 ) nu = - nu |
301 | rnu = REAL ( nu , KIND = dp ) |
303 | r = EXP ( -2.0D0 * pihalf * inu ) |
306 | w = w * CMPLX ( u , v , KIND = dp ) |
309 | IF ( ind /= 0 ) w = CONJG ( w ) |
|
|