fortran语言中的逻辑和
在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的内在属性,但我不太确定如何使用。一个例子来说明
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.)
或任何(掩码)
内在函数所做的<代码>全部(掩码)
是逻辑产品。