1:SXAT の CentOS 上に、VH 用の Calculix (CCX) を構築するまでのビルド手順 【SXAT-CCXbuild-21-1】

作成:2022/03/05

ここでのビルド手順は、以下のウエブ「CalculiX-Builder」に基づいて行います。
https://github.com/ISCPC/CalculiX-Builder/blob/master/README_JP.md

なおsudoの実行では、利用者のパスワードを入力します。

現在の状態の確認

・CnetOSのバージョン: cat /etc/redhat-release で確認します。
CentOS Linux release 7.7.1908 (Core)

必要なパッケージの導入

BLAS/LAPACKのインストール(必須)

以下の手順で必要なパッケージをインストールします。
sudo yum install epel-release atlas-devel lapack-devel blas-devel

既に、現行バージョンが導入済みのパッケージはそのままで、更新するパッケージを導入する。確認で y で進めて「完了しました!」で成功です。

PARDISO(Intel-oneAPI-MKL)のインストール(選択)

Intel-oneAPI-MKLのソルバーPardisoを利用する場合は、以下の手順でインストールします。
sudo yum-config-manager --add-repo https://yum.repos.intel.com/mkl/setup/intel-mkl.repo

作業時点で最新版として、2020-0-088を、以下の手順でインストールする。
sudo yum install intel-mkl-2020.0-088

ExodusIIのインストール(選択)

以下のパッケージをインストールします。
sudo yum install exodusii exodusii-devel

既に、現行バージョンが導入済みのパッケージはそのまま。

CalculiX-Builder ソースの取得

CalculiX-Builder及びパッチのベースとなるccx 及び前提ライブラリ(ARPACK, SPOOLES)のソースを取得します。

以前にビルドを行った場合には、~/CalculiX-Builderが作られているので、削除するか名前を変更しておく。

まず cd でホームディレクトリに移動してから、以下のコマンドで、必要なファイルをgitから入手する。

git clone https://github.com/ISCPC/CalculiX-Builder.git

ビルド作業用ディレクトリに移動する。
cd ~/CalculiX-Builder

次に submodule ソースを入手するために、以下のコマンドを実行します。
git submodule update --init --recursive

少し待って「Submodule path 'lib/calculix-adapter'」と表示されたら成功です。

Calculix (CCX) をビルドするMakefileの設定

以下の説明は自分の好みの設定ですので、状況に応じて各自で読み替えてください。

次に、ビルドの条件を設定するので、vi などのエディタで ~/CalculiX-Builder にある Makefile を編集します。ここでは、以下の設定とします。
この段階では、VH で動作する CCXを作るので、VE関連は利用しない設定とします。

  • インストール先:$(HOME)/local(標準設定) 「ここで、cd ~ ⇒ mkdir -p local/bin で準備しておく」
  • ExodusII出力:有効  : ExodusII出力(-o exo)をサポート(libexodus.so が必要)
  • IntelMKL利用:有効(ただしStaticLinkは無効) : IntelMKL(SOLVER=PARDISO)をサポート(Intel-MKL library が必要)
  • SX-Aurora VE利用:この段階では無効
  • preCICE利用:なし

として、以下のように設定します。

cd ~/CalculiX-Builder ⇒ cp Makefile Makefile.org ⇒ vi Makefile

14 PREFIX = $(HOME)/local
19 WITH_EXODUSII=true
24 WITH_MKL=true
25 WITH_MKL_STATIC=false
30 WITH_AURORA=false
36 WITH_PRECICE=false

VH 用の Calculix (CCX)をビルドしインストールする

実際にビルドするときには、複数コアを利用すると効果的です。
計算機の物理コアを「cat /proc/cpuinfo | grep "cpu cores"」で確認します。ここでは8コアでした。

そこで「make NPROCS=8」として、ビルドを実行します。警告は多数出ますが、エラー無く最後に以下表示され、約2分ぐらいで完了します。
「make[1]: ディレクトリ `/home/dalab/CalculiX-Builder/src' から出ます」

ビルドしたディレクトリ内の「src」にできるので、「$ ls -l src/ccx_2.18_MT」で確認すると、
VH 用 CCXとして「src/ccx_2.18_MT(size:7265288)」が出来ています。

実行形式が完成したので、インストール先:$(HOME)/local にコピーします。「make install」で行います。

状況を確認するために、「ls -l ~/local/bin/」を実行すると、
「-rwxr-xr-x. 1 dalab dalab 7265288 3月 6 10:19 ccx_2.18_MT」で確認できました。

ここでは、VH用のCCXとしたので、コマンド名を変更しておきます。
「cd ~/local/bin ⇒ mv ccx_2.18_MT ccx_2.18_VH」

VH 用の Calculix (CCX)の動作確認

まず、CCXの動作に必要な環境変数の設定をして、起動の確認をします。
以下の内容を「$ vi ~/.bashrc」の最後に追記して、「$ source ~/.bashrc」で有効にしておきます。

IntelMKLのライブラリのパス設定 / CCXの実行形式のパス / OpenMPの並列処理数(現段階では1)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64
export PATH=$PATH:$HOME/local/bin
export OMP_NUM_THREADS=1

「$ ccx_2.18_VH」で実行してみます。エラーなく「Usage: CalculiX.exe -i jobname」と表示されたら、取り合えずのビルド成功です。

次に、CCX の作業用のディレクトリを、「mkdir ~/CCXwork21」で作ります。
動作確認用のディレクトリを作ります。「cd ~/CCXwork21 ⇒ mkdir Ex1」

ここでは約40万要素の片持梁で弾性解析を行うテストデータ「test.inp」を用いて、各ソルバーの動作を検証します。
まず次のリンクから「filetest.inp」をダウンロードしてください。

動作確認用ディレクトリ Ex1 の中にテストデータ test.inp を置きます。
ビルドした CCX の解析として、Ex1 内で「$ ccx_2.18_VH test(拡張子 .inp は外す)」として実行します。

表示されるログの途中で「Using upto 1 cpu・spooles」となり、標準のSpoolesソルバーで1cpu(1core)で実行しています。
エラーなく「Job finished」と表示されたら終了で、全体の解析時間は「28.038304 [sec]」となっています。

解析によって多数のファイルが作られており、「test.frd」が CCX の独自の解析結果ファイルになります。

次に Exodus出力 を調べるので、入力データtest.inp以外を削除しておきます。
「$ ccx_2.18_VH test -o exo(オプションは最後に指定する)」で実行します。
この実行では、ParaView で可視化可能な「test.exo」が作られているのが分かります。

ソルバー変更の効果を確認するために、test.inpを、エディタviなどで開いて、以下を変更する
「Static,SOLVER=SPOOLES」の行頭を「**」でコメントアウトして、
「Static,SOLVER=PARDISO」の行頭を「*」で有効にして、ccx_2.18_VHで実行する。

表示されるログの最後に、以下の表示があり、IntelMKLのpardisoソルバーで1コア実行実行しています。
Solving the system of equations using the symmetric pardiso solver
number of threads = 1

解析時間は「18.576814 [sec]」となり、先のspoolesに比べて約1.51倍高速化されています。

AboutNecSXAT


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-07-02 (土) 08:30:19 (86d)