2013-12-18 3 views
2

이 문제는 항상 나에게 다가와서 현재 내가하는 것보다 나은 해결책을 알고 싶다. 반복 매개 변수가 계산에 사용되는 루프를 사용하여 배열을 작성하려고합니다. 문제는 배열 인덱스의 정수가 제대로 작동하지만 계산에 사용될 때 오류가 발생한다는 것입니다. 아마도 문제의 예가 유용 할 것입니다.포트란 - 루프로 캐스팅하지 마라.

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 

루프를 통해 매번 실제 변환하지 않고이를 수행 할 수있는 방법이 있습니까? 나는 이것이 병목 현상이라고 느낀다.

답변

0

나는 주조 병목 의심,하지만 당신은 실제로 루프에서 실수를 사용하여 증가 시도 할 수 :

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