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