【问题标题】:Fortran - avoid casting in a loopFortran - 避免在循环中强制转换
【发布时间】:2014-01-06 02:33:59
【问题描述】:

我似乎总是遇到这个问题,所以我想知道比我目前所做的更好的解决方案。 我想使用在计算中使用迭代参数的循环构建一个数组。问题是数组索引中的整数工作正常,但在计算中使用时会导致错误。也许这个问题的一个例子会很有用。

DO ii = 1,N
ir = real(ii,kind=dp)  ! Cast this to real
DO ji=1,N
    jr = real(ji,kind=dp)  ! Cast this to real.
    IF (abs(sqrt((ir-1)**2 + (jr-1)**2)) < Lim) THEN
        A(ii,ji) = 1;
    ELSEIF (abs(sqrt((ir-1)**2 + (jr-N)**2)) < Lim) THEN
        A(ii,ji) = 1;
    ELSEIF (abs(sqrt((ir-N)**2 + (jr-1)**2)) < Lim) THEN
        A(ii,ji) = 1;
    ELSEIF (abs(sqrt((ir-N)**2 + (jr-N)**2)) < Lim) THEN
        A(ii,ji) = 1;
    END IF        
END DO
END DO

有没有办法做到这一点,而无需每次通过循环都转换为真实?我感觉这是一个瓶颈。

【问题讨论】:

    标签: casting fortran


    【解决方案1】:

    我怀疑强制转换是一个瓶颈,但您可以尝试在循环中实际使用实数和递增:

    ri = 1.0
    do ii=1,n
       rj = 1.0
       do jj=1,n
          ..math...
          rj = rj + 1.0
       enddo
       ri = ri + 1.0
    enddo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多