こんにちは(@t_kun_kamakiri)。
流体解析のオープンソースであるOpenFOAMのカスタマイズをしたいな~って思って記事を書き始めています。
OpenFOAMに関する記事は何個か書きましたが、自分で解析したいようにカスタマイズした経験はないので勉強しようかなと思っています。
OpenFOAMはC++で書かれているのですが、今の僕はC++を全く理解していませんし、C++で数値計算をしたこともありません。
それに、流体力学の知識はあったとして、流体解析をまともにできる知識もあまりないのです。
でも、OpenFOAMで流体解析ができたら仕事でも使えますし、何よりソースコードがオープンになっているのでカスタマイズしたいじゃないですか(^^♪
OpenFOAMをカスタマイズするにあたっては、色々としなくてはいけないことがあるので本記事でまとめておこうと思います。
- OpenFOAMのインストール
- WSLでのフォルダ・ファイルの権限について
- 環境変数の確認
- C++の勉強について
カスタマイズするにあたって参考になる記事を以下にまとめておきます。
※たぶんもっと情報があると思うので探しては追記していきます。
これくらいが、とりあえず手順を丁寧に書いている参考記事ではないでしょうか。
OpenFOAMはバージョンが違うとソースコードの中身が違っていたりするので、注意する必要があります。
【使用環境】
Windows10
WSL (Windows Subsystem for Linux)
OpenFOAM-v1912
OpenFOAMのインストール方法
現在、財団版とESI版の2種類のバージョンが存在します。
- The OpenFOAM Foundation: https://openfoam.org/
- ESI (OpenCFD社): https://www.openfoam.com/
OpenFOAMの環境を整える方法は色々あるのですが、Windows10ならWindows上にLinuxを導入してしてOpenFOAMをインストールする方法が簡単で使いやすいので、僕はそうしています。
無事、OpenFOAMをWindows上で使えるようになりました(^^)/
フォルダ・ファイル権限の確認
WSLで追加のファイルを作成しようと思うと、なぜか権限がなくファイルの編集を行うことができません。
例えば、Windows上で「/home/kamakiri/OpenFOAM/kamakiri-v1912/」に移って「applications」というフォルダを作成してみます。
これをLinux上でフォルダ権限を見ると、権限がないことが確認できます。
※Linuxでの権限についてはこちらがわかりやすいです。
例えば、今から「/opt/OpenFOAM/OpenFOAM-v1912/applications/solvers/incompressible」というOpenFOAMの本体のソースコードを、自身でカスタマイズするためのフォルダ(「 /home/kamakiri/OpenFOAM/kamakiri-v1912/applications/solvers/incompressible」)にWindows上でコピーしたとします。
※「/applications/solvers/incompressible」の部分はフォルダを自身で作成してください。
そして、Linux上で「applications」のフォルダで移動しようとすると、以下のようになります。
じゃー権限を付ければいいのか・・・ってことで、以下のコマンドを打ちます。
1 |
chmod 777 applications/ |
これで権限を確認してみます。
で、権限を確認すると・・・
こんな感じで、ひとつひとつに権限を与えていたらキリがないので、階層以下のフォルダ全てに権限を与えるというのをやります。
1 |
chmod -R 777 applications |
そうすると、「applications」以下の階層のフォルダとファイルは全て権限がついて編集することができます。
これでOKと思いきや、例えばWindows上で以下のように新しいファイルを「icoFoam」の中に作成してみて、Linux上でファイル権限の確認をします。
Windows上でファイル作成:「TEeq.H」
Linux上で見ると「TEeq.H」というファイルの表示がありません!
試しに、Linux上で「TEeq_linux.H」というファイルを作ってみます。
Linux上でファイル作成:「TEeq_linux.H」
試しに、Windowsにインストールしているエディタ(今回はVisual Stdio Codeを使用)でファイル編集をして、Linux上の「vim」で中身を確認してみましょう。
というわけで 結論
- コピー、ファイル作成、ファイル削除できるだけLinux上のコマンド操作で行う!
- 編集はWindowsのエキスとエディタで行う!
これが一番楽でしょう!
では、以下からが本題です。
環境変数を確認しておく
OpenFOAMにはファイル移動などを簡単に行えるように、環境変数が設定されています。
環境変数を確認するには、
1 |
printenv |
と打てば確認できます。
では、本記事で出てくる環境変数を以下にまとめておくと便利でしょう!
環境変数 | 値 |
$WM_PROJECT_DIR | /opt/OpenFOAM/OpenFOAM-v1912 |
$WM_PROJECT_USER_DIR | /home/kamakiri/OpenFOAM/kamakiri-v1912 |
$FOAM_SOLVERS | /opt/OpenFOAM/OpenFOAM-v1912/applications/solvers |
$FOAM_USER_APPBIN | /home/kamakiri/OpenFOAM/kamakiri-v1912/platforms/linux64Gcc63DPInt32Opt/bin |
$FOAM_TUTORIALS | /opt/OpenFOAM/OpenFOAM-v1912/tutorials |
$FOAM_RUN | /home/kamakiri/OpenFOAM/kamakiri-v1912/run |
ある環境変数の値の確認を行いたい場合は、「echo $環境変数」とすれば確認できます。
1 |
echo $WM_PROJECT_DIR |
【結果】
1 |
/opt/OpenFOAM/OpenFOAM-v1912 |
このように環境変数を確認することができます。
OpenFOAMでは特に環境変数を使って解説をしている記事も多いので、Linux初心者は「$FOAM_TUTORIALSって何?」となりやすいので、環境変数の値は何かまとめておくと良いですね。
C++の勉強について
自分自身がC++の知識が全くないので、いちから勉強する必要があります。
C++は、C言語にオブジェクト指向(クラスなどが使える)を追加して拡張された言語であるとのことなので、まずはC言語から勉強をはじめています。
「Cの絵本」はとてもわかりやすくて、すらすら読めます。
ページ数も多くないので、僕はこれを1週間くらいで読み終えました。
C言語の環境構築はWSLで使えるようにしています。エディタはVisual Stdio Codeです。
環境構築については、こちらのQiitaの記事が参考になります。
C言語もむちゃくちゃ詳しくなる必要はないと思いますが、一応コードを書いて計算実行したりして理解をしていきました。
「Cの絵本」だけでは詳しいところまでは学べないので、以下の参考書も手元に置いています。
ページ数も多く詳しく書かれていますし、説明もとてもわかりやすいです。
そして、C言語がそこそこ理解できたらいよいよC++の勉強を始めていきます(👈今、ここ)
同じく「C++の絵本」を買って読もうと思ったのですが、あまりサンプルコードが載っていなかったので読むのをやめました(「Cの絵本」はサンプルコードあったのに・・)
以下の、「猫でもわかるシリーズ」で勉強を進めています。
これが結構わかりやすいですし、サンプルコードも程よい量で載っています。
あとは、やっぱり詳しいところまで知りたい場合は以下の参考書に頼ります。
あとは、Twitterで教えてもらったこれとかを手元に置いています。
C++の入門書は私はこれがおすすめです…! ページ数は多いですが、わかりやすい分多くなってるイメージです!https://t.co/A1eCYzFHPO
— kurenaif@VTuber (@fwarashi) 2020年5月14日
では、OpenFOAMのC++はかなり特殊らしいのですが、C++の基礎知識を身につけないことにはどうしようもないのでまずは2週間程度でC++の基礎を身につけたいと思います(^^)/
OpenFOAMの参考書
OpenFOAMの参考書と言えば、こちらのサイトを書籍にまとめなおした☟これがおすすめです。
ただOpenFOAMのバージョンが古いもので書かれれていたり、OpenFOAMを全く知らない人が読むと結構わかりにくかったりします。
まず、「どうやってOpenFOAMをインストールするの?」というところでつまずきます。
そんな時は、以下の書籍をおすすめします。
改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))
インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。