You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在第二个DO循环中调用第一个DO循环的results(k(i))?当前结果异常

解决你的Fortran循环K值复用问题

首先,你的核心问题出在第一个DO循环没有正确存储每个i对应的K值,导致第二个循环调用K(i)时拿到的是无效数据。咱们拆解来看:

问题1:K变量未声明为数组,且赋值错误

你当前的代码里,第一个循环写的是:

K = (pc(I)/p)*EXP(5.37*(1+w(I))*(1-(tc(I)/t)))
write(*,99001)K(i)

这里的K是一个标量(单个值),每次循环都会被新的计算结果覆盖,而且K(i)的写法本身就不合法(标量没有下标)。这就导致第一个循环结束后,K只保留了最后一次循环的结果,前面5个组分的K值完全丢失了,第二个循环自然拿不到正确的K(i)。

修复步骤

  1. 声明K为数组:在代码开头(变量声明区)添加数组声明,比如假设你的pc、tc、w都是长度为6的实数数组,那么:
    REAL, DIMENSION(6) :: K, pc, tc, w, Z  ! 把相关数组都明确声明
    REAL :: p, t, VOLD, FV, FPV
    INTEGER :: i
    
  2. 正确存储每个i的K值:修改第一个循环的赋值语句,把计算结果存入数组的对应下标位置:
    do i=1,6
      K(i) = (pc(I)/p)*EXP(5.37*(1+w(I))*(1-(tc(I)/t)))  ! 用K(i)存储第i个组分的K值
      write(*,99001)K(i)
    end do
    
  3. 检查其他变量的初始化:第二个循环里用到的VOLD和Z(i),要确保它们已经被正确初始化(比如VOLD初始设为0.5或者其他合理的初始值,Z数组要有预先定义的组分摩尔分数),否则即使K值正确,计算FV和FPV也会得到错误结果。

修正后的完整代码示例

PROGRAM FLASH_CALC
  IMPLICIT NONE  ! 一定要加这个,避免隐式声明导致的错误
  REAL, DIMENSION(6) :: K, pc, tc, w, Z
  REAL :: p, t, VOLD, FV, FPV
  INTEGER :: i

  WRITE(*,*) "Enter PRESSURE,TEMPERATURE"
  READ *,p,t

  ! 这里需要给pc、tc、w、Z、VOLD赋值,示例如下:
  ! pc = [10.0, 20.0, 30.0, 40.0, 50.0, 60.0]  ! 临界压力值(根据实际组分调整)
  ! tc = [300.0, 400.0, 500.0, 600.0, 700.0, 800.0]  ! 临界温度值
  ! w = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]  ! 偏心因子
  ! Z = [0.1667, 0.1667, 0.1667, 0.1667, 0.1667, 0.1667]  ! 组分摩尔分数
  ! VOLD = 0.5  ! 初始汽相分率

  WRITE(*,*) "Approximate K values for each component using Wilson's correlation are;"
  do i=1,6
    K(i) = (pc(I)/p)*EXP(5.37*(1+w(I))*(1-(tc(I)/t)))
    write(*,99001)K(i)
  end do

  !.......vapor fraction..............
  WRITE(*,*) "Calculated FV and FPV for each component;"
  do i=1,6
    FV=(Z(I)*(K(i)-1))/((VOLD*(K(i)-1))+1)
    FPV=-(Z(I)*((K(i)-1)**2))/((1+(VOLD*(K(i)-1)))**2)  ! 修正了原代码的括号错误
    write(*,99001)fv,fpv
  end do

99001 FORMAT (9F15.6)
END PROGRAM FLASH_CALC

额外注意点

  • 一定要加IMPLICIT NONE!Fortran的隐式声明规则(以I-N开头的变量默认是整数)很容易导致隐藏错误,显式声明所有变量能避免大部分问题。
  • 原代码的FPV计算里,分母的括号有问题:1+(VOLD*(K(i)-1))需要整体平方,原代码的写法会导致运算优先级错误,我在修正代码里已经调整了括号位置。

内容的提问来源于stack exchange,提问作者priest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:27