代码之家  ›  专栏  ›  技术社区  ›  Manfredo

fortran中的逻辑和

  •  -1
  • Manfredo  · 技术社区  · 6 年前

    在fortran中,我有两个数组

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

    我想添加如下内容

    w = u .or. v
    

    得到

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   user5713492    6 年前

    举例说明 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 还有文档 或(I,J) 但它在编译器中是基本的。在这两种情况下,当它工作时,结果都是按位逻辑的 OR 其输入。替换为 IOR(I,J) 在任何编译器上获取标准元素版本。还有逻辑阵列缩减功能 ANY 和整数数组缩减函数 IANY 有时会派上用场。