はじめに

本書について

流体解析ツールボックスOpenFOAMはオープンソースのソフトです。OpenFOAMのソースコードを眺めだすと非常に広大でかつ深い世界が広がっていることがわかります。本書はそんなOpenFOAMの世界を歩くための最初の道しるべとして書きました。稚拙な文章ではありますが、少しでも参考になれば幸いです。

本書は学習コストの高さを少しでも下げるために、環境構築からOpenFOAMの操作の基本、実際に計算をする上でどう扱っていったらいいのかを説明します。応用事例として利用ニーズの高い、二相流やオーバーセット(重合格子)の実行方法についても触れます。

本書では数値計算手法や物理現象に関する解説はいたしません。各分野の専門書をご覧ください。

本書はOpenFOAMの歩き方 第2版を2020年6月にリリースされたOpenFOAM v2006に対応させたものになります。最新バージョンでの変更点やリリースノートについて追記し、OpenCFD版の最新OpenFOAMの使い方が分かるように見直しています。

第1章はOpenFOAMについてアプリケーションの構成、リリースの歴史から説明し、ライセンスや利用事例について述べます。

第2章はOpenFOAMの環境構築について説明します。計算に絶対必要となるパソコンの選び方を紹介し、Windows10、Linux、MacにOpenFOAMをインストールする方法を述べます。また、結果の可視化に必要なオープンソースの可視化アプリケーションParaViewのインストールも説明します。

第3章ではOpenFOAMの計算の基本として付属しているチュートリアルケースの実行方法を説明します。チュートリアルケースからキャビティ流れを計算するcavityを対象として、OpenFOAMのインプットファイルの構成と基本の実行コマンドについて述べます。

第4章はSTLファイルを使った計算について説明します。OpenFOAMでは任意形状の計算を行うためにSTLファイルを形状定義のデータとして使用します。STLファイルをもとに計算メッシュを作成するためにsnappyHexMeshを使用します。snappyHexMeshが参照する設定ファイルの中身について修正する箇所を中心に説明します。

第5章は二相流計算について説明します。二相流計算ではそれぞれの相を示す変数が増えます。各相の初期状態を設定するsetFieldsユーティリティについて設定ファイルの内容から実行方法まで述べます。また、この章ではOpenFOAMの計算で基本となる複数のチュートリアルケースのインプットを組み合わせて計算する方法について学びます。

第6章でOpenCFD版のOpenFOAMに搭載されているオーバーセットメッシュ(重合格子)機能を使用した計算方法について、用意したSTLを使って計算する方法を述べます。この章では5章よりもさらにチュートリアルケースのインプットを組み合わせて計算します。このインプットの準備が理解できればOpenFOAMの計算インプットを用意する基本はマスターしたといえるでしょう。

第7章はOpenFOAMの勉強をするにあたり、モチベーションを維持する方法について述べます。OpenFOAMはオープンソースのため、アプリケーションの金銭的な導入コストはかかりませんが、学習コストが高いことは良く知られています。ある程度長期的に学習を行うためモチベーションを下げないための方法は重要であると思い、代表的な学習のやり方を述べました。

第8章はOpenFOAMで困ったときの対処法について述べました。OpenFOAMは機能のすべてを網羅したマニュアルを持ちません。計算の設定にはカット&トライが必要になります。大なり小なり壁にあたることも多いため、そういったときの対処法について説明しています。

第9章ではv2006の新機能について説明しています。OpenCFD版のOpenFOAMは半年に1回バージョンアップを行いますが、機能の大きな変更や追加も多いためリリースノートを読むことは重要です。本書では和訳したリリースノートをもとに最新の機能について説明しています。

本書の対象について

本書はOpenFOAMのOpenCFD版v2006を対象にしています。結果処理はParaViewのバージョン5.8.1を使用します。旧バージョンとは画面の構成が異なる場合があるのでご注意ください。

本書は指定がない場合、Windows10での実行を対象としています。

お問い合わせ先

本書に関するお問い合わせ:hammamania@gmail.com

第1章 OpenFOAM

1.1 OpenFOAMについて

OpenFOAM はオープンソースのCFD(Computational Fluid Dynamics)ツールボックスです。200を超えるアプリケーションとユーティティがインストール後から使用でき、それらを組み合わせてCFDの計算を実行できます。また、オープンソースであることからカスタマイズや機能の追加も可能です。OpenFOAMはC++をメイン言語として書かれています。

OpenFOAMは1989年にFOAM(Field Operation And Manipulation)として開発され、2004年にOpenFOAM(Open source Field Operation And Manipulation)としてリリースされました。2011年 ESIに買収され、以降、本家となるOpenFOAM Foundation版、OpenFOAM Foundation版やExtend版と呼ばれる派生版から機能を集約したOpenCFD版の二つのOpenFOAMが提供されています。

OpenFOAMの年表 を次に示します。

OpenFOAMの年表1

図1.1: OpenFOAMの年表1

OpenFOAMの年表2

図1.2: OpenFOAMの年表2

OpenFOAMの年表3

図1.3: OpenFOAMの年表3

先進的な機能が多く含まれているため、最近ではOpenCFD版を使うユーザーが増えていますが、アップデートを重ねるごとにソースコードの構成が複雑化していることもあり、カスタマイズの資産を持っている開発者などはOpenFOAM Foundation版を使うこともあります。

OpenFOAMはソルバ以外にもプリプロセス、ポストプロセスを助けるユーティリティが提供されています。メッシュや初期条件を設定するユーティリティもあれば、計算結果のファイルから追加で結果を生成するユーティリティなどもあります。

また、OpenFOAMでは計算結果の可視化にParaViewを使用します。ParaViewはKitWare社から配布されているオープンソースの可視化アプリケーションで、OpenFOAMを含め様々なデータの読み込み、可視化ができます。

OpenFOAMの基本構成

図1.4: OpenFOAMの基本構成

OpenFOAMは様々な現象を解くための標準ソルバが最初から使用できるようになっています。OpenFOAMで解くことができる主な分野は次の図を参考にしてください。

OpenFOAMで計算できる分野

図1.5: OpenFOAMで計算できる分野

OpenFOAMのメリット とデメリット を次に示します。

  • メリット
    • オープンソースなのでライセンスコストはかからない
    • ユーザーによるコミュニティが発展しているため、使用者同士での情報提供や助言等の恩恵が受けられる。
  • デメリット
    • マニュアルはあるが、公式の無償サポートはない
    • 設定する数値などの目安は自分たちで考える必要がある(デフォルト値はほぼない)。
    • 操作はCUI(コマンドベース)のみ

OpenFOAMは無償で使用できるオープンソースのアプリケーションになりますが、デメリットがないわけでないというのを承知した上で使うようにしてください。

1.2 ライセンスについて

OpenFOAMはGPLライセンス で提供されています。GPLライセンスは、このライセンスを適用されたコードから生成されたアプリケーションを持つ人に開発者にソースコードを開示することが要求されるライセンスになっています。また、GPLライセンスは、このライセンスを持つコードが別のプログラムに組み込まれた場合、そのプログラムもGPLライセンスとなるという特徴があります。そのため、GPLライセンスのプログラムは開発において敬遠されることもありますが、不特定多数の人間に公開しないといけないという制約はありません。

GPLライセンスのプログラムを実行して生成されるデータについてはこのライセンスの対象外になります。そのため、単にOpenFOAMを計算ソルバとして利用する場合はライセンスのことで悩む必要はありません

1.3 利用事例について

OpenFOAMは企業や研究機関で利用されています。無償であることからソフトウェアライセンスのコスト問題の解消に役立つことが考えられます。また、高いカスタマイズ性から理論の実装やソフトウェアの内部ソルバとして組み込みもできます。例えば、新しい乱流モデルを組み込む、OpenFOAMを計算ソルバとしてその前後のプリ・ポスト処理を実施するためにGUIを作る、などがあげられます。

1.4 OpenFOAMを始めるには

1.4.1 OpenFOAMの始めるために必要なもの

OpenFOAMを始めるにはいくつか必要なものがあります。それらを次の図に示します。

OpenFOAMを始めるには

図1.6: OpenFOAMを始めるには

まず、計算を実行する計算機が必要です。これがないと計算が実行できません。ただし、高性能な計算機ほど予算が多く必要になります。アカデミックでは大学などのスパコンが利用できます。企業だとFOCUSなどのスパコン が利用できます。Rescaleというクラウドサービス もOpenFOAMに対応しています。

  • アカデミック
    • 東京大学: https://www.cc.u-tokyo.ac.jp/supercomputer/
    • 九州大学: https://www.cc.kyushu-u.ac.jp/scp/system/new-system.html
    • 名古屋大学: http://www.icts.nagoya-u.ac.jp/ja/sc/
    • 京都大学: http://www.iimc.kyoto-u.ac.jp/ja/services/comp/
  • 産業利用
    • FOCUS: https://www.j-focus.or.jp/focus/
    • Rescale: https://www.rescale.com/jp/

次に、OpenFOAMのインストール が必要です。OpenFOAMはWindowsなどで使うアプリケーションのようにインストーラがあるわけではありません。WindowsだとWSL(Windows Subsystem for Linux)を使ったインストール、Linuxではコンパイルが必要で、MacではDockerを使用します。また、各OS共通で使える仕組みとしてVirtualBoxのような仮想マシンも挙げられますが、マシンスペックをフルに活用できないため、本書では割愛します。それぞれの特徴は次の通りです。

  • WSLを使うスタイル
    • Windows10上でLinuxを使うことができる機能。最近はスタンダードになりつつある。
  • Linuxでソースコードをコンパイルするストロングスタイル
    • 最も基本のスタイル。サポート外のLinuxだと地獄が待っているかもしれない。
  • 公式のDockerスタイル(Mac、Linux、Windows)
    • インストールはそれほど難しくない。
    • Dockerの知識が多少必要
  • 伝統的な仮想マシンスタイル
    • VirtualBoxやVMWareを使って計算機に仮想マシン を構築する。(例:DEXCS、CAE Linux)使い捨て出来るがマシンの能力をフルに使えない

1.4.2 OpenFOAMを使用した計算フローについて

OpenFOAMを使用した計算フロー を次に示します。

OpenFOAMを使用した計算のフロー図

図1.7: OpenFOAMを使用した計算のフロー図

まずは、計算をする対象について考えます。

  • どんな計算をするか
  • どのような形か
  • 何の物性を使うのか
  • どこに、どの条件を設定するのか
  • どれを結果として得るのか

次に形状を作成します。形状作成はCADを使うことが多いですが、簡単な形であればOpenFOAMのメッシングユーティリティで作ることもできます。

形状ができたら、メッシュ を作成します。OpenFOAMで提供されているメッシュを作成するユーティリティを次に示します。

  • blockMesh : 6面体のメッシュを作成するユーティリティ。形状は設定ファイルで定義する。
  • snappyHexMesh : STLファイルで表現される形状に対して、メッシュを作成することができる。最も多く使われており設定の幅も広い。
  • foamyHexMesh : STLファイルで表現される形状に対して、メッシュを作成することができる。メッシュの直交性を改善するために開発されているが、実用レベルまでは達していない。
  • cfMesh : STLファイルで表現される形状に対して、メッシュを作成することができる。他の企業から取り込まれたメッシャーで高速にメッシュが作成できるが、マルチリージョンには対応していない。

メッシュが出来たら条件を設定します。条件はインプットとなるファイルにテキストエディタなどを使って書き込みます。

条件入力が終われば、あとは計算を実行するだけになります。OpenFOAMの計算実行 は次のようにコマンドを入力して行います。

icoFoam

foamJob

./Allrun

一つ目の実行方法としては直接計算ソルバの名前を打ち込む方法です。これはイメージがしやすい実行方法ですが、計算実行中のログは画面に表示されるだけで残りません。

計算ログ を残すためにはfoamJobユーティリティを使います。これはユーザーガイドにも載っている方法で計算ログはファイルに書き出されます。

また、チュートリアルのデータには計算実行用スクリプトのAllrunファイルが含まれており、これを実行する方法も選択できます。Allrunファイル はシェルスクリプトです。基本的に自分で用意する必要があります。Allrunファイルの書き方をマスターすると、インプット作成から結果処理まで処理を自動化できます。

計算が終了したらParaViewを使って可視化します。コマンドベースで結果を出力するユーティリティもあり、y+、トルク、任意面の流量などを出力することができます。

1.5 学習方法について

OpenFOAMは学習コストが高いアプリケーションであるといわれています。その理由の一つとして公式ドキュメント ですべての機能が説明されていないことが挙げられます。ユーザーおよび開発者は実施したい計算や組み込みたい機能のためにOpenFOAMのソースコードやチュートリアルデータを自分で読解する場面が出てきます。

本書はこの学習コストを下げるために書いていますが、網羅的ではなく、あくまで必須の知識に重点を置いて書いています。そのため、より深くOpenFOAMを知るためには様々な資料を参考にする必要があります。これから参考となる資料について紹介していきたいと思います。

OpenFOAMのOpenCFD版はドキュメントが拡充され、以前より情報が得やすくなっています。ユーザーガイドはOpenFOAMを使うにあたり、最小に覚えるべき操作についてまとめられている資料で初級者はこちらを読むことをお勧めします。

また、ユーザーガイドを読み終わった後は、チュートリアルガイドを読んで実行できる計算を増やしていきます。

また、チュートリアルなどを整理している公式のWikiもあります。

開発をしたい人向けにExtended Code Guideも用意されています。こちらはOpenFOAMのソースコードの中身について整理されており、カスタマイズをする際の手助けになります。

また、公式ではありませんがOpenFOAMの日本語の書籍 も出ています。対応バージョンは最新でないものもありますが、有益な情報が日本語で読めるので、英語が全く駄目だという方はこちらを参考にするのもよいかと思います。

1冊目はオープンCAE学会編のOpenFOAMによる熱移動と流れの数値解析です。この本はOpenFOAMの操作だけでなく、流体解析における用語や理論の説明を含んでいて初学者から中級者まで幅広くお勧めできます。

2冊目はSourcefluxから発売され、日本で翻訳されたOpenFOAMプログラミングです。この本は翻訳の期間もあり、OpenFOAMの対応バージョンは2と古いですが、カスタマイズについて取り上げている本は少なく考え方という点では参考になります。

これらの資料を併読しながら、本書の内容を見ていただけるとより理解が深まると思います。

試し読みはここまでです。
この続きは、製品版でお楽しみください。