fortran - 双精度函数 wp(S,wmav,ip)
问题描述
此时我使用 Plato 为 Fortran 编译免费的 IDE。
我的问题是关于如何正确编译这段代码。它总是给出一个错误代码,但每当我在谷歌上搜索时,我什么也没找到。
此代码来自使用 wp 和 Charles W Struck 的相关函数了解亮度光谱和效率。
如果有人想讨论关于这本书的亮度光谱或理论问题,我愿意。
options/g_float
double precision function wp(S,wmav,ip)
C
C
C finds one particular wp function, knowing its fundamental
C arguments S,wmav, ip.
C
C
C largest allowed ip is 70
C
C eq. (4.45)
C
C
IMPLICIT REAL*8(A-H, O-P, R-Z), LOGICAL*4(Q)
dimension pfact1(47),pfact2(24),pfact(71)
equivalence (pfact(1),pfact1(1)),(pfact(48),pfact2(1))
data pfactl/l.d000,1.d000,2.d000,6.d000,24.d000,l20.d000,720.d000,
15040.d000,40320.d000,362880.d000,3.6288d006,3.99168d007,
24.790016d008,6.2270208d009,8.71782912d010,1.307674368d012,
32.0922789888d013,3.55687428096d014,6.402373705728000d+015,
41.216451004088320d+017,2.432902008176640d+018,
55.109094217170944d+019,1.124000727777608d+021,
62.585201673888498d+022,6.204484017332395d+023,
71.551121004333099d+025,4.032914611266057d+026,
81.088886945041835d+028,3.048883446117139d+029,
98.841761993739703d+030,2.652528598121911d+032,
a8.222838654177925d+033,2.631308369336936d+035,
b8.683317618811888d+036,2.952327990396042d+038,
c1.033314796638615d+040,3.719933267899013d+041,
d1.376375309122635d+043,5.230226174666011d+044,
e2.039788208119744d+046,8.159152832478978d+047,
f3.345252661316381d+049,1.405006117752880d+051,
g6.041526306337384d+052,2.658271574788449d+054,
h1.196222208654802d+056,5.502622159812090d+057/
data pfact2/
12.586232415111682d+059,1.241391559253608d+061,
26.082818640342677d+062,3.041409320171339d+064,
31.551118753287383d+066,8.065817517094390d+067,
44.274883284060027d+069,2.308436973392415d+071,
51.269640335365828d+073,7.109985878048638d+074,
64.052691950487723d+076,
72.350561331282880d+078,1.386831185456899d+080,
88.320987112741393d+081,5.075802138772249d+083,
93.146997326038795d+085,1.982608315404441d+087,
a1.268869321858842d+089,8.247650592082473d+090,
b5.443449390774432d+092,3.647111091818869d+094,
c2.480035542436831d+096,1.711224524281413d+098,
d1.197857166996989d+100/
pr=dfloat(ip)
ipr=ip
if(ip.lt.0)then
pr=-pr
ipr=-ip
end if
boltz=wmav/(1.d000+wmav)
boltzl=dlog(boltz)
smav=S*wmav
smplav=smav+S
s2mp1=smav+smp1av
if(s2mp1.le.235.d000)then
bp=dexp(-s2mp1)*smplav**pr/pfact(ipr+1)
else
bp=dexp(dlog(s2mp1)+pr*dlog(smplav)-dlog(pfact(ipr+1)))
end if
bsum=1.d000
blsum=0.d000
blterm=1.d000
wnum=smav*smp1av
wdnom1=0.d000
wdnom2=pr
do 1 j=1,150
wdnom1=wdnom1+1.d000
wdnom2=wdnom2+1.d000
bterm=wnum*blterm/(wdnom1*wdnom2)
bsum=bsum+bterm
if(bsum.eq.blsum)then
wp=bsum*bp
if(ip.lt.0)then
if(pr*boltzl.le.200.d000)then
wp=wp*(boltz**pr)
else
wp=0.d000
end if
end if
return
else
blsum=bsum
blterm=bterm
end if
1 continue
END
错误说明:
F95(1) : error 201 - '(' expected after OPTIONS
F95(7) : error 609 - Expected '/' at end of DATA list
F95(8) : error 699 - Invalid character '.' at start of line
F95(8) : error 32 - Statement not recognised
F95(33) : warning 21 - Label 88 is declared, but not used
F95(7) : error 52 - Compilation abandoned
解决方案
推荐阅读
- python - 单独文件中的 FastAPI / Pydantic 循环引用
- performance - 如何在 Kotlin 的多个属性初始化中使用计算?
- javascript - 是否有一个内置函数会在每个间隔执行这个 DOM 操作?
- python - 如何告诉我的 Mac 使用计算机上安装的最新版本的 Python?
- python - 找不到使用 selenium (Python 3.7)单击 href 链接的方法
- node.js - Node.js 中间件读取多个猫鼬集合
- c# - 正确配置以增加 Umbraco 处理内存
- javascript - 如何在 d3 堆叠发散条形图中定义 x 属性以使条形图来自右侧?
- java - 将 JPQL 查询结果中的键集存储在 java 列表中
- python - 从类中导入变量而不创建该类的对象