fortran语言中的逻辑和

fortran语言中的逻辑和,fortran,logical-operators,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的内在属性,但我不太确定如何使用。一个例子来说明

在fortran中,我有两个数组

u = (/ .true. , .false. , .true. , .false. /)
v = (/ .true. , .true. , .false. , .false. /)
我想加上它们,就像

w = u .or. v
得到

w == (/ .true. , .true. , .true. , .false. /)
但是
.or.
操作符不接受数组作为输入。
最好的方法是什么?我觉得我应该使用
where
的内在属性,但我不太确定如何使用。

一个例子来说明
操作符(.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.]

EDIT:我明白您产生混淆的原因:
gfortran
记录了只对标量有效的内在扩展名
或(I,J)
ifort
也记录
或(I,J)
但它是编译器中的基本元素。在这两种情况下,当它工作时,结果是其输入的按位逻辑
。替换为
IOR(I,J)
以获得任何编译器上的标准元素版本。另外还有逻辑数组缩减函数
ANY
和整数数组缩减函数
IANY
,它们有时很有用。

。或者。
应该在数组上运行。当你尝试时,你的编译器如何抱怨?好吧,我的错。我在看
(需要两个标量)的文档,而不是
。或。
不要在逻辑上使用或(或IOR)!!!!是的,ifort不记录或作为IOR的替代拼写。IOR/OR对整数进行运算。是的,作为扩展,ifort允许在逻辑类型和数字类型之间进行转换,但这会导致不可移植的代码,从而产生意外的结果。我在2000年写过这个一般性的话题——你们也应该熟悉任何和所有的内在论——所有的都是标题中提到的“总和”,尽管不是要求的。谢谢你们的更正,@SteveLionel。我不知道我怎么会在ifort文档中漏掉这个。但是逻辑和被定义为似乎是
运算符(.OR.)
任何(掩码)
内在函数所做的<代码>全部(掩码)
是逻辑产品。