NaNの有無を確認

isnan

isnanを使ってNaNがあるかどうかを確認できる.
NaNが発生した時点で計算を中止したい場合などに.

do I = 1,NY
 do J = 1,NX
  if(isnan(VEL(I,J))) then
    write(*,*)'NaN発生'
    stop
  end if
 end do
end do

上記の方法だとループの途中で終わるので,NaN が複数ある場合にも最初にある I,J しかわからない.
配列すべてを確認したい場合は logical 変数を使用し,ループを抜け出した後にもう一度配列に NaN があったかどうか確かめる.

hoge = .false.
do I = 1,NY
 do J = 1,NX
  if(isnan(VEL(I,J))) then
    hoge = .true.
  end if
 end do
end do
if(hoge)then
 write(*,*) 'VEL(I,J)をファイルに出力して確認したりできる'
 stop
end if

その他

a が NaN の場合, a==a が常に偽になるので, isnan (Intel の ifort だけ対応?)が使えなければ.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2016-12-03 (Sat) 08:11:45 (2694d)