【OpenFOAMカスタマイズ】icoFoamに温度場輸送方程式を追加。C++PythonFortran技術士サポートサイトお問い合わせOpenFOAM【OpenFOAMカスタマイズ】icoFoamに温度場輸送方程式を追加。2023年1月4日こんにちは(@t_kun_kamakiri)。前回の記事でも書いた通り、OpenFOAMのカスタマイズできるように勉強をはじめています。前回の記事はこちら【オープンソース流体解析】OpenFOAMカスタマイズしたいので準備をしています。今はまだネット上にあるOpenFOAMのカスタマイズ記事を自分で理解しながら手を動かして進めているだけなので、記事の内容的に目新しいものはありませんのでご了承ください。本記事の内容は、こちらの記事を参考にして自分でもまとめなおしています。自分で理解して記事にしたりとアウトプットをすると理解が深まります。それに、まとめなおしていってもOpenFOAMのバージョンや仕様が違うとソースコードの中身が違うので注意が必要ですね。参考記事の方は、「OpenFOAM6(Foundation版)」ですが、僕の使用環境はESI版の「OpenFOAM-v1912」で行っていますし、何よりWSLでやっています。Linux)OpenFOAM-v1912今回は、上記の環境で行いましたが参考記事通りにすると問題なく動きました。OpenFOAMのバージョンは古いですがDEXCSのOpenFOAMをカスタマイズしたときの資料もあります。まとめC++の勉強についてOpenFOAMの参考書やりたいこと:ベースで解く方程式+追加する方程式まずは、今回の目的(やりたいこと)を確認しておきましょう。【やりたいこと】icoFoamのソルバに温度場の輸送方程式を追加する。偏微分方程式を確認します。C_p}\)と置いています。\(k\):熱伝導率\(C_p\):定圧比熱\(\rho\):密度icoFoamってもともとどんな用途のためのソルバなのか?って思った場合は以下の表を参考にすれば良いでしょう。OpenFOAMの「非圧縮性流体ソルバ」を以下に示しておきます。流れを扱う際に使うソルバをベースにします。非圧縮性の流体は基本的には温度場は解きません。「質量保存則」の2つです。方程式自体が閉じいるので温度を解く必要がないですし、密度変化が小さい非圧縮性の仮定が成り立つような状況において温度変化による密度への影響というのはとても小さいので温度を考える必要がないというのもあります。することによる密度変化を考慮しないといけない場合は、有名なのはブシネスク近似と呼ばれるものですが、ここでは深い話はしません。以下の2点を頭においてくださればと思います。温度が流れに沿って移動する方程式(温度の輸送方程式)を追加する。温度が変化したことによる流速への影響は考慮していない。全体の流れを確認OpenFOAMのファイル構造は詳しくは理解していないですが、わからないなりに理解をしながら進めたいと思っています。今回やることの全体像は以下です。各ステップの説明は、その都度する予定です。今は、全体像を把握しておくだけで良いでしょう。自身でカスタマイズする部分のライブラリは、環境変数「$WM_PROJECT_USER_DIR」というフォルダに作成していきます。$WM_PROJECT_DIR」にあります。環境変数は前回の記事☟でまとめてありますので、確認しながら進めていってください。前回の記事はこちら【オープンソース流体解析】OpenFOAMカスタマイズしたいので準備をしています。環境変数が九人出来たら、実際にどのフォルダを指しているのかをWindows上でフォルダ移動して中身を確認してみればよいです。絵の右側のフォルダに自身のカスタマイズしたいライブラリやソルバをぽいぽい入れていきます。/home/kamakiri/OpenFOAM/kamakiri-v1912/applications/solvers/incompressible/」を自身のカスタマイズしたフォルダに作成します。作業ディレクトリを作成する前回の記事でも書きましたが、WSL上でOpenFOAMのフォルダ・ファイル作成・コピー・削除を行うにはLinux上から行うのが安全です。前回の記事はこちら【オープンソース流体解析】OpenFOAMカスタマイズしたいので準備をしています。Windows上でフォルダ作成してもファイルに権限が付与されていないなど、権限を付与したりする手間があるので以下ではLinuxのコメンドベースでフォルダを操作していきます。【やること】フォルダ移動:「/home/kamakiri/OpenFOAM/kamakiri-v1912」へ移動ファイル作成:「/solvers/incompressible」を作成ターミナル上で以下のコマンドを打ちます。applications/solvers/incompressibleファイルできているか確認してみましょう。フォルダの権限も確認しておきます。権限が付与されています。ベースコードを作業ディレクトリに複製するでは、ベースとなるソースコードを自身の作業ディレクトリにコピーしてソースコードを編集する準備をします。「icoFoam.C」を「my_icoFoam.C」に変更ターミナル上で以下のコマンドを打ちます。/home/kamakiri/OpenFOAM/kamakiri-v1912/applications/solvers/incompressible/フォルダがコピーされているか確認してみましょう。コピーできていますね。この「icoFoam」を「my_icoFoam」という名前に変えます。ターミナル上で以下のコマンドを打ちます。my_icoFoamこれでフォルダ名が変わりました。「TEeq.H」に温度場輸送方程式のコードを追加する。ターミナル上で以下のコマンドを打って「TEeq.H」ファイルを作成します。TEeq.H「TEeq.H」ファイルの中身は以下のようにしておきます。T));編集は、Windows上のテキストエディタを使って良いです。Codeを使っています。※ちゃんと編集がLinux上で反映されているか心配な方は、「vi」コマンドでファイルの中身を確認してみても良いです。TEeq.Hいちおうちゃんとファイルの中身は反映されています。※後々説明しますが、これを「my_icoFoam.C」でIncludeします。「createField.H」に「Dt(拡散係数)」と「T(温度)」の変数定義。End」までを追加します。pRefValue);mesh.setFluxRequired(p.name());残念なことにC++の知識がないため、説明ができないですが「Dt(拡散係数)」と「T(温度)」の変数定義を行ったんだな~っていうのはわかりました。「createField.H」も「TEeq.H」もソースコードと言えばそうなのですが、今から修正する「my_icoFoam.C」は偏微分方程式を解いているメインのコードで、「createField.H」と「TEeq.H」をヘッダーファイルとして読み込んでいるファイルなので、いちおう区別しておきました。「my_icoFoam.C」に「TEeq.H」を読み込む。解く部分「TEeq.H」を読み込むようにすれば良いです。//「TEeq.H」を速度Uの偏微分方程式を解いている真下に追加しました。C++のコードは理解していないですが、どこが時間発展のループを回りしている部分かはわかります。これで一応ソースコードができました。次に、この作成したソースコードをコンパイルする必要があります。ソースコードのコンパイルソースコードは人間が読み書きできるプログラミング言語で書かれているのですが、それを機械が理解できるいわゆる「機械語」ってやつに変換する必要があります。それは「Make」フォルダの中のファイルを編集することで行うことができます。「Make」フォルダの中の「files」を編集する。$(FOAM_USER_APPBIN)/my_icoFoamわかりにくいですが、以下の内容を書いていると理解しました。$FOAM_USER_APPBIN」で調べてみましょう。/home/kamakiri/OpenFOAM/kamakiri-v1912/platforms/linux64Gcc63DPInt32Opt/binどうやら「/home/kamakiri/OpenFOAM/kamakiri-v1912/platforms/linux64Gcc63DPInt32Opt/bin」に「my_icoFoam」という実行ファイルが作成されるようです。ソースコードのコンパイルには、「my_icoFoam」上で「wmake」とします。ターミナルで以下のコンパイルを打ちます。wmake1wmakeすると以下のような表示がされます。これで「my_icoFoam」という名前の実行ファイルが作成できたと思います。実行ファイルが確認できたかを確認するには「which」コマンドで実行ファイルの場所の保存場所を確認してみればよいでしょう。my_icoFoamどうやら「/home/kamakiri/OpenFOAM/kamakiri-v1912/platforms/linux64Gcc63DPInt32Opt/bin/」の中に「my_icoFoam」という実行ファイルが作成されているようですね。$(FOAM_USER_APPBIN)/my_icoFoam」と設定したことによってこのようになったということです。※ちなみに「wmake」をすると以下のような、フォルダとファイルが作成されています。「wmake」したときにエラーなどが生じてコンパイルをやり直したい場合は、こちらのファイルを削除する必要があります。それには「wclean」と打てばフォルダが消えます。wclean1wclean以上で、OpenFOAMでのC++で書かれたソースコードの修正を行うことができました。これで、温度場の輸送方程式も解くことができるようになりましたが・・・OpenFOAMのケースファイルの方も「Dt(拡散係数)」「T(温度)」の設定を追加しなくてはいけません。ケースファイルの修正では、ケースファイルに「DT(拡散係数)」と「T(温度)」を追加します。【やること】OpenFOAMチュートリアルのケースファイルを自身の作業ディレクトリにコピーする。温度場の解き方の設定(fvSchemes、fvSolution)まずは、「OpenFOAMチュートリアルのケースファイルを自身の作業ディレクトリにコピー」をします。以下のように、ターミナルに打つことでOpenFOAMのチュートリアルを自身の作業ディレクトリにコピーすることができます。その際には、以下の環境変数を利用すると便利です。/home/kamakiri/OpenFOAM/kamakiri-v1912/run/20200515_my_icoFoam_cavity自身の作業ディレクトリは「20200515_my_icoFoam_cavity」としています。コピーできているかを確認してみましょう。「20200515_my_icoFoam_cavity」というフォルダができています。「20200515_my_icoFoam_cavity」の中身は、こうなっています。OpenFOAMのチュートリアルをコピーできています。次に、この作業ディレクトリに移ります。$FOAM_RUNと打てば、「/home/kamakiri/OpenFOAM/kamakiri-v1912/run」に移動することができます。あとは、「cd」コマンドでフォルダ移動を行ってください。温度の設定は、「0」というフォルダの中の「p」ファイルを「T」という名前でコピーします。Tファイルの中身は以下のようにします。拡散係数の定義は「constant」の中の「transportProperties」というファイルを編集します。0.002;」という定義を追加しました。次に、温度の輸送方程式をどのように解くかという設定を追加します。そのためには、「system/fvSchemes」と「system/fvSolution」の2つのファイルを編集します。upwind;」としています。これは\(\nabla\cdot(\boldsymbol{U}T)\)の移流項を解く部分の設定です。//温度場の解き方を追加しました。これでケースファイルの編集は終わりです。計算実行では、計算を実行します。「my_icoFoam」で計算実行まずは、blockMeshでメッシュ作成します。blockMesh1blockMesh問題が無ければ、以下のようになります。次に、計算を実行します。自身で作成した温度場輸送方程式も解く「my_icoFoam」という実行ファイルを実行します。my_icoFoam1my_icoFoamエラーが無ければこのように、「ダーーー」っと計算が流れるのがわかります。計算がうまくいっていれば以下のように「0.1」「0.2」「0.3」「0.4」「0.5」というフォルダができています。paraviewを使用します。OpenFOAMの結果を見るためには、以下のように「.foam」という拡張子のファイルを用意してして、それをparaviewで読み込めば結果を表示することができます。以下のように「a.foam」というからファイルを作成して、paraviewdで結果を表示してみます。a.foam説明だとわかりにくいので動画を用意しました。https://takun-physics.net/wp-content/uploads/2020/05/20200516_135757-2.mp4paraviewの表示にも温度「T」が追加されて、温度が速度に乗って解かれているのが確認できますね(^^)/まとめ簡単に温度場の輸送方程式をカスタマイズすることができました。温度場が変化したことによる速度場への影響変化については解いていません。v19-12でのカスタマイズを行ったが、バージョンが変わったことによる違いはわからないので今後の追跡調査が必要です。思い通りのカスタマイズを行うには、OpenFOAMのファイル構成とC++の知識が必要であります。OpenFOAMの古いバージョンですが、pisoFoamに温度場を追加したケースもやってみました。C++の勉強について自分自身がC++の知識が全くないので、いちから勉強する必要があります。C++は、C言語にオブジェクト指向(クラスなどが使える)を追加して拡張された言語であるとのことなので、まずはC言語から勉強をはじめています。「Cの絵本」はとてもわかりやすくて、すらすら読めます。ページ数も多くないので、僕はこれを1週間くらいで読み終えました。07:51時点)Amazon楽天市場YahooAmazonの情報を掲載していますC言語の環境構築はWSLで使えるようにしています。環境構築については、こちらのQiitaの記事が参考になります。C言語もむちゃくちゃ詳しくなる必要はないと思いますが、一応コードを書いて計算実行したりして理解をしていきました。「Cの絵本」だけでは詳しいところまでは学べないので、以下の参考書も手元に置いています。20:33時点)Amazon楽天市場YahooAmazonの情報を掲載していますページ数も多く詳しく書かれていますし、説明もとてもわかりやすいです。C言語がそこそこ理解できたらいよいよC++の勉強を始めていきます(👈今、ここ)同じく「C++の絵本」を買って読もうと思ったのですが、あまりサンプルコードが載っていなかったので読むのをやめました(「Cの絵本」はサンプルコードあったのに・・)以下の、「猫でもわかるシリーズ」で勉強を進めています。07:51時点)Amazon楽天市場YahooAmazonの情報を掲載していますこれが結構わかりやすいですし、サンプルコードも程よい量で載っています。あとは、やっぱり詳しいところまで知りたい場合は以下の参考書に頼ります。10:58時点)Amazon楽天市場YahooAmazonの情報を掲載していますあとは、Twitterで教えてもらったこれとかを手元に置いています。20:33時点)Amazon楽天市場YahooAmazonの情報を掲載していますでは、OpenFOAMのC++はかなり特殊らしいのですが、C++の基礎知識を身につけないことにはどうしようもないのでまずは2週間程度でC++の基礎を身につけたいと思います(^^)/OpenFOAMの参考書OpenFOAMの参考書と言えば、こちらのサイトを書籍にまとめなおした☟これがおすすめです。06:04時点)Amazon楽天市場YahooAmazonの情報を掲載していますOpenFOAMの使用にあたっては「どうやってOpenFOAMをインストールするの?」というところでつまずきます。そんな時は、以下の書籍をおすすめします。14:28時点)Amazon楽天市場YahooAmazonの情報を掲載していますインストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。08:43v2006でもできました。21:28コメントありがとうございます。スカラー輸送方程式の追加でしたらこちらの設定でも追加することができるのでご参考ください。https://www.openfoam.com/documentation/guides/latest/doc/guide-fos-solvers-scalar-transport.html解説付きのケースファイルなどはこちらにあります。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です【オープンソース流体解析】OpenFOAMカスタマイズしたいので準備をし...【第8.1回Python流体の数値計算】バーガース方程式を差分法で実装す...製造業コミュニティ製造業コミュニティは製造業で働く方や製造業へ就職を考えている学生の方が匿名で気軽に情報交換を出来るオンラインコミュニティです。本が聴けるアプリAudible(オーディブル)☟30日間の無料体験(最初の1冊は無料)プロフィールカマキリ(^^)大学の専攻は物性理論で、Fortranを使って数値計算をしていました。CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。CAE解析(流体解析)notenoteで内容は主に「プログラミング言語」の勉強の進捗を書いています。「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。1DCAEの操作方法などを動画にしています。(音声はありません_(._.)_)製造業コミュニティをやっています。Facebookを使った実名登録。製造業ブロガーコミニティ案内オンライン家庭教師のご要望あればご連絡ください。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。・当メディアはGoogleによるユーザーに合わせた自動広告が表示されます。Twitterカマキリ☟こちら日々の「思ったこと」「勉強している内容」を発信しています。4Pythonを使ってTwitterAPIで自作botを作りました。製造業コミュニティの方々と運営しています。botを作るのかを知りたい方はこちら。【超丁寧に解説】Pythonを使ってTwitterAPIでGoogleスプレッドシートに書いた内容を画像付きでツイート投稿する。HOMEOpenFOAM【OpenFOAMカスタマイズ】icoFoamに温度場輸送方程式を追加。宇宙に入ったカマキリ。