2010年7月31日土曜日

固液連成シミュレーション


固液連成シミュレーションです。

剛体を粒子の集合として扱い、剛体粒子も流体粒子と同様に計算しています。

ムービーには2つのシーンが入っており、1つは固体の密度が流体より軽い場合、もう1つは固体の密度が流体より重い場合です。




■流体シミュレーションに関するエントリ
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
SPHによる巻き波のシミュレーション2
Haskell、OCamlでSPH法
このあとやりたいこと
カメラ位置を変えて流体をレンダリング
固液連成シミュレーション

■剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション

--

2010年7月30日金曜日

Bloggerにソーシャルボタン機能がついた


Bloggerにソーシャルボタン機能がついたので、さっそく表示してみた。

--

2010年7月21日水曜日

【論文】Two-way Coupling of Fluids to Rigid and Deformable Solids and Shells


Fedkiwらによる、固液連成系のアニメーションについての2008年の論文である。

著者らによると、この論文で提案されている手法には以下の特徴がある。
  • 流体にオイラー法、固体にラグランジュ法を用いる
  • 完全な陰解法
  • 系の運動量が保存される
  • カルテシアン座標を使用
流体にオイラー法、固体にラグランジュ法を用いるという典型的なアプローチをとりながらも、従来手法と違い、系の運動量が保存されるという。

また、完全な陰解法のため時間が経った後や大きな密度比があるような場合でも安定した結果が得られる。

さらに、座標系にはカルテシアン座標を用いるため、四面体メッシュやALEが必要ない。

この方法は非常に汎用的で、煙、水、多相流体、剛体、弾性体、布やシェル状の物体にも適用できるという。

関連研究としてあげられているものに、
  • Yngve et al. 2000
  • Genevanx et al. 2003
  • Carlson et al. 2004
  • Guendelman et al. 2005
  • Losasso et al. 2006a
といった例があるが、これらは、陽解法もしくは半陰解法を使うため、安定性と精度の問題が残るという。

また、
  • Klinger et al. 2006
  • Chentanez et al. 2006
  • Batty et al. 2007
では、完全に陰解法を用いて安定した固液連成シミュレーションを行っているが、シェル状剛体や布には適用できないとのこと。

--

2010年7月18日日曜日

カメラ位置を変えて流体をレンダリング


以前の3次元の粒子法シミュレーションに載せているムービーを、カメラ位置を変えてまたレンダリングしてみました。



■剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション

■流体シミュレーションに関するエントリ
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
SPHによる巻き波のシミュレーション2
Haskell、OCamlでSPH法
このあとやりたいこと
カメラ位置を変えて流体をレンダリング

--

sedコマンドの使い方

sedコマンドの使い方をいくつか解説します。

置換


文字列の置換を行うには、-eオプションに続けて置換したい文字列と置換後の文字列を指定します。

$ sed -e "s/置換したい文字列/置換後の文字列/g" ファイル名

出力先は標準出力です。リダイレクトを使えばファイルに記録できます。

$ sed -e "s/置換したい文字列/置換後の文字列/g" ファイル名 > 保存先ファイル名

ファイルに保存する別の方法として、-iオプションによって同名での上書き保存ができます。-iオプションの場合、同時に置換前のファイルがバックアップされるため便利です。

$ sed -i.bak -e "s/置換したい文字列/置換後の文字列/g" ファイル名

「-i.bak」と指定することで、ファイル名.bakがバックアップのファイル名になります。

ファイル名にワイルドカードを指定することで、複数のファイルを一度に置換できます。これは-eオプション単独ではできないので、-iオプションが便利です。

$ sed -i.bak -e "s/置換したい文字列/置換後の文字列/g" *

ここまで、sedを使った文字列の置換についてでした。

挿入


次は挿入についてです。sedは単なる置換用のコマンドではありません。Stream EDitorという名前の通り汎用的なエディタなので、テキストファイルに対して様々な編集が可能です。挿入もその1つです。

挿入する場合は-fオプションで外部ファイルからコマンドを読み込ませることで行います。
※複数業にわたるコマンドになるため、-eオプションでは不可

$ sed -f コマンドファイル名 編集対象ファイル名

コマンドファイルは以下のように記述します。
挿入したい行(何番目の行か){
i\
挿入したい文字列
}

挿入したい行として指定した行の手前に、挿入したい文字列が挿入されます。たとえば、
10{
i\
この文字列を挿入します。
}
とすると、10行目の手前、つまり9行目と10行目の間に「この文字列を挿入します。」という文字列が挿入されます。

出力先は置換の場合と同様に標準出力です。-iオプションで上書きできることも同様です。

--