OpenFOAM関連情報:公開

PyFoamのインストール

pyFoam インストール手順


事前準備

 OpenFOAMは既にインストールされているとします。

 OSは,Ubuntuだとします。

pythonのバージョン確認

 pyFoamは,プログラミング言語python で書かれたツール集です。実行のためには,システムにpythonがインストールされていることが必要です。

 一般的なLinuxシステムでは,すでにpythonがインストールされているでしょう。

 PyFoamは,Python 2.3 以降のバージョンで動作が確認されているようです。バージョン2のなかで,より新しいバージョンを使う方がよいです。

  ただし,Python 3 では動かないようです。 最新版のPythonは,バージョン3系です。バージョン2から3で,大きな変更がありました。そのため,バージョン2にしか対応していないものが,たくさん存在します。PyFoamも,その1つです。

 下記コマンドを実行すると,インストールされているpythonのバージョンが表示されます。念のため,そのバージョンが,2.?.?であることを確認してください。(?にはそれぞれ数字が入ります。)

python --version

 万が一,2.?.?でない場合は・・・  

python関連ライブラリのインストール

 PyFoam は,グラフィカルな表示やその他の仕組みに,ライブラリを利用しています。それらをインストールします。

 ターミナルから,下記コマンドを実行してください。

sudo apt-get update

sudo apt-get install python-numpy python-gnuplot python-qt4 python-vtk python-dev gnuplot-x11

 上記パッケージを使うために必要なモノを含めてインストールするか,確認されます。そのまま実行キーを押してください。インストールが始まります。


インストール作業

 下記サイトを参考にして,インストール作業を行います。ここでは,通常ユーザーとしてインストール ”Installation as a regular user” することとします。

http://openfoamwiki.net/index.php/Contrib_PyFoam#Installation


PyFoamのダウンロード

 下記サイトの12.2 Current version から,最新版をダウンロード。2014年3月4日現在は,0.6.2が最新版。(なお,subversionが使える方は,そちらから最新版を取得してもOKです。)”the tar file with the sources and documentation” というリンクをクリックすると,PyFoam-0.6.2.tar.gz のダウンロードが始まります。好きな場所に保存してください。ここでは,$HOME/Downloads に保存したとします。

http://openfoamwiki.net/index.php/Contrib_PyFoam#Downloads


PyFoamの展開

  ダウンロードしたファイルは圧縮されています。これを展開します。下記コマンドを順に実行すると,ホームディレクトリにPyFoam-0.6.2というディレクトリが作成されます。ファイルブラウザからダブルクリックしても良いです。

cd

tar xvf ~/Downloads/PyFoam-0.6.2.tar.gz


PyFoamのインストール

 PyFoamをインストールするディレクトリを作成します。ここでは,$HOME/OpenFOAM/PyFoamにインストールするとします。下記コマンドを実行します。

mkdir ~/OpenFOAM/PyFoam

 PyFoamを展開したディレクトリに移動する。下記コマンドを実行する。

cd ~/PyFoam-0.6.2

 PyFoamのインストールスクリプトsetup.pyを実行する。その際,インストール先を指定する。下記のコマンドを実行する。これによって,インストール先ディレクトリの下に,binとlibの2つのディレクトリが作成され,各種ファイルが格納されている。

python setup.py install --prefix=~/OpenFOAM/PyFoam

 ライブラリへのパスを,PYTHONPATH として登録する。スクリプトへのパスも追加しておく。下記コマンドを実行して,テキストエディタを起動して.bashrcファイルを開く。

gedit ~/.bashrc

 テキストエディタで,下記2行を.bashrcファイルの末尾に追記する。

export PYTHONPATH=~/OpenFOAM/PyFoam/lib/python2.7/site-packages/:$PYTHONPATH

export PATH=~/OpenFOAM/PyFoam/bin:$PATH

(注意)上記の lib/python2.7 部分は,pythonのバージョンによって異なります。$HOME/OpenFOAM/PyFoam/libの中にあるディレクトリ名を書いてください。


PyFoamのインストール確認

 新しい端末を起動すれば,PyFoamが利用できる状態になっている。

 下記コマンドが実行できることを確認する。インストールが成功していれば,OpenFOAMとPyFoamに関する情報が表示される。

pyFoamVersion.py


PyFoam 利用例


PyFoamを使って残差を表示しながら計算実行

 pyFoamPlotRunner.py 使う。いつものソルバ実行方法で,ソルバ名の前に pyFoamPlotRunner.py を付ければ良い。

 例えば,シングルプロセッサーで,icoFoamを実行する場合には,下記となる。

pyFoamPlotRunner.py icoFoam

 プロセッサを2つ使った並列計算で,icoFoamを実行する場合には,下記となる。

pyFoamPlotRunner.py --procnr=2 icoFoam

 pyFoamPlotRunner.py の一般的な使用方法は下記となる。

pyFoamPlotRunner.py [options] [foamApplication] [foamOptions]

 オプションや使い方については,--helpオプションを付けて実行することで,ヘルプを見ることができる。

pyFoamPlotRunner.py --help


その他の利用方法など

 春日さんのサイトにいろいろと情報があります。

http://www.geocities.jp/penguinitis2002/study/OpenFOAM/PyFoam/PyFoam_memo.html


0

OpenFOAM学習者向け C++プログラミング基礎 - クラス、テンプレートクラス

http://eddy.pu-toyama.ac.jp/bbx440ueh-126/#_126
上記にアップデート版を作成しました。(2019/01/06)
----

OpenFOAM 学習者向けのC++プログラミング基礎 学習資料を作成しました。
興味ある方は、ご覧ください。コンパイルして、試してください。
ご意見、ご感想、質問など、大歓迎です。掲示板に返信してください。
例題が陳腐です。良いアイデアがあれば、ぜひ、教えて下さい。

----

今回の目的:
 クラス の基本について学ぶ。
 テンプレート クラス の基本について学ぶ。

基本方針:
 main はできるだけシンプルにしていく。


 ごく基本的なプログラム例を CODE 1 に示す。
 このプログラムでは,キーボードから整数を入力し,その値の2倍を画面に表示する。

CODE 1
#include <iostream>

int main()
{
    int n;
    std::cout << "整数を入力してください。" << std::endl;
    std::cin >> n;
    std::cout << "整数 " << n << " の2倍は " << n + n << " です。" << std::endl; 

     return 0;
}


 整数(int)型を発展させて,その値を2倍にする機能のある整数型を作り出すとする。
 この機能をクラスとして実装する。クラス名を extendedInt とする。

CODE 2
#include <iostream>
    
// クラスの定義 スタート
class extendedInt
{
    int n_;
    
    public:
    
        int makeDouble(const int& n)
        {
            return n + n ;
        };
};
// クラスの定義 ここまで
    
int main()
{
    int n;
    extendedInt extInt;
   
    std::cout << "整数を入力してください。" << std::endl;
    std::cin >> n;
    std::cout << "整数 " << n << " の2倍は " << extInt.makeDouble(n) << " です。" << std::endl; 

    return 0;
}
 
 
 クラスに整数を受け取るコンストラクタを作成する。
 画面表示部分もクラスに任せることにする。
 

CODE 3
    #include <iostream>
    
    class extendedInt
    {
        int n_;
    
    public:
    
        // constructor
        extendedInt(const int& n )
        {
            n_ = n;
        };
    
        int makeDouble(const int& n)
        {
            return n + n;
        };
    
        bool calcAndDisplay()
        {
            std::cout << "整数 " << n_ << " の2倍は " << makeDouble(n_) << " です。" << std::endl; 
        };
    };
    
    int main()
    {
        int n;
    
        std::cout << "整数を入力してください。" << std::endl;
        std::cin >> n;
    
        extendedInt extInt(n); 
        extInt.calcAndDisplay();
    
        return 0;
    }


 整数を与える部分もクラスに任せてみる。

CODE 4
    #include <iostream>
    
    class extendedInt
    {
        int n_;
    
    public:
    
        int makeDouble(const int& n)
        {
            return n + n;
        };
    
        bool calcAndDisplay()
        {
            std::cout << "整数 " << n_ << " の2倍は " << makeDouble(n_) << " です。" << std::endl; 
        };
    
        bool read()
        {
            std::cout << "整数を入力してください。" << std::endl;
            std::cin >> n_;
        };
        
    };
    
    int main()
    {
        extendedInt extInt;
    
        extInt.read();
        extInt.calcAndDisplay();
    
        return 0;
    }


 整数と同じようなものを、実数でも実現したいとする。
 単純に考えると、整数用と実数用の2つのクラスを作るかも。

CODE 5
    #include <iostream>
   
    // 整数専用クラス
    class extendedInt
    {
        int n_;
    
    public:
    
        int makeDouble(const int& n)
        {
            return n + n;
        };
    
        bool calcAndDisplay()
        {
            std::cout << "整数 " << n_ << " の2倍は " << makeDouble(n_) << " です。" << std::endl; 
        };
    
        bool read()
        {
            std::cout << "整数を入力してください。" << std::endl;
            std::cin >> n_;
        };
    };
   
    // 実数専用クラス
    class extendedFloat
    {
        float f_;
    
    public:
    
        float makeDouble(const float& f)
        {
            return f + f;
        };
    
        bool calcAndDisplay()
        {
            std::cout << "実数 " << f_ << " の2倍は " << makeDouble(f_) << " です。" << std::endl; 
        };
    
        bool read()
        {
            std::cout << "実数を入力してください。" << std::endl;
            std::cin >> f_;
        };
    };
    
    int main()
    {
        extendedInt extInt;
        extInt.read();
        extInt.calcAndDisplay();
    
    
        extendedFloat extFlt;
        extFlt.read();
        extFlt.calcAndDisplay();
    
        return 0;
    }


 ほとんど同じことを書いたクラスが2つ。内部に持つ型が異なるだけ。
 まとめられないの?templateを使ってまとめましょう。
 先ほどの2つのクラスで,int または float だったところを,Type と名前をつけたテンプレートクラスで宣言します。クラスの定義内で,Type となっている部分は,mainから呼び出す際に定めたクラスとなります。

CODE 6
    #include <iostream>
    #include <string>
    
    template<class Type>
    class extendedType
    {
        Type x_;
        std::string type_;
    
    public:
    
        extendedType(const std::string& type)
        {
            type_=type;
        }
    
        Type makeDouble(const Type& x)
        {
            return x + x;
        };
    
        bool calcAndDisplay()
        {
            std::cout << type_ << x_ << " の2倍は " << makeDouble(x_) << " です。" << std::endl; 
        };
    
        bool read()
        {
            std::cout << type_ << " を入力してください。" << std::endl;
            std::cin >> x_;
        };
    };
    
    
    int main()
    {
        extendedType<int> extInt("整数");
    
        extInt.read();
        extInt.calcAndDisplay();
    
    
        extendedType<float> extFlt("実数");
    
        extFlt.read();
        extFlt.calcAndDisplay();
    
        return 0;
    }


 コンストラクタを作成しました。クラスからオブジェクト(インスタンス)を作る時に、型の名前を渡すようにしました。
 mainでの宣言部分に注意してください。宣言時に、クラス側のtemplateが決定されます。

 これで、色々な型に対応できます。
 文字列型にも。ただし、演算子+が使える必要があります。


CODE 7
    #include <iostream>
    #include <string>
    
    template<class Type>
    class extendedType
    {
    private:
        Type x_;
        std::string type_;
    
    public:
    
        extendedType(const std::string& type)
        {
            type_=type;
        }
    
        bool calcAndDisplay()
        {
            std::cout << type_ << x_ << " の2倍は " << makeDouble(x_) << " です。" << std::endl; 
        };
    
        bool read()
        {
            std::cout << type_ << " を入力してください。" << std::endl;
            std::cin >> x_;
        };
    
    private:
        Type makeDouble(const Type& x)
        {
            return x + x;  
        };
    };
    
    
    int main()
    {
        extendedType<int> extInt("整数");
        extInt.read();
        extInt.calcAndDisplay();
    
        extendedType<float> extFlt("実数");
        extFlt.read();
        extFlt.calcAndDisplay();
    
        extendedType<std::string> extStr("文字列");
        extStr.read();
        extStr.calcAndDisplay();
    
        return 0;
    }
0

OpenFOAM の演算子 == について

オープンCAE勉強会@富山のメンバーから,OpenFOAMのソースコードに関する質問がありました。
演算子 == についてです。興味深い内容です。回答を共有します。間違いなどがあれば,ご指摘をお願いします。

(質問の要旨 ここから)--
 laplacianFoam.C では,
            solve
            (
                fvm::ddt(T) - fvm::laplacian(DT, T)
            );
と表記してありますが、
            solve
            (
                fvm::ddt(T) == fvm::laplacian(DT, T)
            );
としても良いのですか?
 OpenFOAMでの ”==” の意味がよくわかりません。
--(質問の要旨 ここまで)

(回答)

 上記2つの表記は,どちらでも良いです。同じ意味になります。
 これには,演算子”==”のオーバーロードが関係しています。

 ソースコードを見ながら確認します。

 演算子は,どのクラスに対しての演算子なのか,に注意して調べる必要があります。
 今の質問では,fvm::ddt(T) と fvm::laplacian(DT, T) との演算です。両者のクラスは何になるでしょう?

 fvmLaplacian.Cを見ます。fvm::laplacian(DT, T)  からの戻り値は  tmp<fvMatrix<Type> > 型となります。 ここでのTypeは,laplacianメソッドに渡した T と同じになります。
  238 template<class Type, class GType>
  239 tmp<fvMatrix<Type> >
  240 laplacian
  241 (
  242     const GeometricField<GType, fvPatchField, volMesh>& gamma,
  243     const GeometricField<Type, fvPatchField, volMesh>& vf
  244 )

 ということは, fvm::ddt(T) == fvm::laplacian(DT, T) では,tmp<fvMatrix<Type> >に対しての演算子”==”を確認する必要があります。

 fvMatrix.H にGlobal operators としてoperator== が記載されています。
  615 template<class Type>
  616 tmp<fvMatrix<Type> > operator==
  617 (
  618     const tmp<fvMatrix<Type> >&,
  619     const tmp<fvMatrix<Type> >&
  620 );

 fvMatrix.C に定義があります。演算子“==”の左側にあるtmp<fvMatrix<Type> > をtAという名前で,右側にあるtmp<fvMatrix<Type> >をtBという名前で受取ります。演算の結果としては,return の後にあるもの(tA - tB)が返されます。つまり,左辺ー右辺の行列(tmp<fvMatrix<Type> > 型)を戻すことになります。
1495 template<class Type>
1496 Foam::tmp<Foam::fvMatrix<Type> > Foam::operator==
1497 (
1498     const tmp<fvMatrix<Type> >& tA,
1499     const tmp<fvMatrix<Type> >& tB
1500 )
1501 {
1502     checkMethod(tA(), tB(), "==");
1503     return (tA - tB);
1504 }

 なお,ここで使った演算子” - ”自体も,fvMatrixクラス用にオーバーロードしたものが使われています。オリジナルのコードで使われているのと同じです。こちらは直感的にわかるので,疑問に感じないかもしれませんが。

 勉強会で,2つの表記方法のソルバを作成して,同じであることを確かめる演習でも実施しようかな。

(参考)
オペレータ(演算子)のオーバーロードについて。
http://homepage2.nifty.com/well/Operator.html
http://www.geocities.jp/ky_webid/cpp/language/017.html
http://www.geocities.jp/penguinitis2002/study/OpenFOAM/OpenFOAM-cpp_primer.html
0

OpenFOAM 2.2 での 熱関連ソルバーの変更

 OpenFOAM 2.2.1 を使って,ブジネスク近似を使わない熱流体解析ソルバーを使おうとした。ソースコードを見たところ,昔より,読みにくくなっていて,戸惑ってしまった。OpenFOAM 2.2.0 から,熱関係のコードが大きく変更されたようだ。

http://www.openfoam.org/version2.2.0/thermophysical.php
”In v2.2.0, there has been significant redesign of thermophysical modelling, to enable more flexible handling of multiple materials, e.g. in multiphase flows, and conjugate heat transfer. ”

 混相流での熱の取扱が柔軟にできるらしい。それによって,混相流を取り扱う下記ソルバで,熱の計算も可能となった。(compressibleTwoPhaseEulerFoamは,2.1でも温度が入っていた。)

http://www.openfoam.org/version2.2.0/thermophysical.php
compressibleTwoPhaseEulerFoam
includes updated thermodynamics to use the run-time selectable form of the total energy equation for each phase, so that is possible to select different energy forms (h or e) separately for the two phases (see below for details).
compressibleInterFoam
includes updated thermodynamics to use the run-time selectable form of thermodynamics, but solves for the mixture temperature equation, derived from the internal energy equation, in order to maintain boundedness and realisablility.

 大きく変更されたのは,”Run-time Selectable Energy Solution Variable”となったこと。これまでは,ソルバーによって,エンタルピー h を解くのか,内部エネルギー e を解くのかが決まっていた。2.2.0 からは,実行時にどちらを解くのかが選択可能となっている。
 ソースコード内部では,he という変数が使われている。これは,"h or e" という意味で名付けられたらしい。この変数名は,いまいちしっくりこない。
 実行時には,constant/thermophysicalProperties ファイルで Thermophysical model を指定する。このモデルの詳細については,ユーザーガイドの 7.1 に解説がある。
http://www.openfoam.org/docs/user/thermophysical.php

 ソースコード内では, h と e とは同じ式で表される。ソース項のみが異なる。そのため,条件演算子(conditional operator)を使って,どちらを使うかを切り替えている。
 条件演算子は,<条件式> ? <真式> : <偽式> の形をとる。?と:の2つの記号をセットで使う,1つの演算子である。
http://ja.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6%E6%BC%94%E7%AE%97%E5%AD%90

 具体的に,$FOAM_SOLVERS/compressible/rhoPimpleFoam/EEqn.H のコードでは,EEqn の部分で,次の記述がある。
he.name() == "e"
                         ? fvc::div
                                       (
                                           fvc::absolute(phi/fvc::interpolate(rho), U),
                                           p,
                                           "div(phiv,p)"
                                               )
                          : -dpdt
 これは,he.name() が e ならば fvc::div(~) を,e でなければ,-dpdt (the pressure-work term) を使うことになる。

 fvSchemesのdivSchemesでは,hと使うかeを使うかに応じて, div(phi,h) か div(phi,e) を定義しておく必要がある。buoyantPimpleFoam/hotRoom 例題では,両方書いてある。thermophysicalProperties を切り替えても問題がないための処置だろう。
0

OpenFOAM-1.6-extをLubuntu 12.04(仮想マシン) にインストール

icoFsiFoamを試したいので,OpenFOAM-1.6-extをインストールした仮想マシンを作成した.その手順をメモします.

今回は,VMWarePlayer用仮想マシン(メモリ1GB,HDD 20GB)に,OSとしてLubuntu12.10 32bitをインストールした.仮想マシンを軽くしたいので,Lubuntuを採用.


下記サイトの情報に従ってインストール作業を実施する。ほぼ指示通りだが,一部のファイル入手先を変更する必要がある.

http://openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-1.6-ext/Ubuntu


上記サイトで,Ubuntu12.10に追加が必要とされるパッケージ

git flex bison rpm g++ zlib1g-dev binutils-dev openmpi-bin libopenmpi-dev paraview libscotch-dev cmake libstdc++5

OpenFOAM公式版で Ubuntu に追加が必要とされているパッケージ

build-essential flex bison cmake zlib1g-dev qt4-dev-tools libqt4-dev gnuplot libreadline-dev libncurses-dev libxt-dev

Lubuntuなので,追加が必要と思われるパッケージ

gcc make qt4-qmake


これらパッケージを,まとめてインストール

sudo apt-get install git flex bison rpm g++ zlib1g-dev binutils-dev openmpi-bin libopenmpi-dev paraview libscotch-dev cmake libstdc++5 build-essential qt4-dev-tools libqt4-dev gnuplot libreadline-dev libncurses-dev libxt-dev gcc make qt4-qmake


vmware-toolsのインストール


OpenFOAM-1.6-extの入手

git clone git://git.code.sf.net/p/openfoam-extend/OpenFOAM-1.6-ext openfoam-extend-OpenFOAM-1.6-ext


入手したコードをユーザディレクトリ下に配置

mkdir ~/OpenFOAM/

mv openfoam-extend-OpenFOAM-1.6-ext ~/OpenFOAM/OpenFOAM-1.6-ext


インストールディレクトリに移動

cd OpenFOAM-1.6-ext


preferencesファイルに設定を書き込む。etc/prefs.sh-EXAMPLEというファイルをコピーして,etc/prefs.shを作成し,必要な設定を書き換えていく。(sedコマンドを利用する。)

下記コマンドを順に実行する。(#の行はコメントなので,実行不要.)

cp etc/prefs.sh-EXAMPLE etc/prefs.sh

#Use the system compiler and configure to use Gcc 4.7

sed -i s/"compilerInstall=System"/"compilerInstall=System"/g etc/prefs.sh

echo "export WM_COMPILER=Gcc47" >> etc/prefs.sh

# Use the system installation of OpenMPI

sed -i s/"#export WM_MPLIB=SYSTEMOPENMPI"/"export WM_MPLIB=SYSTEMOPENMPI"/g etc/prefs.sh

sed -i s/"#export OPENMPI_DIR=path_to_system_installed_openmpi"/"export OPENMPI_DIR=\/usr"/g etc/prefs.sh

sed -i s/"^#export OPENMPI_BIN_DIR"/"export OPENMPI_BIN_DIR"/g etc/prefs.sh

# Use the system's ParaView

sed -i s/"#export PARAVIEW_SYSTEM=1"/"export PARAVIEW_SYSTEM=1"/g etc/prefs.sh

sed -i s/"#export PARAVIEW_DIR=path_to_system_installed_paraview"/"export PARAVIEW_DIR=\/usr"/g etc/prefs.sh

sed -i s/"^#export PARAVIEW_BIN_DIR"/"export PARAVIEW_BIN_DIR"/g etc/prefs.sh

# Use the system's Scotch

sed -i s/"#export SCOTCH_SYSTEM=1"/"export SCOTCH_SYSTEM=1"/g etc/prefs.sh

sed -i s/"#export SCOTCH_DIR=path_to_system_installed_scotch"/"export SCOTCH_DIR=\/usr"/g etc/prefs.sh

sed -i s/"^#export SCOTCH"/"export SCOTCH"/g etc/prefs.sh

sed -i 's-SCOTCH_DIR/include$-SCOTCH_DIR/include/scotch-g' etc/prefs.sh

# Use the system's CMake

sed -i s/"#export CMAKE_SYSTEM=1"/"export CMAKE_SYSTEM=1"/g etc/prefs.sh

sed -i s/"#export CMAKE_DIR=path_to_system_installed_cmake"/"export CMAKE_DIR=\/usr"/g etc/prefs.sh

sed -i s/"^#export CMAKE"/"export CMAKE"/g etc/prefs.sh
コンパイルに使うCPUコア数を指定する.仮想マシンのコア数を2にしていたので,2コアとした.

#here you can change 4 to the number of cores you've got

echo "export WM_NCOMPPROCS=2" >> etc/prefs.sh
paraFoamの設定を変更する.

#we'll need to switch to the internal reader for ParaView

sed -i -e 's=\.OpenFOAM=\.foam=' bin/paraFoam

sed -i -e 's/^unset/export LC_ALL=C; unset/' bin/paraFoam

gmakeコマンドが使われる場合があるので,makeのリンクとして作成する。

#Create a symbolic link for gmake

ln -s /usr/bin/make bin/gmake

tecioのための設定.

#disable X dependencies in tecio

sed -i -e 's=\(U_WIN32\)$=\1 -DENGINE=g' applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecio/tecsrc/Make/tecioOptions


OSが32bitか64bitかを確かめるために,下記コマンドを実行する。

この結果が,i686 であれば 32bit,x86_64 であれば64bitとなる。

uname -m


32bit版なので,下記を順に実行する.

echo "export WM_ARCH_OPTION=32" >> etc/prefs.sh

#copy the rules from ''Gcc46'' to ''Gcc47''

cp -r wmake/rules/linuxGcc46 wmake/rules/linuxGcc47

# due to stricter name lookup rules in 4.7 we need to tell the compiler to lighten up on this

sed -i 's/^\(c++FLAGS.*\)/\1 -fpermissive/g' wmake/rules/linuxGcc47/c++

もし,64bit版の場合は下記となる.

#copy the rules from ''Gcc46'' to ''Gcc47''
cp -r wmake/rules/linux64Gcc46 wmake/rules/linux64Gcc47
 # due to stricter name lookup rules in 4.7 we need to tell the compiler to lighten up on this
sed -i 's/^\(c++FLAGS.*\)/\1 -fpermissive/g' wmake/rules/linux64Gcc47/c++

bashrc設定ファイルを読み込んだ後,.bashrcに追記する.

source etc/bashrc

echo "source $HOME/OpenFOAM/OpenFOAM-1.6-ext/etc/bashrc" >> $HOME/.bashrc


ThridPartyに移動する.

cd ThirdParty


ParMGridGenのウェブサイトを変更

sed -i 's= http://www.mgnet.org/mgnet/Codes/parmgridgen=http://www-users.cs.umn.edu/~moulitsa/download=' rpmBuild/SPECS/ParMGridGen-1.0.spec AllMake.stage3


システムに追加したcmakeを使うため,cmakeのコンパイルをしない.

sed -i 's=^( rpm_make -p cmake=#( rpm_make -p cmake=' AllMake.stage1


ThirdPartyのコンパイルを実行.数分から30分程度は必要.メッセージはファイルに書き込む.

# This next command will take a while... somewhere between 5 to 30 minutes

./AllMake > log.AllMake 2>&1


もう一度,上記と同じものを実行する.これで,途中の細かいメッセージはなくなり,インストールの要約がファイルに書かれることになる.

#Run it a second time for getting a summary of the installation

./AllMake > log.AllMake 2>&1


log.AllMakeファイルの中身を確認する.

おそらく,libccmio のコンパイルに失敗している.対応方法は不明.設定ファイルを修正する必要がありそう.Star-CCMメッシュを扱わないときは,無視して良い?


ここから,OpenFOAM 1.6.ext本体のコンパイル作業に入る.


cd ~/OpenFOAM/OpenFOAM-1.6-ext

source etc/bashrc


OpenFOAM 1.6.ext本体のコンパイルを実行.30分から数時間程度は必要.メッセージはファイルに書き込む.

# This next command will take a while... somewhere between 30 minutes to 3-6 hours.

./Allwmake > make.log 2>&1

もう一度,上記と同じものを実行する.これで,途中の細かいメッセージはなくなり,インストールの要約がファイルに書かれることになる.

#Run it a second time for getting a summary of the installation

./Allwmake > make.log 2>&1


コンパイルができているかを確認するため,下記を実行.icoFoamの使い方が表示されればOK.

icoFoam -help


通常のOpenFOAMと同様に使うには,下記を順に実行して,tutorialsをコピーする.

mkdir -p $FOAM_RUN

cp -r $FOAM_TUTORIALS $FOAM_RUN


icoFoamのcavity例題で,動作を確認する.

cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity

blockMesh

icoFoam

paraFoam


0