我开始使用CFD fortran程序,并希望更新它写入输出文件的变量。
我想输出多个列,I和J坐标(IL
和JL
),水面高程(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
以查看它是否已增加?如果有的话,有人会指出我正确的方向吗?
答案 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)