If statement 若数组1中的元素大于数组2中的元素,则

If statement 若数组1中的元素大于数组2中的元素,则,if-statement,fortran,If Statement,Fortran,我刚开始使用fortran,我对if语句有一些问题。我试着写一些东西,如果数组1中的元素大于数组2中的元素,那么让h=some表达式,否则h=0。我已经在下面修改了我的密码 DO I=1,NPOIN IF ((X(I)*COS(0.0)+0.0*Y(I)*COS(0.0)+0.1)*0.15 .GT. ZF(I)) THEN H%R(I) =0.15*((X(I)*COS(0.0))+(0.0*Y(I)*COS(0.0))+0.1) ELSE H%R(I) =

我刚开始使用fortran,我对if语句有一些问题。我试着写一些东西,如果数组1中的元素大于数组2中的元素,那么让h=some表达式,否则h=0。我已经在下面修改了我的密码

  DO I=1,NPOIN 

  IF ((X(I)*COS(0.0)+0.0*Y(I)*COS(0.0)+0.1)*0.15 .GT. ZF(I)) THEN  
    H%R(I) =0.15*((X(I)*COS(0.0))+(0.0*Y(I)*COS(0.0))+0.1)
  ELSE
    H%R(I) = 1 
  ENDIF

  ENDDO 
我得到的错误是:

 IF ((X(I)*COS(0.0)+0.0*Y(I)*COS(0.0)+0.1)*0.15 .GT. ZF(I)) THEN  

Error: Syntax error in IF-expression at (1)
如果这是很明显的事情,我表示歉意,但到目前为止,我已经尝试了各种方法来解决它,但没有任何乐趣。任何帮助都将不胜感激

可能有更好的方法来比较这两个数组,但实际上我尝试将ZF作为我的主数组,但是当H大于ZF时,我希望将ZF值替换为H值。所以本质上我有一个新的数组,在两个数组之间有可能的最大值

提前感谢

可能有更好的方法来比较这两个阵列,但实际上我尝试将ZF作为我的主阵列,但是当H大于ZF时,我希望用H值替换ZF值。所以本质上我有一个新的数组,在两个数组之间有可能的最大值

如果
h
zf
具有相同的形状,您可以简单地编写:

where (h>zf) 
    zf = h
end where
如果它们的形状不一样,请说明你想做什么


(现代)Fortran是一种数组语言(达到一级近似值),因此请考虑整个数组操作,而不是循环。它们可能更快,更可能不是,但它们写得更快,更容易理解。如果性能不够好,请考虑执行循环替换。

表达式编译得很好。。。我假设
real::X(NPOIN),Y(NPOIN),ZF(NPOIN),R(NPOIN)
并交换了'H%R'->'R'。也许还有别的地方出了问题。你能发布一些可编译的东西吗?这个表达式--
(X(I)*COS(0.0)+0.0*Y(I)*COS(0.0)+0.1)
--在你的代码中出现两次,可以简化为
X(I)+0.1
。我不认为这些额外的术语是你报告的问题的根源,但它们妨碍了你和我们努力理解正在发生的事情。摆脱它们。如果使用固定源格式,请确保不要超过第72列。请阅读Fortran 90及更高版本语言中的MERGE语句。甚至
zf=MAX(zf,h)
?性能可能比
where
结构更差,但它的意图可能更清晰。@francescalus:是的,你的方式更好。