LiggghtsとOpenfoamのカップリング　環境構築編


DEM(Siscrete Element Method)とCFDの連成がしたい場合、OpenfoamのDEM用のソルバーでも解析可能ですが、計算が重くなってしまいかなりツライ。。。
DEMの計算は粒子数とその接触数に依存しますが、Openfoamだけである程度の粒子数を含む解析をするのは現実的ではありません。DEMはDEM専用のソルバーで計算させたほうが早いのです。
オープンソースでDEM専用ソルバーと-CFDを連成をしたい！そんなニーズにこたえてくれるのがLigghgtsです!
Liggghtsについての紹介は今回は省略しますが、以下リンクから確認してください。

https://www.cfdem.com/about-cfdemrproject

LiggghtsはCFDEM(独自にカスタマイズされたOpenfoamベースのカップリングソルバー)を用いることでCFDとの連成が可能です。
そこで今回は、Liggghts及びCFDEMの環境構築について紹介します。

## 前提
今回は以下環境でインストールしていきます。
- windows10
- wsl2
- Ubuntu20.04

## 構築

### wsl環境に入る
事前にwsl2でUbuntu20.04がインストールされているものとして進めます。
### 動作要件のパッケージをインストール
以下のパッケージをインストールします。
```sh
sudo apt-get install git-core
sudo apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev libscotch-dev libptscotch-dev
sudo apt-get install libvtk6-dev
sudo apt-get install python-numpy
```
### ソースコードのダウンロード
Liggghtsやopenfoamはaptコマンドからのインストールも可能ですが、CFDEMを使用する場合はソースコードからのビルドが必要になります。
まず、gitからCFDEM・Liggghts・openfoamのソースコードをインストールします。
初めに以下のスクリプトを実行してください。
```sh
sudo apt-get install git-core
sudo git config --global url."https://".insteadOf git://
```
2行目のスクリプトを実行しておかないと、以降のスクリプトでgitからcloneする際にエラーとなりますので気を付けてください。

CFDEMのソースコードをダウンロードします。今回は/optにインストールしますが、他のディレクトリを希望する場合は適宜コードを書き換えてください。
```sh
cd /opt
sudo mkdir CFDEM
cd CFDEM
sudo git clone git://github.com/CFDEMproject/CFDEMcoupling-PUBLIC.git
```
続いてLiggghtsのソースコードです。
```sh
cd /opt
sudo mkdir LIGGGHTS
cd LIGGGHTS
sudo git clone git://github.com/CFDEMproject/LIGGGHTS-PUBLIC.git
sudo git clone git://github.com/CFDEMproject/LPP.git lpp
```
続いてOpenfoamのソースコードです。バージョンはCFDEMの要件で決まっているので注意が必要です。
現在のバージョンでは5.xがサポートされています。
```sh
cd /opt
sudo mkdir OpenFOAM-5.x
cd OpenFOAM-5.x
sudo git clone git://github.com/OpenFOAM/OpenFOAM-5.x.git
sudo git clone git://github.com/OpenFOAM/ThirdParty-5.x.git
cd OpenFOAM-5.x
sudo git checkout 538044ac05c4672b37c7df607dca1116fa88df88
```
## Openfoamのビルド

ビルドを実行していきますが、wslの場合rootでのログインになっていないと思われます。その場合は、rootの切り替えます。
```sh
sudo su -
```
これでユーザーがrootに切り替るので、ビルドとopenfoamの環境変数を設定します。
```sh
echo "export WM_NCOMPPROCS=2" >> ~/.bashrc
echo "source /opt/OpenFOAM-5.x/OpenFOAM-5.x/etc/bashrc" >> ~/.bashrc
source ~/.bashrc
```
一行目のスクリプトはビルドに使用するコア数になりますので、環境に合わせて変更してください。
bashrcへの追記は、vimやnanoなどのエディターで行ってもよいです。

openfoamのビルドの前にgcc のバージョン7をインストールします。
このパッケージのinstallをしないとビルドが通りませんでした。
```sh
sudo apt install g++-7 gcc-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
```
最後にビルドを実行します。
```sh
./Allwmake
```
ビルドが完了したら、ターミナルにでblockMeshと入力してみてください。
```sh
blockMesh
```
ディクショナリは設定していないのでblockMeshはエラーになりますが、よく見るあのマークが表示されていれば問題なくビルドできています。
```sh
/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  5.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
```
## CFDEMのビルド
ようやくCFDEMのビルドです。
こちらもビルドのまえにboostをインストールします。superquadricという球形以外の粒子を扱うために必要なパッケージになります。
```sh
sudo apt install libboost-all-dev
```
続いて以下スクリプトを実行します。
```sh
cd /opt/CFDEM
mv CFDEMcoupling-PUBLIC CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION
mkdir /opt/CFDEM/CFDEMcoupling-PUBLIC-5.x/platforms
mkdir /opt/CFDEM/CFDEMcoupling-PUBLIC-5.x/platforms/linux64GccDPInt32Opt
mkdir /opt/CFDEM/CFDEMcoupling-PUBLIC-5.x/platforms/linux64GccDPInt32Opt/lib
mkdir /opt/CFDEM/CFDEMcoupling-PUBLIC-5.x/platforms/linux64GccDPInt32Opt/bin
```
ビルドの前にフォルダーを整備しています。これを実行しないと以下のsystem testでエラーが出ます。
```sh
cfdemSysTest
```
criticalなエラーがないことが確認できたら、ようやくビルドの実行です。
```sh
cfdemCompCFDEMall
```
このコマンドで、LiggghtsとCFDEMのソルバーがビルドされます。
以上で環境構築は終了です。