連番などのファイルを pbzip2 で圧縮して別のディレクトリに出力

前提

  • Cygwin の pbzip2(デフォルトだと入ってない)
  • bash (なので、たぶん Linux でも同様にできるはず)

サンプルコード

$ for file in *.dat; do pbzip2 -m1000 -ck "${file}" > "/cygdrive/f/path_to_dir/${file}.bz2"; done &

オプションは、-c はたぶん必須。他はお好みで。

参考リンク

関連するブログ内エントリ

mintty (Cygwin) + tmux で、Ctrl-Tab, Ctrl-Shift-Tab で cycle windows する

Stack Overflow のエントリとか、いろいろ探したけど、結局 mintty 公式の wiki に書いてあった…:

要するに、

  1. mintty 上で右クリックして Options... > Keys で、Switch window を untick する(Ctrl-Tab, Ctrl-Shift-Tab がこれを使っているため。知らなかった…)。
  2. ~/.tmux.conf に、上のリンク先に書いてあるとおりのコードをコピペして保存する。
  3. tmux を起動する。Window をいくつか開くと、Ctrl-Tab, Ctrl-Shift-Tab で cycle できるようになっている。便利!

いちおうコードをコピペしておくと、

set -s user-keys[0] "\e[1;5I"
set -s user-keys[1] "\e[1;6I"
bind-key -n User0 next-window
bind-key -n User1 previous-window

Measurement of time-varying kinematics of a dolphin in burst accelerating swimming

基本情報

内容のまとめ

Introduciton

イルカの遊泳は、巡航の速度計測はけっこうあったが、瞬間的な加速の計測は少なく、とくに尾ビレによるストロークごとの詳細の計測はあまりなかった。

Methods

Smoothing

The time series of the obtained 3-D coordinates were smoothed using a weighted 91-point weighted moving average with Hamming window designed to impose a 15 Hz cut-off frequency to eliminate noise due to the manual tracking.

前に加賀屋さんと少し議論したけれど、ここでは「マニュアルトラッキング(特徴点を時系列にポチポチとマウスでクリックする)によるノイズの除去のためにまずスムージングをしている。それから、1階と2階の2次中心差分(中央差分)を使って速度と加速度をそれぞれ求めている。ただし、時系列点の水増しはしていないのと、中心差分に普通は i-1, i+1 を使うところ敢えて i-2, i+2 を使っている(さらにスムースにするため、とされている)。

3D geometry

Fig. 4 のあたりで、正直に「スキャンした形状はこんなグニャグニャだったので、こうやって整形しました」ということを説明している。実際にはCTしたものそのままなんてCFDできるわけはなく*1、必ず整形が入るのに、その過程を詳細に記述している論文は非常に少なく感じられる。個人的な印象に過ぎないと言われればそうかもしれないが…。

Results

Discussion

コメント

*1:FEMならまだ良いのかもだが。

Standalone ANSYS Fluent launched directly from Windows is (slightly?) different from Fluent launched from WorkBench

English

I've been thinking they are identical and have never launched the standalone Fluent, but no, they are not. At least in a few ways.

I was doing a tutorial on VOF + dynamics + dynamic mesh (fl00392). And I stumbled upon that in Autosave I could not find the File Name entry field at all. I googled and found out this page: https://www.eureka.im/4622.html . I know obviously this is one of the fishy web sites, but that doesn't matter this time. What matters here is:

In the stand alone FLUENT 12, we will see the file name option.

What!? Is it different from the Fluent launched from WorkBench (WB)? Oh it must be simply because it was ancient version 12, whereas we now live in the version 18, 19, or 2019. Let me see... (closed the WorkBench launched the Fluent 19.1 from Windows Start Menu...) Oh, dear, this is different!

  • You can specify the root-name for Autosave. If you're familiar with standalone Fluent, you may think "Oh, even in the WB Fluent, you should be able to specify the root-name via TUI." NO. Even in the TUI, the /file/auto-save shows only four commands and "root-name" is missing in the WB Fluent. So obviously what we usually use on clusters (supercomputers) are standalone Fluent as they allow us to specify root-name.
  • If you're familiar with WB Fluent, you know that it's not Read/Write from File menu but it's Import/Export which are the commands for case and data files, even though the journal file commands are read-case-data and write-case-data. However, in the standalone Fluent, they indeed are called Read/Write. Wow.
  • I'm pretty sure there will be many other differences, some of which might be important.
  • I still cannot find the "Specific Dissipation Rate (omega)" in the Data File Quantities even in the standalone Fluent. Probably a bug?

So... be careful guys.

Japanese

WorkBench (WB) から立ち上げた Fluent と Windows から直接立ち上げた Fluent は同じものだと思っていたが、実は少し違った。たとえば、autosave するときの root-name(foo-001.dat みたいなやつの foo の部分)を WB Fluent ではなぜか指定できない(TUIから行ってもコマンド自体がない)のに対して、standalone Fluent では指定できる。他にも一部メニューが違ったりするのは確認した。なんかいろいろと違うことが他にもありそうで、やめてほしい…

ANSYS Fluent の UDF についての自分用メモ

NB! Dynamic meshing については別の記事に分けている: Dynamic meshing in Fluent - dynamicsoar's log

UDFマニュアル*1は基本的に version 19.2 を参照している。

定義の確認

macro

個別の関数のことを function と呼ばず macro と呼んでいるようだ(とくに説明はない…)。

thread とは何か?

GUIでは一度も thread という言葉が出てこないので、UDFを始めて「これは何???」となった。UDFマニュアルの 1.6. Mesh Terminology によると、

A thread is a data structure in ANSYS Fluent that is used to store information about a boundary or cell zone. Cell threads are groupings of cells, and face threads are groupings of faces. Pointers to thread data structures are often passed to functions and manipulated in ANSYS Fluent to access the information about the boundary or cell zones represented by each thread. Each boundary or cell zone that you define in your ANSYS Fluent model in a boundary conditions dialog box has an integer Zone ID that is associated with the data contained within the zone. You will not see the term "thread" in a dialog box in ANSYS Fluent so you can think of a "zone" as being the same as a "thread" data structure when programming UDFs.

ゾーンと思っておけばいい、とある。要は「塊」というか「グループ」というかそれくらいのざっくりとした捉え方でいいようだ。UDFのソースコードで thread にアクセスするときはポインタを使う。

その他によく出てくるのは、

  • Domain: 2相流では2つ、単相流なら1つとあるので、単相流だけやってる間は「ぜんぶ」と思っておけば良さそう。
  • SVar: まだよくわかってない

また、

Note that a face ID or cell ID by itself does not uniquely identify the face or cell. A thread pointer is always required along with the ID to identify the thread to which the face (or cell) belongs.

とのことで、あらゆる face, cell へのアクセスは thread ポインタも指定しないと行えないということのようだ。たとえば、「入口境界threadを指定して、さらにface IDを指定する」というように使うと思われる。

thread_loop_c, thread_loop_f

Domain 内のすべての cell/face をループするという便利な関数。 Section 1.7 には thread_c_loop, thread_f_loop というのがあるが、これらはここにしか出てこないのでおそらく間違い…?

SET_DEFORMING_THREAD_FLAG

UDF マニュアルにも User's Guide にも明確な記述がない。ひどい。かろうじて、マニュアル内のサンプルコードに下記の記述がある:

/* set deforming flag on adjacent cell zone */
    SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
/**
* Set/activate the deforming flag on adjacent cell zone, which
* means that the cells adjacent to the deforming wall will also be
* deformed, in order to avoid skewness.
*/
SET_DEFORMING_THREAD_FLAG (THREAD_T0 (thread));

というわけで、どうやら「隣接するセルゾーンを自動的に Deforming に変更する」ようだ。こんな重要そうなフラグのセットをする関数なのに独立した説明がなくてサンプルコード内のコメントが唯一の情報って…。

dt と dtime

UDFの世界では、dt は「時間刻み」ではない。それは dtime と呼ばれる。dt は dynamic thread を意味する。なんて紛らわしいんだ…。

DEFINE_GEOM と DEFINE_GRID_MOTION は何が違うのか

DEFINE_GEOM はノードの動きを制限する?

マクロ(関数)の引数の単位

どうやら自動的に単位系は SI であると解釈するようなので、必ずSIにしてから渡さないといけない、っぽい。

書き方

Section 2.1 の Important というコラム:

You must place all of the arguments to a DEFINE macro on the same line in your source code. Splitting the DEFINE statement onto several lines will result in a compilation error.

こんなことするやついるの?って思うかもしれないが、自分は Fortran のときにこれをやるので、「ダメだよ」って書いてなかったらハマったかもしれない。

Make sure that there are no spaces between the macro (such as DEFINE_PROFILE) and the first parenthesis of the arguments, as this will cause an error in Windows.

マクロ名はいいとして、「マクロ名直後の最初のカッコの前にも半角スペースを置いてはいけない」のは割とハマりそう。

Do not include a DEFINE macro statement (such as DEFINE_PROFILE) within a comment in your source code. This will cause a compilation error.

コメントでも書いてはいけないとか普通思わないだろ…まじか…。

*1:正式には ANSYS Fluent Customization Manual だが、長いので個人的に勝手にUDFマニュアルと呼んでいる。まぁわかるでしょ…。

Dynamic meshing in Fluent

NB! UDF全般に関する事項は別記事に分けている: ANSYS Fluent の UDF についての自分用メモ - dynamicsoar's log

Dynamic Mesh

  1. Setup > General > Transient
  2. Setup > Dynamic Mesh > tick "Dynamic Mesh"
  3. Setup > Dynamic Mesh > "Create/Edit..."

Mesh Methods

Smoothing

Node の数を変えずに、位置のみ動かす方法のこと。まずこれを smoothing と呼ぶのが非常にわかりづらくて、マニュアル見るまで意味わかってなかった。Deformation の方がわかりやすくないか…?

メッシュスムージングでは,一般に回転よりも平行移動による境界運動の方がはるかに良好な結果を得ることができる.

とのこと。

  • Spring/Laplace/Boundary Layer
  • Diffusion
  • Linearly Elastic Solid

の3つの方法がある。

Diffusion か Solid で周期運動の場合は、TUI から基準位置を指定することで、サイクル間のメッシュ品質の一貫性を向上できるらしい。

Spring/Laplace/Boundary Layer

メッシュの node 間をつなぐ edge をバネとみなして、移動境界により変形するバネ群の釣り合いを反復計算によりで解いて、メッシュ位置を求める。Diffusion 法に比べると高速だが低品質で、基本的に tetra mesh にしか使えない(使うべきではない)。下の "Parameters" で、"Spring Constant Factor" から "Laplace Node Relaxation" までが有効になる。

Spring Constant Factor はデフォルトが1だが、これだと node が物体境界を超えることがあるらしい…(そういう図がマニュアルに載っている。どうみてもダメすぎる)。0だとそれはない。ということは基本は0から始めて小さめの値を目指すべきか。実際、チュートリアルでは 0.3 にしろとある。

Spring は tetra/triangle mesh 向きで、デフォルトでは "Elements" が "Tet in Tet Zones" になっている。もし tetra 以外も変形させたい場合は "All" を選べるが、多面体では特定の条件の下でないと「バネ」の仮定がうまくいかずにセルが大きく歪むことがあるらしい(条件はマニュアルに書いてある)。したがって、tetra 以外(多面体)には Diffusion が推奨されるとのこと。

Diffusion

拡散方程式を解いてメッシュを決める。Spring 法に比べると、計算負荷が高いが高品質。

下の "Parameters" で、"Diffusion Function" と "Diffusion Parameter" が有効になる。

マニュアルにいきなり

変形境界における境界条件は,メッシュが境界の接線方向に運動するよう定められる(つまり,垂直速度成分は消失する) [English] On deforming boundaries, the boundary conditions are such that the mesh motion is tangent to the boundary (that is, the normal velocity component vanishes)

と書いてある。なんだこれは…?意味が分かりづらいが、さすがに流れの境界条件を勝手に変えるという意味ではないと思うので、メッシュ (node) 位置を決めるための「拡散方程式を解くときの境界条件としては」ってことじゃないかと思う。

拡散率の指定には2種類あり、Diffusion Function から選ぶ。

  1. boundary-distance: Diffusion Parameter は 0 から 2 の範囲で指定する(上限は3だが0から2がよいとマニュアルにある)。デフォルトの0だと全体のメッシュが一様に変形する。1など大きくするにつれて、運動している境界付近では初期メッシュ形状が維持されて、運動境界から遠い場所でより大きなメッシュの変形が生じるようになる。回転境界運動の場合は1.5が推奨されている。
    • 標準境界距離(デフォルト):移動境界から最も近い "wall" boundary までの距離に応じて拡散係数が決まる
    • 一般化境界距離(TUIで設定可能):移動境界から最も近い boundary (any type) までの距離に応じて拡散係数が決まる
  2. cell-volume: Diffusion Parameter を1よりも大きくすると、「大きなセルほどより多く変形する(多くの変形を吸収する)」ようになる。なんかこっちの方が良さそうな気がするが、どうかな…。上限は3(それ以上を入れると怒られるので初めて分かる…)。

TUIからいくつかの設定が可能。

  • /define/dynamic-mesh/controls/smoothing-parameters/verbosity を 1 にするとスムージング残差が表示されるようになる
  • /define/dynamic-mesh/controls/smoothing-parameters/max-iteration で最大反復回数を変更できる。デフォルトは30になっている(バージョンによるかも)
  • /define/dynamic-mesh/controls/smoothing-parameters/relative-convergence-tolerance で相対残差許容量を変更できる。デフォルトはマニュアルには1.0e-4とあるが実際には1.0e-10になっていた(バージョンによるかも)。当然こんなに落ちるには多くの iteration が必要になる。適当にやったテスト計算では、30回では1e-5とか1e-7くらいまでしか落ちていないこともあった。もっとも、そこまで smoothing に気を使うよりも、変形が大きいなら remeshing しないとどうしようもないような気もするが…。

境界層 smoothing とは併用できない。

Linear Elastic Solid

メッシュを固体とみなして、境界移動にともなう弾性変形からメッシュ位置を求める(FEMを解くらしい)。下の "Parameters" で、"Poisson's Ratio" のみが有効になる。ポアソン比は -1.0 から 0.5 の間で指定可能。他に、TUIから最大反復回数と相対許容残差が指定できる。

Diffusion より更に計算負荷が高いが、場合によってはより高品質になるらしい。ただし、拡散の場合は距離やセル体積に応じて非一様な分布が実現できたのに対して、こちらは物性値を一定とみなしている。そのためだと思われるが、

回転境界運動と尖った角を伴うケースでは,境界距離に依存する拡散による拡散スムージングを使用した方が有利

とのこと。

これも境界層 smoothing とは併用できない。

Layering

Remeshing

セルを変形させるのではなく、細分化または粗大化する。

Options

UDF

DEFINE_GEOM と DEFINE_GRID_MOTION の違い

これは引数を見たら簡単だった。DEFINE_GEOM には引数に時間 time がなく、DEFINE_GRID_MOTION にはある。つまり GEOM は時間によって不変な形状しか記述できない。したがって、物体の時々刻々の変形を prescribe するには、GRID_MOTION の方を使う。

UDFマニュアル以外だと、チュートリアルの fl00391 がおそらく唯一まともな情報源。

manoeuvrability and agility

Manoeuvrability(機動性?)

旋回性能を意味することが多そう。天体で言うと「公転」の方。

おそらく大きく2つに分けられる:旋回半径と旋回率。さらに旋回率は維持旋回率と瞬時旋回率に分けられる、と思われる。

Walker (2000) では先行研究を取り上げて旋回半径を紹介している。

Norberg and Rayner (1987) formally defined maneuverability as the ability to turn in a confined space and have used the lengthspecific minimum radius of the turning path ($r_{path}/L$, where $L$ is total body length) as a measure of this performance. Webb (1994a) has advocated this limited definition of maneuverability for fishes.

-- Walker, 2000.

Agility(敏捷性?)

旋回かどうかにかかわらず、姿勢の変化率を意味することが多そう。天体で言うと「自転」の方。飛行物体で言うとロールレートなど。 あと、並進加速度や加加速度が大きいことも manoeuvrable というよりは agile と呼ぶような気がするけど、微妙/曖昧かも。

Walker (2000) では以下のように文の前半では "reorient the body" とあるのになぜか後半では "suggested turning rate" とありこれは旋回率のことだ。これは誤解しているのか、誤解を招きかねないので不適切だと思う。あるいは Webb (1994a) での定義が曖昧なのかもしれない。

Webb (1994a) defined agility as the ability to quickly reorient the body and suggested turning rate, ω, as a measure of agility.

-- Walker, 2000.

References

  • Norberg, U. and Rayner, J. M. V. (1987). Ecological morphology and flight in bats (Mammalia: Chiroptera): wing adaptations, flight performance, foraging strategy and echolocation. Phil. Trans. R. Soc. Lond. B 16, pp. 335–427.
  • Walker, J. A. (2000). DOES A RIGID BODY LIMIT MANEUVERABILITY? J. Exp. Biol. 203, pp. 3391–3396.
  • Webb, P. W. (1994a). The biology of fish swimming. In Mechanics and Physiology of Animal Swimming (ed. L. Maddock, Q. Bone and J. M. V. Rayner), pp. 45–62. Cambridge: Cambridge University Press.
  • Webb, P. W. (1994b). Exercise performance of fish. In Comparative Vertebrate Exercise Physiology: Phyletic Adaptations (ed. J. H. Jones), pp. 1–49. San Diego: Academic Press.