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

MathJax のテスト

数式をブログに簡単に貼り付ける方法はないかと調べていたところ、2年くらい前に MathJax というのが
作成されていることに気が付いた。さっそくテストしてみる。
これは \(\LaTeX\) で記述されたソースです。
\[
e^{i\pi}=-1
\]
うーん、駄目かなあ。
posted by みのしす at 07:32| Comment(1) | TrackBack(0) | 日記

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

今更ラズベリーパイ

一昔前に話題になった $35 Linux コンピュータサーバ、Raspberry Pi を入手した。
ケース、電源、無線LANを一緒に買ったので、結局 $70 くらいの買い物になったが。

この上でコンパイルするととてつもなく遅いので、CentOS 6.4 上でクロス開発環境を
構築してみた。(ぐぐっても CentOS 上でクロス環境を作った記事は少ないようだ)
例によって、

https://github.com/raspberry/tools

からクロスコンパイラを落としてくる。
CentOS の gcc は 4.4.7 と古く、上記のクロスコンパイラを動かすと
libstdc++.so.6 がないと怒られるので、Fedora の libstdc++ を入れてみた。
ネイティブは 64 ビット環境しか使わない予定なので、これでも特に困らないので
よしとした。

次に、眠っていた PS2(!) のアイトーイカメラを接続することを思い立ち、OpenCV を
インストールする。libX11-dev, libX11-doc のインストールに失敗して先に進めない
ので、Debian のホームページから gnulibaebhf 用のバイナリを落としてインストール
を完了。

この時点で Raspberry Pi 上にある /lib, /usr/lib を吸い出してクロス環境の
$(CROSS_HOME)/lib 以下にぶち込む。
試しにカメラからフレームを読みだして GTK+ のウィンドウに表示させるプログラムを
コンパイルしてみる。オブジェクトファイルを作成するところは成功するが、ライブラリを
リンクするところで失敗する。これは全てのライブラリをリンクできていないため
なので、付属の ldd を使って必要なファイルをすべて抽出する perl プログラムを作った。
巨大な LIBS 行が出来上がるのでこれを Makefile に追加してコンパイルを実行すると
うまくリンクできた。

あとは scp で Raspberry Pi に転送し、プログラムを起動すると、カメラ画像が
ウィンドウに表示される。320x240 ドットカラーで 5fps が限界のようだ。

motion のようにカメラの前を何かが横切ったら画像を保存するプログラムも書いてみた。
フレーム差分法と(「詳解 OpenCV」に記述されている)コードブック法を比較してみたが、
erode 処理をかませるとフレーム差分法で十分な精度が得られそうだったので、こちらを
採用(処理が幾分軽い)。

次の休みにはjpegファイルをネットワークでサーバに送り付けるプログラムを書こうかな。

続きを読む
タグ:電子工作
posted by みのしす at 18:59| Comment(1) | TrackBack(0) | ラズベリーパイ