- 河村 哲也、佐々木 桃, 2023: Python による流体解析 (実践 Python ライブラリー)。朝倉書店, 216 pp. ISBN 978-4-254-12902-1.
2023年7月の新刊。A5判 横書きのペーパーバック。
河村 (2014) 『流体解析の基礎』をもとに、その本の Fortran または C によるプログラムを佐々木さんが Python に書きかえたものである。
題材はおもに、非圧縮流体の運動方程式系を差分近似でとくものである。付録で、有限要素法や有限体積法の考えかたも紹介されている。
非圧縮流体の運動方程式は、圧力の式と速度の式の連立になるが、圧力を消去して変形した方程式系をつかう方法がある。2次元のばあいは「流れ関数」と渦度、3次元のばあいは「ベクトルポテンシャル」と渦度である。他方、連立のままとく方法もある。ここで非圧縮流体ならば速度ベクトルの発散は 0 となるべきなのだが、それをみたす数値解を求めるのは困難だ。厳密には 0 にならないがじゅうぶん小さくなるようなくふうがあり、MAC (marker and cell) 法とよばれている。本書では 2次元と 3次元の問題に MAC 法を適用している。
現実的な問題として室内気流をあつかっている。ここでは温度による密度変化があるので厳密には非圧縮ではないのだが、密度の変化の効果は浮力にだけあらわれるという Boussinesq (ブシネスク) 近似をしている。
本書のプログラムは、Python 文法にあってはいるが、「Python らしいプログラム」というよりも「Fortran らしいプログラム」だと思う。しかし、Python であまり複雑なプログラムを書くことはすすめられず、本格的な流体シミュレーションをするには Fortran か C にうつったほうがよいから、むしろ「Fortran らしい Python」のほうが初級むけの教材としてはよいのかもしれない。
それにしても、配列の添え字の順序とループの関係はこれでよいのだろうか。Fortran では、配列 A(i,j) の内容は、計算機の記憶装置内の位置が、1つめの添え字 (ここでは i) が 1つちがうものがとなりどおしにあり、あとの添え字 (ここでは j) が 1つちがうものはもっと遠い。それで、二重ループは i によるものを内側にしたほうがよいとされている。ところが Python の配列変数 A[i,j] では、あとの添え字 (ここでは j) のほうが内側だと聞いた。そうすると、j によるループのほうを内側に書いたほうがよいと (わたしは) 思う。【むしろ、Fortran の A(i,j) には Python の A[j,i] を対応させるべきだという考えもある。わたしは自分の気象データ処理ではその考えにしたがっている。】 しかし本書では A[i, j] をあつかうループは i のほうが内側に書かれている。著者の判断は、その順序の入れかえによる実行効率のちがいは無視できるということなのかもしれない。それよりも、Fortran にうつることになったばあいのうつりやすさのほうが重視されているのかもしれない。
文献
- 河村 哲也, 2014: 流体解析の基礎。朝倉書店。
折りかえしのあとに目次をつける。
Continue reading