首页 > 解决方案 > 双精度函数 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

标签: fortransimulationspectrum

解决方案


推荐阅读