|
以下的内容根据fortran code群聊天记录,尝试写的,不知道是否能对网名“蚂蚁”的群友有所帮助
[Fortran] 纯文本查看 复制代码 004 | INTEGER , PARAMETER :: DP = KIND ( 1.0 _ 16 ) |
005 | INTEGER , PARAMETER :: M = 8 |
006 | REAL ( KIND = DP ) , PARAMETER :: EPS = 5 .Q -34 |
007 | REAL ( KIND = DP ) :: A , B , ALPHA , PP , INTGVAL , C , P , D , X |
008 | REAL ( KIND = DP ) , EXTERNAL :: YOUR_FUNC |
025 | WRITE ( * , FMT = "(A,E41.34)" ) "B = " , B |
030 | CALL PHI_GAMMA ( A , X , M , ALPHA , INTGVAL ) |
044 | WRITE ( * , FMT = "(A,I2.2,2X,A,E41.34,2X,A,E41.34,2X,A,E41.34)" ) "I = " , I , "C = " , C , "X = " , X , "FUNVAL = " , D |
046 | IF ( ABS ( C ) < EPS .OR. X < A ) EXIT |
053 | SUBROUTINE PHI_GAMMA ( A , B , M , ALPHA , INTGVAL ) |
055 | INTEGER , PARAMETER :: DP = KIND ( 1.0 _ 16 ) |
057 | REAL ( KIND = DP ) , INTENT ( IN ) :: A , B |
059 | REAL ( KIND = DP ) , INTENT ( IN ) :: ALPHA |
060 | REAL ( KIND = DP ) , INTENT ( OUT ) :: INTGVAL |
061 | INTEGER , INTENT ( IN ) :: M |
063 | REAL ( KIND = DP ) , EXTERNAL :: YOUR_FUNC |
064 | REAL ( KIND = DP ) , EXTERNAL :: GUALEGINTG 12 |
076 | DX = ( B - A ) / REAL ( M , KIND = DP ) |
079 | AX ( I ) = A + REAL ( I -1 , KIND = DP ) * DX |
081 | INTGVAL = INTGVAL + GUALEGINTG 12 ( YOUR_FUNC , ALPHA , AX ( I ) , BX ( I ) ) |
084 | END SUBROUTINE PHI_GAMMA |
086 | FUNCTION YOUR_FUNC ( X , ALPHA ) |
088 | INTEGER , PARAMETER :: DP = KIND ( 1.0 _ 16 ) |
089 | REAL ( KIND = DP ) :: YOUR_FUNC |
090 | REAL ( KIND = DP ) , INTENT ( IN ) :: X , ALPHA |
091 | REAL ( KIND = DP ) :: ALF 1 , TEMP |
097 | YOUR_FUNC = ( ( X * * ALF 1 ) * EXP ( - X ) ) / TEMP |
099 | END FUNCTION YOUR_FUNC |
102 | FUNCTION GUALEGINTG 12 ( YOUR_FUNC , ALPHA , A , B ) |
104 | INTEGER , PARAMETER :: DP = KIND ( 1.0 _ 16 ) |
105 | REAL ( KIND = DP ) :: GUALEGINTG 12 |
106 | REAL ( KIND = DP ) , INTENT ( IN ) :: A , B |
107 | REAL ( KIND = DP ) :: YOUR_FUNC , ALPHA |
110 | REAL ( KIND = DP ) :: X , APB 2 , ASB 2 |
116 | REAL ( KIND = DP ) :: WEIGHTS ( 12 ) = ( / & |
117 | 0.4717533638651182719461596148501741D-01 , & |
118 | 0.1069393259953184309602547181939961D+00 , & |
119 | 0.1600783285433462263346525295433591D+00 , & |
120 | 0.2031674267230659217490644558097984D+00 , & |
121 | 0.2334925365383548087608498989248781D+00 , & |
122 | 0.2491470458134027850005624360429511D+00 , & |
123 | 0.2491470458134027850005624360429511D+00 , & |
124 | 0.2334925365383548087608498989248781D+00 , & |
125 | 0.2031674267230659217490644558097984D+00 , & |
126 | 0.1600783285433462263346525295433591D+00 , & |
127 | 0.1069393259953184309602547181939961D+00 , & |
128 | 0.4717533638651182719461596148501741D-01 & |
131 | REAL ( KIND = DP ) :: NODES ( 12 ) = ( / & |
132 | -0.9815606342467192506905490901492809D+00 , & |
133 | -0.9041172563704748566784658661190962D+00 , & |
134 | -0.7699026741943046870368938332128180D+00 , & |
135 | -0.5873179542866174472967024189405343D+00 , & |
136 | -0.3678314989981801937526915366437176D+00 , & |
137 | -0.1252334085114689154724413694638531D+00 , & |
138 | 0.1252334085114689154724413694638531D+00 , & |
139 | 0.3678314989981801937526915366437176D+00 , & |
140 | 0.5873179542866174472967024189405343D+00 , & |
141 | 0.7699026741943046870368938332128180D+00 , & |
142 | 0.9041172563704748566784658661190962D+00 , & |
143 | 0.9815606342467192506905490901492809D+00 & |
151 | RSLT = RSLT + WEIGHTS ( I ) * YOUR_FUNC ( X , ALPHA ) |
156 | END FUNCTION GUALEGINTG 12 |
|
|