Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

OpenFOAMでのfoamNewなんとかのコマンド

More than 3 years have passed since last update.

はじめに

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に必要なfilesoptionsが作られる.
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のプログラミングスタイルとして厳守すべきところであると思われるので,これらのコマンドをうまく活用して良いコードを効率的に書ければいいかな、と思う。

yotakagi77
Member of the OpenCAE Local Study Meeting Group.
http://www.hydrodyn.ynu.ac.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away