【问题标题】:fortran beginner - writing variable to output filefortran初学者 - 将变量写入输出文件
【发布时间】:2014-02-20 15:49:24
【问题描述】:

我开始使用 CFD fortran 程序,并希望更新它写入输出文件的变量。

我要输出几列,I和J坐标(ILJL),水面高程(SURFEL),坐标底部高程(BELV),水深(HP ) 最后,这就是我的问题所在,模拟期间坐标的最大水面高程 (SURFELMAX)。 L 指的是特定的 I,J 坐标,LA 是模拟中的最后一个坐标

到目前为止,我有:

DO L=2,LA  
   SURFEL=BELV(L)+HP(L)
   IF (SURFEL.GT.SURFELMAX)THEN
      SURFELMAX=SURFEL
   ELSE IF (SURFELMAX.GT.SURFEL) THEN 
      SURFELMAX=SURFELMAX
      WRITE(10,200)IL(L),JL(L),SURFEL,SURFELMAX 
   ENDIF 
ENDDO

除了SURFELMAX 之外,一切正常,其中为每个坐标写入了整个域中任何坐标中发生的最高记录表面高程,即该列填充了相同的值,在模拟过程中的整个域。

我是否需要先为SURFELMAX 分配一个数组,然后每次都检查SURFEL 以查看它是否增加了?如果是这样,有人可以为我指出正确的方向吗?

【问题讨论】:

    标签: fortran


    【解决方案1】:

    如果我正确理解了要求,那么您想在开始写之前计算SURFELMAX。这可能只是:

    SURFELMAX = MAXVAL(BELV(2:LA)+HP(2:LA))
    WRITE(10,200) (IL(L), JL(L), BELV(L)+HP(L), SURFELMAX, L=2,LA)
    

    (甚至作为单行)。

    看来我没有正确理解;我会再试一次 - 保留以上内容作为对其他人的警告。

    看来您确实想要SURFELMAX(2:LA),其中每个元素都是迄今为止给定单元格中的最高值。

    do L=2, LA
      SURFELMAX(L) = MAX(SURFELMAX(L), BELV(L)+HP(L))  ! Store the historical maximum
      WRITE (10,200) IL(L), JL(L), BELV(L)+HP(L), SURFELMAX(L)
    end do
    

    最初,SURFELMAX 已设置为足够小的值。如果需要,您还可以显式计算 SURFEL

    【讨论】:

    • 感谢您的快速回复 - 我不确定这是否适用于我所追求的 - 例如该软件模拟了几个月的河流流量,每 15 分钟将水位写入文件。我正在寻找一个输出文件,该文件记录了在整个模拟过程中每个网格单元中单独经历的最大水位。我想我需要在每个时间步创建一个大小为 L 的水位数组,如果在该时间步发现任何更高的值,则更新另一个数组?这听起来正确吗?我该怎么写呢?谢谢你的帮助
    • 谢谢你们的帮助,我想我现在可以写出我需要的东西了。非常感谢您的帮助。
    【解决方案2】:

    如果这是时间相关的,那么您将必须定义一个大小为 (1:LA,1:T) 的二维数组 SURFELMAX(T = 时间步数,LA = 活动坐标数)。

    然后在循环外通过域递增时间步长(例如,迭代器称为 I_T)。 最后将每个坐标处的最大值赋给SURFELMAX(I_T,L)

    【讨论】:

    • 谢谢你们的帮助,我想我现在可以写出我需要的东西了。非常感谢您的帮助。
    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2020-12-31
    • 2013-06-28
    • 2013-02-07
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多