在fortran的逻辑和

时间:2018-02-15 16:35:12

标签: fortran logical-operators

在fortran我有两个阵列

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

我希望像

一样添加它们
w = u .or. v

获取

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

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

1 个答案:

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