2013年11月10日

流れ関数-渦度法だとNS方程式の数値解が発散?

CUDAの練習問題として、キャビティ問題を流れ関数−渦度法で解いてみた。が、ちょっと困った事態に。

時間発展させると解が収束せず、発散してしまう。オイラー法で積分するのが悪いのかと思い、予測子−修正子法とかも使ってみたが事態は改善せず。

理由は境界条件にありそうだ。渦度\(\omega_q\)は境界で
\[
\omega_q=-\frac{2\psi_p}{{\Delta x}^2}
\]
となるが、流入があると境界のすぐ隣のセルの流れ関数の値 \(\psi_p\) が1程度の大きさになり、これが発展方程式を通して成長してしまう。最初はじわじわと大きくなるがあるところで急激に値が大きくなるような挙動を示す。
また、\(\Delta x\)が小さいほど発散しやすい。
桁落ちも発生している模様なので、単精度計算が悪い可能性もある。

MAC法と比較してもう少し原因を調べるつもり。
タグ:物理 CUDA
posted by みのしす at 07:59| Comment(1) | TrackBack(0) | CUDA

2013年11月04日

PCを衝動買い

8月の末の話になるが、秋ばをぶらぶらしていたら G-Tune のお店が開店していたので、PC を衝動
買いした。スペックは大体こんな感じ。

CPU: core i7 4770K 3.5GHz
メモリ: 32GB
HDD: 2TB x2 (SSD は Linux で使う場合に不安があったので敢えてつけず)
GPU: GeForce GTX780

本当は Titan を買って倍精度浮動小数点を使いたかったのですが、思いきれませんでした...
が、以前使っていたカードが GT 640 だったこともあり、速さは段ちでした。

試しに nbody シミュレーションデモを動かすと個体数 32K くらいまではさくさく動く。
さすがに 64K は辛そう。GT640 では 16K が限界だったので、最低2倍は速いということか。

Kepler アーキテクチャ(CUDA5以降)ではカーネルから別のカーネルを呼び出せるそうなので、
そのうちやってみよう。続きを読む
タグ:CUDA
posted by みのしす at 19:20| Comment(0) | TrackBack(0) | CUDA