dynamicsoar's log

主に研究関係のメモ

ANSYS Fluent の autosave 間隔 n は「計算開始(再開)時点から n ステップごと」ではなく「現在ステップ/n が割り切れたら出力」の仕様っぽい

たとえば、非定常計算で、

;; Autosave Every (time step)
file/auto-save/data-frequency
10
solve/set/time-step
0.02
solve/dual-time-iterate
50
30

として 1 s まで計算したとする。こうすると、タイムステップが 10, 20, 30, 40, 50 のときに autosave で .dat ファイルが出力される。計算が終わるタイムステップはもちろん 50 だ。

次に、この計算に続けて(あるいはリスタートして)、

;; Autosave Every (time step)
file/auto-save/data-frequency
100
solve/set/time-step
0.002
solve/dual-time-iterate
2000
30

のように、dt を 1/10 にして、autosave 間隔も 10 倍の 100 に変えるとどうなるか。「計算開始(再開)時点のタイムステップから始まって 100 ステップごと」に autosave されるので、

  • 150
  • 250
  • 350
  • 450
  • 550
  • 650 ...

となると思っていた。違った。実際には

  • 100
  • 200
  • 300
  • 400
  • 500
  • 600 ...

が出力される*1。つまり、「計算開始(再開)時点のタイムステップから始まって 100 ステップごとに保存」されるというのは間違いで、「単に、各時点でのタイムステップを autosave frequency で割って、割り切れたら保存」としているようだ。

やっていないが、おそらく定常計算での iteration 間隔での保存でも全く同様なのだろう。

この仕様はいまの自分の計算的には不便で、残念だ。しかしそれとは別の話として、このソフトにはこういう「やってみるまで挙動がわからない(マニュアルにも書いていないか、書いていても絶望的に見つけづらい)仕様」が多すぎて、つらいところがある。

*1:と思われる。自分がやったのはこの数字ではなかったが、とにかく「現在のステップから」ではなく「割り切れる値」のときになった。

Office Lens で OneDrive へのアップロードが不能に → Office Lens に加えて OneNote, SharePoint からも sign out したら直った

タイトルの通り。

具体的な症状としては、My Files 内の画像アイコンが "Unable to Upload" となっていた。Retry ボタンを押すとすぐに大学の Office 365 の sign in 画面へ飛ばされ、正しい情報を入力しても Office Lens に戻されて、何も起きない、という状況だった。

少しググったところ、「OneDrive のカメラ機能を使いましょう」というMS公式のページがヒットして、「おいふざけんな… Office Lens の意義はなんだよ…」ってなったが、さらにもう少しググると、タイトルの方法(Office Lens だけでなく他の MS アプリからも sign out する)が有効という報告を見かけたのでやってみた。効いた。

なお iOS 標準の Mail アプリで Exchange のメール受信をしていて、これは sign out しなかったが問題なかった。

2019-08-08 追記

また同じ症状になった。このエントリのことを忘れていたのでまたググってしまったのだが、

Office Lens - won't save to O365 OneDrive - Microsoft Community

にあるように、一度アプリを全部閉じてから、iOS の Settings > OneDrive から Clear Account settings を ON にして、再度 Office Lens を開き直して sign in したら解決した。

Fluent の SRS (e.g. LES) で入口境界の Vortex Method に 1000 を超える渦を与えたい → scheme コマンドが必要

LES などの SRS (scale-resolved simulation) を行う際、入口境界に変動を与えるための Fluctuating Velocity method として Vortex Method を使う場合、公式は資料で「最低でも入口の face 数の 1/4 以上の個数の渦を生成するように指定しろ」と言っている。しかし実際やってみるとわかるが、1000 を超える数字を入れようとするとエラーになり、1000 が上限である。つまり入口の face 数*1が 4000 以上だと問題になる。実際には4000ではギリギリなのだから、3500とかそれくらいが限界ということだろう。え?60 x 60 = 3600 なんですけど?こんなもんが限界?ふざけんな。

…と、思った人が当然いたのだろう。公式カスタマポータルの "Vortex Method (VM): Increasing the Number of Vortices – Lifting the Upper Limit" という資料に対処方法が書いてある。転載して怒られると嫌なのでコピペはしないでおく。4行の scheme コードで「許容される最大値を増やす」ことが可能で、その後で普通に 1000 以上を選択すればいいようだ。

…しかし公式が「現代の計算では1000って足りないよね」と正しく認識してるんなら、とっとと上限を直せよ…。2019R1 はまだ試してないけど、直ってるだろうか?だめかな(懐疑的)

*1:当該 face を表示しておいてから、リボンメニューの Surface > Manage... で確認できる。

Fluent の TUI (journal) で Cell Zone Conditions の設定を変える (e.g. ELES) には → define/boundary-conditions/fluid にある

Fluent で、Cell Zone Conditions の設定を変えたいことがある。Mesh motion とか、embedded LES (ELES) とか。しかし TUI からこの設定を変える方法がなかなか見つからなかった。もうサポートに聞こうかな?と思ったところで見つけた。

define/boundary-conditions/fluid

ここから設定できる。

なお TUI manual には…

fluid
Set boundary conditions for a zone of this type.

としか書いてない。ふざけんな…気づくかこんなん…(いつものこと)。

Fluent で、確実に gzip 圧縮されたデータを吐き出す → root-name に .gz を付ければいい

だいぶ前から悩んでいたこれだが、同僚に教えてもらった。まさかこんな方法とは…自分だけならずっと気づかなかった。ありがたい。

GUI の場合

Workbench から起動した Fluent ではそもそも root-name の記入欄がないので、GUI からは設定不能。TUI を使うしかない。

Windows から直接起動した Fluent なら GUI で root-name の記入欄があるので、そこに好きな名前を .gz つきで入力すれば良い、のだと思う(やったことない)。

TUI の場合

Workbench から起動した Fluent や、HPC での利用の場合、TUI になる。この場合、file/auto-save/root-name の指定時に .gz を付けてしまえばいい。journal file としては下記のような感じ:

;; Autosave root-name
file/auto-save/root-name
"my-file.gz"

一見これだと「my-file.gz-2-00001.dat みたいになって、gz は単に文字列と解釈されるのでは?」と思えるのだが、意外に賢くてちゃんと gzip 形式にしてくれる*1

*1:逆にファイル名に .gz を使えないということになりそうだが、使いたい人はいないだろう…。

現在走ってるjobの終了を待って次のジョブを投入したい→tailを使う

普通に考えると wait かな、って思うんだけど、けっこう前に走らせたジョブがあって、という場合、

[pid] is not a child of this shell

とか怒られてうまくいかない。いろいろググったところ、なんと tail を使えというお言葉が…:

bash - WAIT for "any process" to finish - Stack Overflow

どうやら --pid= というオプションがあったらしい…。そこで、

#!/bin/bash
PID=終わるのを待ってるジョブの番号
tail -f --pid=${PID} /dev/null
time nohup ./a.out > log.txt &(みたいな、次のジョブのコマンド)

という超短いスクリプトを書いて、wait_run.sh みたいな名前で保存して、

$ ./wait_run.sh &

とやったら、行けた模様。もちろんジョブ番号やコマンドを引数にすればもっといい…というかたぶんワンライナーで書けるんだとは思う。ただ、単にセミコロンでつなぐとバックグラウンドに回ってくれないかなんかで、うまくいかなかった。bashのことが何もわかっていない…orz けど動いたので、いいか…

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

前提

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

サンプルコード

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

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

参考リンク

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