在fortran我有两个阵列
u = (/ .true. , .false. , .true. , .false. /)
v = (/ .true. , .true. , .false. , .false. /)
我希望像
一样添加它们w = u .or. v
获取
w == (/ .true. , .true. , .true. , .false. /)
但.or.
运算符不接受数组作为输入。
最好的方法是什么?我觉得我应该使用where
内在函数,但我不太清楚如何。
答案 0 :(得分:2)
显示operator(.OR.)
实际上是元素的示例:
program orme
implicit none
logical u(4), v(4), w(4)
integer i
u = [.TRUE., .FALSE., .TRUE., .FALSE.]
v = [.TRUE., .TRUE., .FALSE., .FALSE.]
w = u .OR. v
write(*,'(*(g0))') 'w =',(merge(' [',', ',i==1), &
trim(merge('.TRUE. ','.FALSE.',w(i))),i=1,size(w)),']'
end program orme
使用ifort输出:
w = [.TRUE., .TRUE., .TRUE., .FALSE.]
编辑:我看到了您混淆的原因:gfortran
记录了仅适用于标量的内在扩展OR(I,J)
。 ifort
也记录了OR(I,J)
,但它在该编译器中是元素的。在两种情况下,当它工作时,结果是其输入的按位逻辑OR
。替换为IOR(I,J)
以获取任何编译器的标准元素版本。还有逻辑数组缩减函数ANY
和整数数组缩减函数IANY
,有时可以派上用场。