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 (1392d)