はじめに
OpenFOAMではインストール,チュートリアルでのお勉強,が済んだら,自分が取り組みたい課題用にソースコードなどをカスタマイズしたい,というのが人の常である.解いている式に項を一つ付け足すぐらいならば,常套手段として標準のソルバーなどをコピーしてきてちょこっといじくればできてしまうが,OpenFOAMの標準の機能からかけ離れたことをやろうとすると,ソースをゴリゴリ自分で書き出す,といった沼に陥りがちである.そのようなとき便利なのが,OpenFOAMのコーディングスタイルでソースコードなどの雛形を生成してくれるfoamNew
系のコマンドである.バージョンが新しくなるにつれてこの系統のコマンドは増えているので,今回はv1706で解説する.
foamNewなんとかの一覧
OpenFOAMがインストールされた端末上ではOpenFOAMのコマンドに関しても入力補完が聞くので,foamNewまで打ち込んでTabを押せば一覧が取得できる.
$ foamNew #ここまで打ち込んでTabキー
foamNew foamNewCase foamNewTemplate
foamNewApp foamNewFunctionObject
foamNewBC foamNewSource
あとは適当に選んで使うだけであるが,foamNewCase
は新しい解析ケースを作るコマンドなので,いつも解析をメインでやる人向けのコマンドである.各コマンドのコマンドはオプション-h
をつけて実行すればすぐにわかる.以降にhelpでの出力を列記する.
foamNew
$ foamNew -h
Usage: foamNew <type> {args}
* create a new standard OpenFOAM source or template file
type:
-s | -source | source
-t | -template | template
昔からある一番ベーシックなコマンド.type
の指定がわからないので,適当に間違えてみる.
$ foamNew -s hoge
Usage: foamNewSource [OPTION] <type> <ClassName>
options:
-help print the usage
* create a new standard OpenFOAM source file
type: (C|H|I|IO|App)
A ClassName starting with '-' will simply display the template
type
として,C
(通常のソースファイル),H
(ヘッダファイル),IO
(入出力用ファイル),App
(アプリケーション用ソース)が選べることがわかる.コマンドの最後の引数としてクラス名(ソースファイル名)を指定するが,-
から始まる名前にすると,端末画面に表示されるだけでファイル出力はされない.適当な.C
ファイルを作ってみる.
$ foamNew -s C myClass
foamNewSource: Creating new interface file myClass.C
myClass.C
というソースファイルが出来上がる.コマンドの引数として拡張子まで含めて,
$ foamNew -s C myClass.C
としてしまうとmyClass.C.C
ができてしまうので注意.生成されたファイルの中身を見てもらうとわかるが,まあ雛形なので中はスカンスカンである.以降の実装については各自努力されたい.
foamNewApp
$ foamNewApp -h
* Create directory with source and compilation files for a new application
<applicationName> (dir)
- <applicationName>.C
- Make (dir)
- files
- options
Compiles an executable named <applicationName> in $FOAM_USER_APPBIN:
/home/yotakagi77/OpenFOAM/yotakagi77-v1706/platforms/linux64GccDPInt64Opt/bin
新しくアプリケーション(ソルバー,ユーティリティ)を作るためのコマンド.試しに使ってみる.
$ foamNewApp myApplication
$ ls -R myApplication/
myApplication/:
Make myApplication.C
myApplication/Make:
files options
アプリケーションをするための必要なメインソースコード,wmake
に必要なfiles
,options
が作られる.
myApplication.C
に継ぎ足していけば好きなアプリケーションができる.
#foamNewBC
foamNewBC -h
Usage: foamNewBC [-h | -help] <base> <type> <boundaryConditionName>
* Create directory of source and compilation files for a new boundary condition
<boundaryConditionName> (dir)
- .C and .H source files
- Make (dir)
- files
- options
Compiles a library named lib<boundaryConditionName>.so in $FOAM_USER_LIBBIN:
/home/yotakagi77/OpenFOAM/yotakagi77-v1706/platforms/linux64GccDPInt64Opt/lib
<base> conditions:
-f | -fixedValue | fixedValue
-m | -mixed | mixed
<type> options:
-a | -all | all | template (creates a template class)
-s | -scalar | scalar
-v | -vector | vector
-t | -tensor | tensor
-symmTensor | symmTensor
-sphericalTensor | sphericalTensor
境界条件クラスを作るコマンド.OpenFOAMの境界条件は標準でたくさんあるので,(i)ユーザーガイドの境界条件の説明をよく読む,(ii) $FOAM_SRC/finiteVolume/fields/fvPatchFields
にある各種境界条件のソースを眺める,をした後に,自分に必要なものがなければ新規作成or元々あるものを変更するのが吉である.<type> options
の選択肢にあるように,テンソルのランク(スカラー,ベクトル,テンソル)ごとに雛形を作ることもできるし,汎用的なもの(all
)も作ることができる.境界条件カスタマイズは難しいので上級者向け.
foamNewFunctionObject
foamNewFunctionObject -h
Usage: foamNewFunctionObject [-h | -help] <functionObjectName>
* Create directory with source and compilation files for a new function object
<functionObjectName> (dir)
- <functionObjectName>.H
- <functionObjectName>.C
- IO<functionObjectName>.H
- Make (dir)
- files
- options
Compiles a library named lib<functionObjectName>FunctionObject.so in
$FOAM_USER_LIBBIN:
/home/yotakagi77/OpenFOAM/yotakagi77-v1706/platforms/linux64GccDPInt64Opt/lib
いつ頃から現れたかはよくわからないけど,OpenFOAMの便利な機能であるfunction objectを新しく作るためのコマンド.Function objectはソルバーの実行中or実行後に機能するものであり,コンパイルしてできたfunction objectのライブラリをユーザーが指定して利用する.とりあえずこのコマンドを試してみる.
$ foamNewFunctionObject myFunctionObject
$ ls -R myFunctionObject/
myFunctionObject/:
Make myFunctionObject.C myFunctionObject.H
myFunctionObject/Make:
files options
ヘルプによればIOmyFunctionObject.H
ができるはずなんだけど,できていない.Function objectの中身の概要は生成されたmyFunctionObject.H
のヘッダーコメント部分に書かれている.
myFunctionObject.Hのコメント部分
Class
Foam::functionObjects::myFunctionObject
Group
Description
This function object...
Example of function object specification:
\verbatim
myFunctionObject1
{
type myFunctionObject;
libs ("libmyFunctionObjectFunctionObject.so");
...
wordData someWord;
scalarData 1.0;
labelData 1;
}
\endverbatim
Usage
\table
Property | Description | Required | Default value
type | type name: myFunctionObject | yes |
wordData | some word option... | no | defaultWord
scalarData | some scalar value... | yes |
labelData | some label value... | yes |
\endtable
SourceFiles
myFunctionObject.C
詳しい実装のこととかはsourcefluxのブログとか読んでもらえればわかる.ちなみに,function objectをカスタマイズするハンズオン講習会に参加したことがあり,このnewFunctionObject
コマンドを使わずに一からエディタでコードを書く演習を行ったことがあるが,それはそれは貴重な経験であった.
foamNewSource
foamNewSource -h
Usage: foamNewSource [OPTION] <type> <ClassName>
options:
-help print the usage
* create a new standard OpenFOAM source file
type: (C|H|I|IO|App)
A ClassName starting with '-' will simply display the template
foamNew -s
と同じコマンドである.
foamNewTemplate
foamNewTemplate -h
Usage: foamNewTemplate [OPTION] <type> <ClassName> <Template arguments...>
options:
-help print the usage
* create a new standard OpenFOAM source file for templated classes
type: (C|H|I|IO)
A ClassName starting with '-' will simply display the template
foamNew -t
と同じコマンドである.
まとめ
foamNewなんとかで生成される雛形コードはOpenFOAMのプログラミングスタイルとして厳守すべきところであると思われるので,これらのコマンドをうまく活用して良いコードを効率的に書ければいいかな、と思う。