見出し画像

【内容一部公開】「作って学ぶ」CFDのしくみ!――近刊『Pythonによる はじめての数値流体力学』

2024年9月下旬発行予定の新刊書籍、『Pythonによる はじめての数値流体力学』のご紹介です。
同書の一部を、発行に先駆けて公開します。



***

はじめに

この本の概略
水や空気などの流れをコンピュータを使ってシミュレートするやり方は、数値流体力学(computational fluid dynamics、CFD)とよばれています。この本ではCFDの、とくに非圧縮流れとよばれる流れのシミュレーションに関する基礎的な事項について、Pythonでプログラムを実際に作って動かしてみながら解説します。この本は、流体力学についての基礎的な知識がなくても読解できるようにしたつもりではありますが、「境界層」などの流体力学の用語の解説はしていません。流体力学の良書は数多く出版されていますので、一般的な知識を得るにはそれらを参考にしてください。また圧縮性流れの数値シミュレーションについても、この本では扱っていません。Pythonについても、この本で扱う範囲については少しだけ解説していますが、不足と思われたなら入門書などで適宜補填してください。

この本のおもな目的
2024年の時点で、CFDを行うための市販ソフトウェアは多数販売されています。その中には無料のもの、オープンソースのものもいくつも公開されています。これらを使えば、CFDに関する知識がなくても流れのシミュレーションを行うことができます。しかし、シミュレーションにおいて、その中身を理解しないで使うことは大変危険でもあり、また計算機資源の無駄づかいにもつながります。

流れの完全なシミュレーションを行うには、現在のスーパーコンピュータをもってしても、計算能力がまだまだ足りていません。限られた計算機の性能の中で信頼性のある計算を行うためには、流れ現象やCFDについての知識が必要となります。また、不適切な境界条件や初期条件で解析すれば、現実とは違う解を得てしまうことになります。実際のCFDでは、乱流や混相流のための計算モデルを使う際に不適切なモデルを選択しても、やはり間違った解が得られてしまいます。

コンピュータは正直なので、不適切な条件を設定すれば不適切な結果を出してきます。ですから、信頼性のあるシミュレーションを行うためには、CFDについての知識が不可欠です。

この本の副次的な目的
CFDに限らず、数値解析のプログラムにおいて予想と異なる結果が得られた場合には、その原因がプログラミングのミスによるものなのか、それとも使用している手法が妥当ではないためなのかを判別するのは非常に難しいです。ときには参考にした教科書や論文の記述があやふやであったり、一般性がなかったりすることもあります。このため、自分のソースコードに間違いが(ほぼ)ないことを確認しながら作っていくことがとても大切です。

この本では、初歩的なCFDを実行するために必要となる関数群を、少しずつチェックしながら作って積み上げていく過程を示しています。これは、できるだけミスをしないで、楽をしながらプログラムを作るための有力なやり方の一つであり、ソフトウェアの専門家にはユニットテスト、あるいはTDD(test-driven development)として知られている方法の、原始的なやり方です。

CFDに限らず、さまざまな計算のためのプログラムを書かなくてはならない人は多いと思います。そのような人がプログラミングの教科書の例題よりも少し規模が大きく、実用に近いプログラムを作る際の参考になれば、とも思っています。

ここに示したソースコードは完全なものではありません。性能よりも読みやすさを優先していますし、またミスが残っているかもしれません。これらのソースコードを、「自分の手で改良してやる」くらいの気持ちで読んでみてください。


***

横浜国立大学 松井 純(著)

【Pythonで作りながら、CFDの基礎を学ぶ】
流れをシミュレーションし、結果を可視化するプログラムをPythonで実装しながら、流体の数値計算のしくみを学べる本です。
実際に動かしてみることで、さまざまな計算手法や数式の意味が体験として理解できます。
 
【本書の特長】
●はじめてでも学びやすい
対象を非圧縮性流体に限定し、差分法による離散化の考え方からなだらかに、わかりやすく解説。初学者でも無理なく理解できます。
 
●実用へのステップアップが可能
ひととおりの流体解析のしくみに加え、コードの改良方法や実装上のコツなども紹介しており、研究や実務での解析に向けた実力が身につきます。
 
●プログラミングのスキルアップにもつながる
Pythonでのデータの扱い方や、コードを書くときの注意点も記載。流体解析を実践しながら、自然にPythonの実力が身につきます。
 
本文中のソースコードはWEBからダウンロード可能。これからCFDを学ぶ人や、従来のテキストではいまいち腑に落ちない人、また解析ソフトをうまく使えている実感のない人にも、ぜひ手に取ってほしい1冊です。

【目次】
はじめに
第1章 準備と基礎的な計算
 1.1 表記と定義
 1.2 準備
 1.3 Python「超」入門

第2章 有限差分法

 2.1 離散化
 2.2 有限差分法
 2.3 ヤコビ法による求解

第3章 拡散方程式の計算
 3.2 オイラー陽解法
 3.3 オイラー陰解法
 3.4 半陰解法

第4章 対流方程式の計算
 4.1 1次元対流方程式
 4.2 CFL条件
 4.3 中心差分による解法
 4.4 1次風上差分による解法
 4.5 高次風上差分
 4.6 CIP法による解法

第5章 流れ解析の手法
 5.1 流れの解き方
 5.2 計算スキーム(SMAC法)
 5.3 MAC系列の計算スキーム
 5.4 スタガード格子
 5.5 境界条件

第6章 流れ計算の実装
 6.1 流れ解析アプリケーションの設計
 6.2 流れ場データの実装
 6.3支援関数の実装
 6.4 流れ解析部の実装
 6.5 流れ解析の実行

第7章 後処理
 7.1 結果の可視化
 7.2 スカラー量の可視化
 7.3 ベクトル量の可視化
 7.4 流線の可視化
 7.5 渦の強さを示す量

第8章 流れ計算の改良
 8.1 高速な求解法
 8.2 粘性項評価の改善
 8.3 解きたい流れを解く

第9章 さまざまな流れを解く
 9.1 乱流モデル
 9.2 定常計算
 9.3 内部物体や移動物体のある流れ
 9.4 液面のある流れ
 9.5 前処理:一般曲線座標系と格子生成 

次のステップへ
問題の解答例とヒント
参考文献
索引

この記事が気に入ったらサポートをしてみませんか?