Fortran 中的逻辑和

Logical sum in fortran

在 fortran 中我有两个数组

u = (/ .true. , .false. , .true. , .false. /)
v = (/ .true. , .true. , .false. , .false. /)

而且我想像这样添加它们

w = u .or. v

获得

w == (/ .true. , .true. , .true. , .false. /)

.or. 运算符不接受数组作为输入。 最好的方法是什么?我觉得我应该使用 where 内在函数,但我不太确定如何使用。

显示 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,有时可以派上用场。