ParaView 5.6 以降で Plot3D の function file を読むには .q file も読む必要がある、というバグ

discourse.paraview.org

現状、version 5.5.2 以下を使うのが手っ取り早い。あるいはダミーの .q file を用意するか。

実は自分も昔 FIELDVIEW を使っていた頃には中身のほぼ全部がダミーの .q file を作っていた*1。ダミーでないのは時刻や Mach, alpha などの変数のみで、しかも Mach や alpha のところに実際には別の変数を代入するという小技を使っていた。まぁそれはそれとして、これはとても不便。

*1:すべてのセルの値として0を書き込んでいた。

Rhino で自分だけの tab(ツールバー)を作る

もともとは複数の tabs にまたがる、よく使うボタンだけをまとめておくと、作業効率がとても上がる。まぁブログ記事書くほどのことではないかもしれないけど…

  • タブのあたりを右クリックして New Tab. これで新しい tab(ツールバー)ができる。
  • 既存のタブから、コピーしたいボタンにカーソルを合わせて、Ctrl を押しながら、先程作った tab へドラッグする。これでコピーできる。
  • tab 内でボタンの位置を変えたいときは、Shift を押しながらドラッグ。
  • 不要なボタンを消したいときは、Shift を押しながら tab 外までドラッグする。

Steve Jobs による「コンピュータは自分にとっての自転車みたいなもの」スピーチの出典は Vance Tucker の論文

イントロ

いつものように Researchat.fm を聴いていた。第30回 30. Battle Aura | Researchat.fm の開始10分程度で、この Steve Jobs による「コンピュータは自分にとって自転車みたいなもので、これがあることでヒトはぐっと enhance されるんだ」みたいなスピーチの話が出てきた。ほう。バイオメカニクスじゃん。

実際にどんなスピーチだろう、とググると、たとえば How the bicycle beats evolution and why Steve Jobs was so taken with this fact | Bike Boom などがヒットする。Sci Am が出典ということらしいが有料なので読めない(買いたいほどではない)。しかしここで引用されている figure のキャプションに、

this graph is based on data originally compiled by Vance A. Tucker of Duke University

とある。おっ?

Vance A. Tucker といえば、鳥の飛行のバイオメカニクスをやってる人間なら誰でも知っているであろう有名人だ。初期は風洞の中でマスクをつけた鳥を飛ばして酸素消費率を計測したことで知られ、後期には猛禽の翼端・狩り飛行やそれと眼の構造との関係なんかを調べたりしている。しかし恥ずかしながら、自分はこの metabolic rate の話は知らなかった。そこで Duke の公式ページ ( Vance A. Tucker | Scholars@Duke ) に行って、ダウンロード漏れしていた論文をなるべく全部収集した。

元ネタ論文

その結果、どうやら元ネタはこれらしいという論文がわかった:

この論文の figure 1 が非常によく似ている。なおこの論文のデータは全部自分で調べたわけというではなくて、他の論文等からデータを引用している。Table 1に出典付きでデータが書いてある。Cost of transport(CoT, 効率の逆数みたいなもの)を求めるには、Metabolic rate を Speed で割ればよい。この値を縦軸に、Wt(weightだろう)を横軸にとって両対数にすれば figure 1 になる。

気づき

さて、これで色々わかることがある。

  1. コンドルなんていない。Jobs は The condor used the least energy to move a kilometer みたいに言ってるが、Scientific American の記事にも、元論文にも、condor なんて出てきて。たぶんどこか他で聞いた話と脳内で勝手にマージしたんじゃないだろうか。
    • 飛行で一番いい(縦軸の CoT が小さい)のはこの中では pigeon つまりハト。ハトなんてどう考えても効率最高の鳥ではない。もっと翼が細長い鳥のほうがいいのはかなり自明(説明は省略…)。実際、先の bikeboom.info の記事を読みすすめると、the bicycle is nowhere near as efficient as Solar Impulse, the aircraft currently attempting to fly around the world. ってあるんだよね…。これが事実なのか走らないけど、飛行だって相当効率をよくできるのは間違いないだろう(参考:ソーラー・インパルス - Wikipedia)。あともっというと CoT は「どれだけ速いか」は評価項目になってないのでそれを入れると飛行が圧倒的、みたいなのもあるよね。
    • もちろん、「地面が温まった熱で生じた上昇気流(サーマル)を利用してソアリングをして、次のサーマルを目指してまたソアリングをする」という繰り返しで飛んでいる(サーマルソアリング)をたぶんコンドルはよくやっていて、それは羽ばたき続けての飛行に比べてエネルギの消費はとても小さいだろうから、完全に的はずれとは言い切れない。ただ、そもそも具体的な値がわからないのだから自転車とも他のどれとも比較のしようがないし、blew the condor away, completely off the top of the charts とかは完全に言い過ぎでしょ。
  2. Sci Am 記事の plot の縦軸がちょっとおかしい。よく見ると1, 2, 4, 6, 8が2回出てきている。これはひどい typo で、下の方の、原点に近いものたちは 0.1, 0.2, 0.4, 0.6, 0.8 が正しいことが論文を見るとわかる。
  3. 元論文には bicycle のデータはない。Scientific American が足したのかもしれない。先の bikeboom.info の記事によると、この Sci Am 記事を執筆した S. S. Wilson という人が調べたようだ。彼は lecturer in engineering at Oxford University and a fellow of St. Cross College だったらしいが…
  4. ハチドリの値はちょっと怪しい。これだけは前進飛行時ではないようで、Table 1 欄外に "Speed assumed, metabolic rate measured while hovering." というコメントがある。つまり本当のハチドリの前進飛行に比べると、 metabolic rate が大きめで cost of transport (CoT) も大きめ = 効率が悪めに出ている可能性がある。出典の論文 ( https://doi.org/10.1086/physzool.36.2.30155436 ) は有料で読めませんでした…。
  5. 魚というか遊泳が salmon というたったの1サンプルしかない。一般的には遊泳がもっとも CoT 的に有利だったと思うので *1、これだけを元に語ってしまうのはかなりミスリーディングだろう。

もちろんもっと最近の文献を探せば遥かに網羅的で正確な CoT のデータは当然色々とあるだろう。That is, however, beyond the scope of the current entry... ということでおしまい。

おまけ:縦軸 (CoT) の次元・単位について

なお、縦軸について、論文の Figure 1 "Cost of transport, kcal/(kg km)" と書いてある。一方、Sci Am 記事の plot には "COST OF TRANSPORT (CALORIES PER GRAM PER KILOMETER)" とある。Cost of transport は en.wp の記事 ( Cost of transport - Wikipedia ) にあるようにこの次元で問題ない。Sci Am は単に kcal/kg の部分をキロで約分して cal/g にしているだけだろう。つまり縦軸の数字は論文と Sci Am で全く同じになる(実際、typo を考慮すれば同じになっている)。

ところでもうちょっと考えてみると、CoT は無次元数だという。てことはこの kg とか GRAM とか言ってるのは本当は kgf と GRAM FORCE じゃん。ちゃんと区別しろよ。まぁ論文では mass ではなく weight って書いてあるし、当時の時代的に weight で語るのは普通だったのかもしれないが。そんなこといったらそもそも分子が J でなく kcal じゃんって話か…そっすね。

*1:海外に荷物を発送した人は船便が安いことを知っているだろう。

Dragonfly 4.1 (CT segmentation software) で ROI を使って部位を取り除く

Help の ROI Properties and Settings には、

ROI highlighted in clipped rendering (left), ROI extracted by increasing the ROI opacity and decreasing the opacity of the dataset (middle), ROI subtracted by setting the ROI opacity to 0 and Dataset opacity to 100%.

と書いてあるが、実際には Highlight も 0 にしないと subtraction はされない。つまり、

  • Highlight: 0
  • ROI: 0
  • Dataset: 100

が正解。まぁいろいろやればわかるだろって話かもしれないが…

Dell Precision 5820 に m.2 NVMe SSD をインストールするには(2019-10現在)

まえがき

結局面倒すぎるので諦めたんだけど、調べたので一応メモしておく。

日本語でいいならこのPDFがめちゃくちゃわかりやすい: https://i.dell.com/sites/csdocuments/Merchandizing_Docs/ja/dell_precision_expansionguide_2019june.pdf

英語はこのページがヒットする: https://www.dell.com/support/article/uk/en/ukbsdt1/sln312251/upgrading-storage-in-the-dell-precision-5820-7820-7920-tower-workstations?lang=en が、なぜか上記の日本語PDFよりはるかに分かりづらいし、ズームカードの記述がない。

reddit も少し参考になった(マニュアルのあたり。他のところでちょっと正しくなさそうな記述もある): Precision 5820 tower -- NVMe confusion : Dell

方法

2種類の方法がある。

  1. PCIe アダプタ(ズームカード)を使う方法
    • カードに m.2 SSD をマウントし、このカードを PCIe スロットに刺す。
    • カードはこれ https://www.amazon.com/dp/B0714MMD6M らしい。日本語PDFマニュアルによると型番は 414-BBBQ(2枚)と 414-BBBK(4枚)らしいが、これらの型番は他の場所で全く出てこないのが謎。
  2. Front bay を使う方法
    • 4つある front bay のうち上の2つを換装できるらしい
    • 575-BBSH と 750-ABDF という2つのキットが必要。めんどくさそうすぎる。しかも、Dell Precision 5820 Tower Owner's Manual によると、Core i9 を選んだ場合(僕らがそう)にはたったの 1x 1TB しかインストールできないとか…。せめて 1x 2TB は欲しかった。

しかしこれらの追加キットは本体と別に後で買えるのかがわからない。買えるのかもしれないが、DELLにきかないといけないし、高そう。DELL的には購入時点でBTOしとけや、ってことなんだろうが、割高だろうし、そうでなくとも今回は予算の関係でPCとして使える金額には上限があった。

というわけで、個人的にはもう面倒だし、m.2 というか NVMe というか PCIe の SSD は諦めて、ふつうの SATA/AHCISSD にした…。

Export time series of STL files (for mesh, Q-isosurface) in ANSYS CFD-Post by script (playing session file)

Overview

I'm still learning, but it seems that basically what you need to do for writing a script for CFD-Post are:

  1. Record the session
  2. Modify the session file (e.g., adding the for loop)
  3. Play the modified session file

So I did the recording, then modified that session file thanks to ( http://www.cfdresearch.com/ansys-fluent-cfd-post-scripts/ ). Basically simply adding the for loop.

Not sure of the syntax yet, but it seems the variable can be specified with $ prefix, as in shell script.

Sample

Let's say you have a time series of the result file (e.g., flapping wing) and you want to same some of them as STL file.

In the sample below, the you're saving 100 time instances as 1.stl, 2.stl, ... for each directory, where actual timestep values for Fluent simulation are 10, 20, 30, ... so the timestep has to be specifed as $i*10.

Here you're saving wing surface and Q-isosurface, both of them had to be created before playing the script.

# Session file started:  2019/10/04 16:21:36
# CFX-19.1

# To avoid unnecessary file pre-processing and modifications, include
# COMMAND FILE at the top of your session file.
# If it is not included, the file is assumed to be older and will be
# modified for backward compatibility.
COMMAND FILE:
  CFX Post Version = 19.1
END

! for ($i=1; $i <= 100; $i=$i+1) {

> load timestep=$i*10

EXPORT:
  ANSYS Export Data = Element Heat Flux
  ANSYS File Format = ANSYS
  ANSYS Reference Temperature = 0.0 [K]
  ANSYS Specify Reference Temperature = Off
  ANSYS Supplemental HTC = 0.0 [W m^-2 K^-1]
  Additional Variable List =
  BC Profile Type = Inlet Velocity
  Export Connectivity = Off
  Export Coord Frame = Global
  Export File = E:/wing_surface/$i.stl
  Export Geometry = On
  Export Location Aliases =
  Export Node Numbers = Off
  Export Null Data = On
  Export Type = STL
  Export Units System = Current
  Export Variable Type = Current
  External Export Data = None
  Include File Information = Off
  Include Header = On
  Location = back
  Location List = wing_surf
  Null Token = null
  Overwrite = On
  Precision = 8
  Separator = ", "
  Spatial Variables = X,Y,Z
  Variable List =
  Vector Brackets = ()
  Vector Display = Scalar
END
>export

EXPORT:
  ANSYS Export Data = Element Heat Flux
  ANSYS File Format = ANSYS
  ANSYS Reference Temperature = 0.0 [K]
  ANSYS Specify Reference Temperature = Off
  ANSYS Supplemental HTC = 0.0 [W m^-2 K^-1]
  Additional Variable List =
  BC Profile Type = Inlet Velocity
  Export Connectivity = Off
  Export Coord Frame = Global
  Export File = E:/Q/$i.stl
  Export Geometry = On
  Export Location Aliases =
  Export Node Numbers = Off
  Export Null Data = On
  Export Type = STL
  Export Units System = Current
  Export Variable Type = Current
  External Export Data = None
  Include File Information = Off
  Include Header = On
  Location = back
  Location List = /VORTEX CORE REGION:Q
  Null Token = null
  Overwrite = On
  Precision = 8
  Separator = ", "
  Spatial Variables = X,Y,Z
  Variable List =
  Vector Brackets = ()
  Vector Display = Scalar
END
>export

!}

論文読み: Thermodynamics of the bladderwort feeding strike—suction power from elastic energy storage

概要

論文

Thermodynamics of the bladderwort feeding strike—suction power from elastic energy storage | Integrative and Comparative Biology | Oxford Academic

発端など

全然わからんと言われると(けど自分では大体わかりそうとなると)解説したくなる。なにより内容的にも面白そうだし、last author が僕が修士か博士学生のときにボス・他の学生と共同研究をしていた Ulrike(ユリーク、に近い音)だったこともあって読んでみた。彼女の滞在中に、Ragtag という古着屋に行きたいというので案内したのは未だに覚えている*1

内容説明

先に言っとくと数式のとこは読んでません。アブストに Navier-Stokes とあるけど CFD をやってるとかではなく理論解析的なことをしてるみたい。

エネルギ変換パス

Figure 2 を見るとわかりやすいのだが、エネルギ変換は以下のようなパスを辿っている:

  • bladderwort(タヌキモという植物、獲物を吸い込むらしい):
    • 化学エネルギ(筋肉相当のやつ…?) → 弾性エネルギ(壁を変形させる loading phase)+熱(変形の際にわずかだろうけど熱になる)
      • 弾性エネルギ → 運動エネルギ(獲物を吸い込む水流を生み出す unloading/suction phase) + 粘性散逸による熱
  • largemouth bass(オオクチバスという魚):
    • 化学エネルギ(筋肉だと思う) → 運動エネルギ(獲物を吸い込む水流)+ 粘性散逸による熱

で、このオオクチバス自体なのかはわからないけど(読み込んでないので)、タヌキモとサイズの近い魚の larva(生後すぐの…稚魚?)と比較した場合、タヌキモの瞬間的な suction の方が、larva の suction feeding よりも効率がいいらしい。つまり、このエネルギ変換における、最初に投入した化学エネルギに対して最終的に有効に使える運動エネルギの割合が大きい(熱の割合が小さい)場合に効率が良い、ということ。どれくらい違うかというと、タヌキモでは17%が粘性散逸によるロスである一方、fish larva では 60% にもなるらしい。なお、この17%というのは、ちゃんと読んでないのでわからないけど、たぶん「化学エネルギ→弾性エネルギ+熱」のときの熱ではなくて、「弾性エネルギ→運動エネルギ+熱」の方だけの話だと思う。前者の熱は遥かに小さいんじゃないかな。ローディングは30分から10時間もかけてゆっくりやるらしい。と思ったけど…いや時間の問題じゃないか。移動量が小さいことの方が本質かな?なんにせよ、この壁面変形はたぶんかなり小さくて、ほとんど流れは起きないんじゃないだろうか。すいませんちゃんと読んでないし先行研究とかも全然見てないのでこの辺はアヤシイ…

PIV実験の手法説明

んで、この論文のメインパートは、この 17% という粘性(熱)へのロスを求めるところ、っぽい。実験部分だけざっと読んだので少し内容を説明してみる。

PIV (particle image velocimetry) という、流体中に浮かべた小さな粒子の運動を撮影して、流れの速度分布を求める手法を使っている*2。まず実物のタヌキモを使ってこの PIV をしているが、動きが 0.1 から 1 ミリセカンドで終了するらしく、速すぎるので、50,000 fps (frames per second) つまり1秒間に5万コマもの超高速で撮影しており、そのため解像度が 320x280 ピクセルに制限されている。このため時間・空間解像度が非常に小さく精密な計算には耐えないことから、このPIV結果自体を直接使用して解析するのではなく、かわりに、この結果をもとにして、拡大模型によるメカニカルシミュレーション(これもまたPIVだがもっとゆっくりでピクセル数も多い)を行い、そちらをエネルギ変換の計算に使っているようだ。

拡大模型を作る際には、スケールが違っても流れの様相が相似であることを保証するために、流れ場の相似則を満たす必要がある。それにはまず、形状が相似であることが必要だ。その上で、流れに関係する無次元数を一致させることが必要。今の場合は Reynolds 数(記号 Re)だけを一致させている*3。直径が 96 μm, 移動距離が 160 μm という微少なシリンジと思えばよいらしいのだが、この微小距離を 5.2 m/s という高速(最大速度)で移動するため、Re はこのサイズにしては意外と低くない 500 になるという。Re は Re = 長さx速度/動粘性係数で定義される。動粘性係数は粘性係数/密度なのである温度では定数だ。Re を求めるには速度と長さの選び方に任意性があるのだが、今回は直径を代表長さにしているようだ (Re = 5.2 * 96e-6/1e-6 = 499.2、ただし水の動粘性係数 1e-6 m^2/s はよく使われるざっくりした値)。さて、拡大模型は直径が大きいので、その分だけ速度をゆっくりにできる。一方で動粘性係数が水より70倍くらい大きな流体(鉱物油)を使っているため、速度はその分は速くすることにはなる(あるいは直径をもっと大きくするというか)*4。結果的に、直径は 32 mm と約320倍に、速度は1.09 m/sと1/5近くなっている。これにより滞在時間的には1470倍とかなり長くなる *5 ので、撮影的にも楽になる…といっても 1000 fps だけど。しかしこれによってピクセル数が増やせる(書いてないけどたぶん最大の 1280x800 だと思う)。

で、このあとは数式が並んでエネルギ変換効率の計算をしてるようだ。ここでは実物のタヌキモの容積計測値と、メカニカルシミュレーションによる流れの計測結果を使っているようだ。詳細は読んでません。

なぜ魚より効率がいいのかの推測

どうも Discussion みてもはっきりと書いてないんだけど、たぶん魚の方が(筋肉を使うしかないから)流れの吸い込み速度が遅くて、Re が低くて、つまり粘性散逸の割合が高い、ってことじゃないのかな?なんでこれをもっとハッキリくっきりわかりやすく書かないのかはちょっと謎。なぜかっていうと Ulrike は昔 Science の assistant editor かなんかをしてたくらいの経験があって論文のストーリの書き方にめちゃくちゃ気を使うので。むかし共著で Nature に出た swift の論文 *6 を書いたときの話を教えてくれたんだけど、最初のころの原稿はいかにもエンジニアーって感じの書き方・図だったのを彼女が相当ガシガシ手を入れて直したらしい。というわけで僕が読み飛ばして見落としてるだけで、そのあたりの議論はちゃんと書いてあるのかも。

拡大模型の妥当性

拡大模型の形状、相似じゃないよねこれ。そのことが本物の流れ場と拡大模型内の流れ場とに差異を生んでいることは確実で、あとはそれが無視できる程度なのか、重要なのか、というところの評価(少なくとも推測)が必要なのだけど、この論文自体には実物の流れ場の図が全く載っていなくて、定性的には判断のしようがない(数字で書いてるかもしれないが、そこまでは読み込んでない)。んでよく見ると "The particle tracking procedure and analysis is described in greater detail in Berg et al. (in press)." ってあるんだよね… どうやら実物の流れ場についてはこの別論文に書いてあるようだ。

*1:僕にはとても手が出ない値段だなーと思ってそれを言ったら、「長く使うんだからいいものに多少お金使うのはありでしょ」って言われた気がする。たしかにアリだ。高いと言っても古着なわけではあるし。あ、いま調べたら千葉店は閉店していた… https://twitter.com/ragtagshop/status/476179978724597760

*2:レーザシートで薄い板上の範囲のみを光らせることが多い。粒子としては空気中ではオリーブオイルや化学合成油の小さな液滴使われる。水中では(中性浮力に調整した)プラスチックの(?)粒子や気泡などが使われるようだ。

*3:タイトルで熱力学と言ってるわりに、別に熱力学というか熱流体関係の無次元数(めっちゃたくさんある)には気を使ってはいないみたいだった…いやたぶん大丈夫なんだと思うんだけど。

*4:この実験で鉱物油を使った理由は、どうもPIVのための都合のようだ。容器と密度が?近いので外からの撮影がしやすいとある。また可視化のための泡が留まりやすいとかもあるのかも…?

*5:この計算は、320 * 0.96 * 5.2/1.09 = 1465.5 かな?

*6: How swifts control their glide performance with morphing wings | Nature