24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1892  |  回复: 18
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zyj8119

木虫 (著名写手)

[交流] 【求助】有很多错误的程序,找不出来了 已有2人参与

c     此程序是运用peng-robinson方程计算气体的逸度系数faita(1),faita(2),是利用牛顿迭代法求解
c     然后通过origin拟合得到这些数据N1,N2,m1,m2,K1,K2
c     求解得到f1,f2,x1的过程,首先利用牛顿迭代法求解x1, 然后利用表达式求解f1,f2
      PROGRAM MAIN
        LOGICAL converged
        REAL EXTERNAL FUNCTION MS MSD  G dG
        integer::S N SQ
        parameter(EPS=1.0E-06,R=83.14,epsilon=1-2**(0.5),sigma=1+2**(0.5)
     *)
        dimension:: faita(7),ns(4),ma(4),K(4),A(1000000),M(7),omiga(7),
     *Tc(7),Pc(7),Z(1000000),b(7),beta(7),alpha(7),q(7),as(7),Z1(7)
      real:: alpha,beta,Tr,omiga,M,rho(7),q,a,b,SV,I(7)
        DATA  (ns=(/2.0,3.0,4.0,5.0/);ma=(/1.0,2.0,3.0,
     *4.0/);K=(/5.0,6.0,7.0,8.0/);M=(/16.043,30.070,44.097,
     *58.123,72.150, 44.01, 28.01/);omiga=(/0.012,0.100,0.152,0.2,
     *0.252,0.224,0.048/);Tc=(/190.6,305.3,369.8,425.1,469.7,304.2,
     *132.9/);Pc=(/45.99,48.72,42.48,37.96,33.70,73.83,34.99/)
        READ(*,*)P1
        P=P1/100
      SV=(1-(T/Tc(N))**(0.5))**2
      alpha(N)=(1+(0.37464+1.54226*omiga(N)-0.26992*omiga(N)**2)*SV)
      as(N)=((0.45724*R**2*Tc(N)**2)/Pc(N))*alpha(N)
      b(N)=0.07779*R*Tc(N)/Pc(N)
      beta(N)=b(N)*P/(R*T)
      q(N)=as(N)*alpha(N)*P/(R**2*T**2)
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
     *(q*beta(N)-beta(N)**2-beta(N)**3)
        MSD(Z)=3*Z**2-2*(1-beta(N))*Z+(q(N)-2*beta(N)-3*beta(N)**2)
      IF(N.LT.7.AND.N.GT.1)THEN
        DO WHILE(.not.converged.and.ABS(MSD(Z)).GT.0)
        Z=Z-MS(Z)/MSD(Z)
        converged=(abs(MS(Z)/MSD(Z)).LT.EPS)
      END DO
        ELSE
        END IF
        Z1(N)=Z
     
      DO 4 N=1,7
        I(N)=(1/(sigma-epsilon))*log((Z1(N)+sigma*beta(N))/
     *(Z1(N)+epsilon*beta(N)))
        rho(N)=(P/(Z1(N)*R*T))*M(N)*EPS
      faita(N)=exp(Z1(N)-1-log(Z1(N)-beta)-q(N)*I(N))
4    CONTINUE     
   

        f1=P*y1*faita(1)/X
      f2=P*(1-y1)*faita(2)/(1-X)
        G(X)=ns(1)*LOG(1+K(1)*f1**m(1))+ns(2)*LOG(1+K(2)*f1**ma(2))-
     *ns(3)*LOG(1+K(3)*f2**m(3))+ns(4)*LOG(1+K(4)*f2**ma(4))            
      dG(X)=(ma(1)*ns(1)*K(1)*f1*(ma(1)-1))/(1+K(1)*f1**ma(1))+
     *(ma(2)*ns(2)*K2*f1*(ma(2)-1))/(1+K(2)*f1**m(2))-
     *(ma(3)*ns(3)*K(3)*f2*(ma(3)-1))/(1+K(3)*f2**ma(3))+
     *(ma(4)*ns(4)*K4*f2*(ma(4)-1))/(1+K(4)*f2**ma(4))
      S=0
      DO WHILE(.not.converged.and.ABS(dG(X)).GT.0)
      X=X-G(X)/dG(X)
      S=S+1
      converged=(abs(G(X)/dG(X)).LT.EPS)
      END DO
        x1=X
20    format(1x,3F9.4)
      write(20,*)f1,f2,x1
        end
      --------------------Configuration: bb - Win32 Debug--------------------
Compiling Fortran...
D:\vc++\MSDev98\MyProjects\22\bb.for
D:\vc++\MSDev98\MyProjects\22\bb.for(14) : Error: Syntax error, found ';' when expecting one of: , )
DATA  (ns=(/2.0,3.0,4.0,5.0/);ma=(/1.0,2.0,3.0,
-------------------------------------^
D:\vc++\MSDev98\MyProjects\22\bb.for(27) : Error: This name has not been declared as an array.   [MS]
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(27) : Error: The shapes of the array expressions do not conform.
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
-----------------------------------------------------------------^
D:\vc++\MSDev98\MyProjects\22\bb.for(27) : Error: The shapes of the array expressions do not conform.   [MS]
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(29) : Error: This name has not been declared as an array.   [MSD]
MSD(Z)=3*Z**2-2*(1-beta(N))*Z+(q(N)-2*beta(N)-3*beta(N)**2)
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(29) : Error: The shapes of the array expressions do not conform.   [MSD]
MSD(Z)=3*Z**2-2*(1-beta(N))*Z+(q(N)-2*beta(N)-3*beta(N)**2)
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(37) : Error: The shapes of the array expressions do not conform.   [Z1]
Z1(N)=Z
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(43) : Error: The shapes of the array expressions do not conform.   [FAITA]
      faita(N)=exp(Z1(N)-1-log(Z1(N)-beta)-q(N)*I(N))
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(49) : Error: This name has not been declared as an array.   [G]
G(X)=ns(1)*LOG(1+K(1)*f1**m(1))+ns(2)*LOG(1+K(2)*f1**ma(2))-
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(51) : Error: This name has not been declared as an array.   [DG]
      dG(X)=(ma(1)*ns(1)*K(1)*f1*(ma(1)-1))/(1+K(1)*f1**ma(1))+
------^
Error executing df.exe.

bb.obj - 10 error(s), 0 warning(s)
回复此楼
好好学习,天天向上。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by snoopyzhao at 2010-07-11 13:45:13:
看不懂你要做什么,不过有几点建议:

你的程序似乎是 Fortran77 的固定格式,而且里面的循环什么的也是按 Fortran 77 样式写的。但里面有些写法似乎又是 Fortran 90 的样式,这样很不好,建议按一种风格来写你 ...

我想定义一个函数,但是错误里面好像非要我搞成数组啊,MS(Z)是一个Z的函数,MSD(Z)是MS(Z)的导数,这样可以利用牛顿迭代法求解,下面的也是,G(X)是函数本身,  dG(X)是G(X)的导数。
好好学习,天天向上。
4楼2010-07-11 14:30:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

zyj8119

木虫 (著名写手)

改成这样,还有7个错误   
c     此程序是运用peng-robinson方程计算气体的逸度系数faita(1),faita(2),是利用牛顿迭代法求解
c     然后通过origin拟合得到这些数据N1,N2,m1,m2,K1,K2
c     求解得到f1,f2,x1的过程,首先利用牛顿迭代法求解x1, 然后利用表达式求解f1,f2
      PROGRAM MAIN
        LOGICAL converged
        REAL EXTERNAL FUNCTION MS MSD  G dG
        integer::S N SQ
        parameter(EPS=1.0E-06,R=83.14,epsilon=1-2**(0.5),sigma=1+2**(0.5)
     *)
        dimension:: faita(7),ns(4),ma(4),K(4),M(7),omiga(7),
     *Tc(7),Pc(7),b(7),beta(7),alpha(7),q(7),as(7),Z1(7)
      real:: alpha,beta,Tr,omiga,M,rho(7),q,a,b,SV,I(7)
        DATA  (ns=(/2.0,3.0,4.0,5.0/);ma=(/1.0,2.0,3.0,4.0/);
     *K=(/5.0,6.0,7.0,8.0/);M=(/16.043,30.070,44.097,
     *58.123,72.150, 44.01, 28.01/);omiga=(/0.012,0.100,0.152,0.2,
     *0.252,0.224,0.048/);Tc=(/190.6,305.3,369.8,425.1,469.7,304.2,
     *132.9/);Pc=(/45.99,48.72,42.48,37.96,33.70,73.83,34.99/)
        READ(*,*)P1
        P=P1/100
      SV=(1-(T/Tc(N))**(0.5))**2
      alpha(N)=(1+(0.37464+1.54226*omiga(N)-0.26992*omiga(N)**2)*SV)
      as(N)=((0.45724*R**2*Tc(N)**2)/Pc(N))*alpha(N)
      b(N)=0.07779*R*Tc(N)/Pc(N)
      beta(N)=b(N)*P/(R*T)
      q(N)=as(N)*alpha(N)*P/(R**2*T**2)
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
     *(q*beta(N)-beta(N)**2-beta(N)**3)
        MSD(Z)=3*Z**2-2*(1-beta(N))*Z+(q(N)-2*beta(N)-3*beta(N)**2)
      IF(N.LT.7.AND.N.GT.1)THEN
        DO WHILE(.not.converged.and.ABS(MSD(Z)).GT.0)
        Z=Z-MS(Z)/MSD(Z)
        converged=(abs(MS(Z)/MSD(Z)).LT.EPS)
      END DO
        ELSE
        END IF
        Z1(N)=Z
     
      DO 4 N=1,7
        I(N)=(1/(sigma-epsilon))*log((Z1(N)+sigma*beta(N))/
     *(Z1(N)+epsilon*beta(N)))
        rho(N)=(P/(Z1(N)*R*T))*M(N)*EPS
      faita(N)=exp(Z1(N)-1-log(Z1(N)-beta)-q(N)*I(N))
4    CONTINUE     
   

        f1=P*y1*faita(1)/X
      f2=P*(1-y1)*faita(2)/(1-X)
        G(X)=ns(1)*LOG(1+K(1)*f1**m(1))+ns(2)*LOG(1+K(2)*f1**ma(2))-
     *ns(3)*LOG(1+K(3)*f2**m(3))+ns(4)*LOG(1+K(4)*f2**ma(4))            
      dG(X)=(ma(1)*ns(1)*K(1)*f1*(ma(1)-1))/(1+K(1)*f1**ma(1))+
     *(ma(2)*ns(2)*K2*f1*(ma(2)-1))/(1+K(2)*f1**m(2))-
     *(ma(3)*ns(3)*K(3)*f2*(ma(3)-1))/(1+K(3)*f2**ma(3))+
     *(ma(4)*ns(4)*K4*f2*(ma(4)-1))/(1+K(4)*f2**ma(4))
      S=0
      DO WHILE(.not.converged.and.ABS(dG(X)).GT.0)
      X=X-G(X)/dG(X)
      S=S+1
      converged=(abs(G(X)/dG(X)).LT.EPS)
      END DO
        x1=X
20    format(1x,3F9.4)
      write(20,*)f1,f2,x1
        end
--------------------Configuration: bb - Win32 Debug--------------------
Compiling Fortran...
D:\vc++\MSDev98\MyProjects\22\bb.for
D:\vc++\MSDev98\MyProjects\22\bb.for(14) : Error: Syntax error, found ';' when expecting one of: , )
DATA  (ns=(/2.0,3.0,4.0,5.0/);ma=(/1.0,2.0,3.0,4.0/);
-------------------------------------^
D:\vc++\MSDev98\MyProjects\22\bb.for(27) : Error: This name has not been declared as an array.   [MS]
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(27) : Error: The shapes of the array expressions do not conform.   [MS]
      MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(29) : Error: This name has not been declared as an array.   [MSD]
MSD(Z)=3*Z**2-2*(1-beta(N))*Z+(q(N)-2*beta(N)-3*beta(N)**2)
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(43) : Error: The shapes of the array expressions do not conform.   [FAITA]
      faita(N)=exp(Z1(N)-1-log(Z1(N)-beta)-q(N)*I(N))
------^
D:\vc++\MSDev98\MyProjects\22\bb.for(49) : Error: This name has not been declared as an array.   [G]
G(X)=ns(1)*LOG(1+K(1)*f1**m(1))+ns(2)*LOG(1+K(2)*f1**ma(2))-
--------^
D:\vc++\MSDev98\MyProjects\22\bb.for(51) : Error: This name has not been declared as an array.   [DG]
      dG(X)=(ma(1)*ns(1)*K(1)*f1*(ma(1)-1))/(1+K(1)*f1**ma(1))+
------^
Error executing df.exe.
好好学习,天天向上。
2楼2010-07-11 11:20:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★
余泽成(金币+3):辛苦了! 2010-07-11 16:27:27
zyj8119(金币+5):DO循环不是给了范围了吗?那么多公式? 2010-07-11 17:41:32
看不懂你要做什么,不过有几点建议:

你的程序似乎是 Fortran77 的固定格式,而且里面的循环什么的也是按 Fortran 77 样式写的。但里面有些写法似乎又是 Fortran 90 的样式,这样很不好,建议按一种风格来写你的程序,要么就是纯 Fortran 77 的,要么就是 Fortran90 的。

你的程序中有很多变量没有初值,比如
SV=(1-(T/Tc(N))**(0.5))**2
中的 N;
再如:
MS(Z)=Z**3-(1-beta(N))*Z**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-(q*beta(N)-beta(N)**2-beta(N)**3)
中的 Z。如果你这里的 MS 是一个函数(就像你前面申明的那样),那么最好用别的符号来代替 Z,否则会引起歧义。

这个程序中最大的问题也就在这些个函数的定义上面了……
3楼2010-07-11 13:45:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

$     此程序是运用peng-robinson方程计算气体的逸度系数faita(1),faita(2),是利用牛顿迭代法求解
$     然后通过origin拟合得到这些数据N1,N2,m1,m2,K1,K2
$     求解得到f1,f2,x1的过程,首先利用牛顿迭代法求解IAST理论得到x1, 然后利用表达式求解f1,f2
      PROGRAM MAIN
        LOGICAL converged
        REAL EXTERNAL FUNCTION MS MSD  G dG
        integer::S N SQ
        parameter(EPS=1.0E-06,R=83.14,epsilon=1-2**(0.5),sigma=1+2**(0.5)
     *)
        dimension:: faita(7),ns(4),ma(4),K(4),M(7),omiga(7),
     *Tc(7),Pc(7),b(7),beta(7),alpha(7),q(7),as(7),Z1(7)
      real:: alpha,beta,Tr,omiga,M,rho(7),q,a,b,SV,I(7),ZM
        DATA  (ns=(/2.0,3.0,4.0,5.0/);ma=(/1.0,2.0,3.0,4.0/);
     *K=(/5.0,6.0,7.0,8.0/);M=(/16.043,30.070,44.097,
     *58.123,72.150, 44.01, 28.01/);omiga=(/0.012,0.100,0.152,0.2,
     *0.252,0.224,0.048/);Tc=(/190.6,305.3,369.8,425.1,469.7,304.2,
     *132.9/);Pc=(/45.99,48.72,42.48,37.96,33.70,73.83,34.99/)
        READ(*,*)P1
$     计算peng-robinson方程中需要的一些参量       
        DO 3 N=1,7
        P=P1/100
      SV=(1-(T/Tc(N))**(0.5))**2
      alpha(N)=(1+(0.37464+1.54226*omiga(N)-0.26992*omiga(N)**2)*SV)
      as(N)=((0.45724*R**2*Tc(N)**2)/Pc(N))*alpha(N)
      b(N)=0.07779*R*Tc(N)/Pc(N)
      beta(N)=b(N)*P/(R*T)
      q(N)=as(N)*alpha(N)*P/(R**2*T**2)
3     CONTINUE      
$     运用牛顿迭代法开始求解压缩因子的方程       
        MS(ZM)=ZM**3-(1-beta(N))*ZM**2+(q(N)-2*beta(N)-3*beta(N)**2)*Z-
     *(q*beta(N)-beta(N)**2-beta(N)**3)
        MSD(ZM)=3*ZM**2-2*(1-beta(N))*ZM+(q(N)-2*beta(N)-3*beta(N)**2)
      IF(N.LT.7.AND.N.GT.1)THEN
        DO WHILE(.not.converged.and.ABS(MSD(ZM)).GT.0)
        ZM=ZM-MS(ZM)/MSD(ZM)
        converged=(abs(MS(ZM)/MSD(ZM)).LT.EPS)
      END DO
        ELSE
        END IF
        Z1(N)=ZM
$     求解密度和逸度   
      DO 4 N=1,7
        I(N)=(1/(sigma-epsilon))*log((Z1(N)+sigma*beta(N))/
     *(Z1(N)+epsilon*beta(N)))
        rho(N)=(P/(Z1(N)*R*T))*M(N)*EPS
      faita(N)=exp(Z1(N)-1-log(Z1(N)-beta)-q(N)*I(N))
4    CONTINUE     
   
$     运用IAST理论以及上面得到的逸度系数,开始求解IAST的方程
        f1=P*y1*faita(1)/X
      f2=P*(1-y1)*faita(2)/(1-X)
        G(X)=ns(1)*LOG(1+K(1)*f1**m(1))+ns(2)*LOG(1+K(2)*f1**ma(2))-
     *ns(3)*LOG(1+K(3)*f2**m(3))+ns(4)*LOG(1+K(4)*f2**ma(4))            
      dG(X)=(ma(1)*ns(1)*K(1)*f1*(ma(1)-1))/(1+K(1)*f1**ma(1))+
     *(ma(2)*ns(2)*K2*f1*(ma(2)-1))/(1+K(2)*f1**m(2))-
     *(ma(3)*ns(3)*K(3)*f2*(ma(3)-1))/(1+K(3)*f2**ma(3))+
     *(ma(4)*ns(4)*K4*f2*(ma(4)-1))/(1+K(4)*f2**ma(4))
      S=0
      DO WHILE(.not.converged.and.ABS(dG(X)).GT.0)
      X=X-G(X)/dG(X)
      S=S+1
      converged=(abs(G(X)/dG(X)).LT.EPS)
      END DO
        x1=X
20    format(1x,3F9.4)
      write(20,*)f1,f2,x1
        end
好好学习,天天向上。
5楼2010-07-11 14:53:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂 +4 QiMing7 2026-03-25 5/250 2026-03-29 21:10 by 唐沐儿
[考研] 一志愿双一流机械285分求调剂 +4 幸运的三木 2026-03-29 5/250 2026-03-29 14:49 by Miko19
[考研] 291求调剂 +5 Y-cap 2026-03-29 6/300 2026-03-29 13:18 by mumin1990
[考研] 一志愿北京理工大学本科211材料工程294求调剂 +8 mikasa的围巾 2026-03-28 8/400 2026-03-29 12:48 by 无际的草原
[考研] 343求调剂 +6 爱羁绊 2026-03-29 6/300 2026-03-29 12:00 by 无际的草原
[考研] 289求调剂 +13 新时代材料 2026-03-27 13/650 2026-03-29 01:16 by 544594351
[考研] 083000学硕274求调剂 +8 Li李鱼 2026-03-26 8/400 2026-03-28 20:33 by 加油向未来啊
[考研] 本科新能源科学与工程,一志愿华理能动285求调剂 +3 AZMK 2026-03-27 5/250 2026-03-28 16:19 by xxxsssccc
[考研] 070300求调剂306分 +4 26要上岸 2026-03-27 4/200 2026-03-28 13:06 by 唐沐儿
[考研] 材料求调剂一志愿哈工大324 +7 闫旭东 2026-03-28 9/450 2026-03-28 08:51 by Xu de nuo
[考研] 286求调剂 +4 丢掉懒惰 2026-03-27 7/350 2026-03-28 08:07 by baoball
[考研] 275求调剂 +10 jjjjjjjjjjl 2026-03-27 10/500 2026-03-27 23:47 by barnett0632
[考研] 考研调剂 +4 Sanmu-124 2026-03-26 4/200 2026-03-27 17:49 by kiokin
[考研] 266分求材料化工冶金矿业等专业的调剂 +4 哇呼哼呼哼 2026-03-26 4/200 2026-03-27 17:02 by zhyzzh
[考研] 安徽大学专硕生物与医药专业(086000)324分,英语已过四六级,六级521,求调剂 +4 美味可乐鸡翅 2026-03-26 4/200 2026-03-27 15:27 by 星空星月
[考研] 0703化学338求调剂! +6 Zuhui0306 2026-03-26 7/350 2026-03-27 10:35 by shangxh
[考研] 325求调剂 +5 李嘉图·S·路 2026-03-23 5/250 2026-03-27 00:42 by wxiongid
[考研] 289求调剂 +17 硕星赴 2026-03-23 17/850 2026-03-26 16:18 by 不吃魚的貓
[考研] 303求调剂 +6 蓝山月 2026-03-25 6/300 2026-03-25 22:47 by 418490947
[考研] 材料专硕找调剂 +5 哈哈哈吼吼吼哈 2026-03-23 5/250 2026-03-24 19:07 by 了了了了。。
信息提示
请填处理意见