fortran beginner - 将变量写入输出文件

时间:2014-02-20 15:49:24

标签: fortran

我开始使用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以查看它是否已增加?如果有的话,有人会指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果我正确理解了要求,那么您需要在开始写出之前计算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

答案 1 :(得分:0)

如果这是时间依赖的,那么你必须定义一个大小为2的数组SURFELMAX(1:LA,1:T)(T =时间步数,LA =有效坐标数) )。

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