↑ページトップへ

使用する OpenFOAM のバージョンを切り替える

OpenFOAM 4.1OpenFOAM+ v1706

標準の OpenFOAM 4.1 と ESI 社による拡張である OpenFOAM+ v1706 を同じマシンにインストールし、使用時に切り替える方法を考えます。なお使用 OS は Ubuntu 16.04 LTS であるとします。

標準ではそれぞれのファイル群は次のパスにインストールされます。

  • OpenFOAM 4.1:/opt/openfoam4
  • OpenFOAM+ v1706:/opt/OpenFOAM/OpenFOAM-v1706

この時、それぞれのパスの下の etc/bashrc ファイルを使用中の Bash 上に source コマンドで読み込むことで、その Bash から参照される OpenFOAM が切り替わります。

従って基本的にはコマンド「source /opt/openfoam4/etc/bashrc」、「source /opt/OpenFOAM/OpenFOAM-v1706/etc/bashrc」を実行すればそれぞれのバージョンを切り替えられますが、その場合には複数のパスを憶えておく必要があり煩雑で、ミスを招きやすくなります。

そこで次のようなシェルスクリプト「switchFoamVersion」を作成し、パスの通っている場所(例 /usr/local/bin など)に配置して実行権限を設定しておくと切り替えが楽になります。

シェルスクリプト「switchFoamVersion」:
#!/bin/bash

#*** Configuration
declare -A AVAILABLE_VERSION
AVAILABLE_VERSION["4.1"]=/opt/openfoam4/etc/bashrc
AVAILABLE_VERSION["v1706"]=/opt/OpenFOAM/OpenFOAM-v1706/etc/bashrc

to_version="4.1" # Default version
#***

function printHelp() {
        echo "Usage: . switchFoam VERSION [OPTIONS]"
        echo "Options: "
        echo "  -help Shows this help"
        echo "  -version <version> Switches to the version explicitly"
        echo "  Available versions:"
        for key in  ${!AVAILABLE_VERSION[*]} ; do
                echo "    "$key
        done
}

# parses arguments
for (( i=1; i<=$#; i++)); do
        if [ ${!i} = "-help" -o ${!i} = "-h" ]; then
                printHelp
                return
        elif [ ${!i} = "-version" -o ${!i} = "-v" ]; then
                j=$((i+1))
                to_version="${!j}"
                break
        else
                to_version="${!i}"
        fi
done

# checks current version
if [ $to_version = $WM_PROJECT_VERSION ] ; then
        echo "OpenFOAM version is alredy "$WM_PROJECT_VERSION"."
        return
fi

# switches version
bashrc_path=${AVAILABLE_VERSION[$to_version]}
if [ -n "$bashrc_path" ]; then
        source $bashrc_path
        echo "OpenFOAM version is switched to "$WM_PROJECT_VERSION"."
else
        echo $to_version" is Unknown version."
fi

このスクリプトをファイル名「switchFoamVersion」として保存し、以下の様なコマンドでインストールします。

インストール例:
$sudo cp switchFoamVersion /usr/local/bin
$sudo chmod +x /usr/local/bin/switchFoamVersion

例えばコマンド「. switchFoamVersion v1706」(直前の「.」を忘れないように注意)を実行すると参照される OpenFOAM が「OpenFOAM+ v1706」に切り替わります。

また「-help」オプションをつけると切り替え可能なバージョンの一覧を確認できます。バージョンを指定しないで実行するとデフォルトのバージョン(上記スクリプトでは「4.1」)へ切り替わります。

実行例:
$. switchFoamVersion -help
Usage: . switchFoam VERSION [OPTIONS]
Options:
  -help Shows this help
  -version  Switches to the version explicitly
  Available versions:
    4.1
    v1706

$. switchFoamVersion v1706
OpenFOAM version is switched to v1706.

$. switchFoamVersion
OpenFOAM version is switched to 4.1.

$. switchFoamVersion 4.1
OpenFOAM version is alredy 4.1.

以上でコマンド「switchFoamVersion」だけでバージョン切り替えが可能になりました。