preCICE / OpenFOAM / Calculix 流体構造連成解析の環境構築

# はじめに
今更ながらですが、[preCICE](https://precice.org/index.html) / [OpenFOAM](https://www.openfoam.com/) / [Calculix](http://www.calculix.de/) で行う流体構造連成解析の環境構築、チュートリアルの実行方法をまとめたいと思います(いつもDEXCSを使っていたので、どのように解析環境を構築するのか勉強したかったという、あくまで自分用メモです)。

環境は ubuntu 20.04 LTS を想定しています。

# preCICE

preCICEのインストールは、[Quickstart](https://precice.org/quickstart.html)のページを参考にすると良いと思います。ここではポイントだけを記載しておきます。

```bash:
wget https://github.com/precice/precice/releases/download/v2.5.0/libprecice2_2.5.0_focal.deb
 sudo apt install ./libprecice2_2.5.0_focal.deb
```

# OpenFOAM
## OpenFOAMのインストール
```bash
curl https://dl.openfoam.com/add-debian-repo.sh | sudo bash
sudo apt-get install openfoam2112-dev
```

openfoam2112の環境立ち上げのために、`.bashrc`あたりに以下のコマンドを追加しておきます。
```bash:.bashrc
function ofv2112(){
   command source /usr/lib/openfoam/openfoam2112/etc/bashrc
}
```
もしくは
```bash:.bashrc
ofv2112(){
   source /usr/lib/openfoam/openfoam2112/etc/bashrc
}
```
これで必要に応じてopenfoam2112の環境を呼び出せるようになります。

## openfoam-adapter のビルド
openfoam-adapterのビルドは、preciceのHPの[Quickstart](https://precice.org/quickstart.html)が参考になります。

まず、adapterのビルドに必要なパッケージをインストールします。
```bash:
sudo apt install build-essential pkg-config cmake git
```
次いで、openfoam-adapterをgitから持ってきて、ビルドします。
```bash:
git clone --branch=master --depth 1 https://github.com/precice/openfoam-adapter
cd openfoam-adapter
./Allwmake
```

# Calculix

Calculix単体であれば、aptをたたけばインストールできます。

```bash:
sudo apt install calculix-cgx calculix-ccx
```

ここで、`ccx`がcalculixのソルバーを、`cgx`がpre-、postprocessing用のGUIになります。

## calculix-adapterのビルド
calculix-adapterのビルドは、precice HPの[Get Calculix](https://precice.org/adapter-calculix-get-calculix.html)が参考になります。

adapterのコンパイルはSPOOLES2.2、ARPACK、yaml-cppに依存しているため、これらパッケージを入れます。

```bash:
sudo apt install libarpack2-dev libspooles-dev libyaml-cpp-dev
```

以上がdebパッケージを主としてコンパイル環境を整える方法になります。

---

ソースをもってきて作業を行いたい場合は、以下の作業を行う必要があります。またその場合は、calculix-adapterのコンパイル時にライブラリのPATHを設定する必要があります。

### SPOOLES.2.2
```bash:
wget http://www.netlib.org/linalg/spooles/spooles.2.2.tgz 
mkdir SPOOLES.2.2
tar zxvf spooles.2.2.tgz -C SPOOLES.2.2
cd SPOOLES.2.2
```
解凍するとファイル、ディレクトリがカレントディレクトリに展開されてしまいますので、上にあるようにSPOOLES.2.2というディレクトリを作成し、そちらに展開するようにします。

その後、Make.incにあるコンパイラーを`gcc`に変更します。
```bash:Make.inc
CC = gcc
#CC = /usr/lang-4.0/bin/cc 
```
その後、コンパイルをします。
```bash:
make lib
```

### ARPACK

```bash
wget https://www.caam.rice.edu/software/ARPACK/SRC/arpack96.tar.gz 
wget https://www.caam.rice.edu/software/ARPACK/SRC/patch.tar.gz 
```
```bash:
tar xzfv arpack96.tar.gz 
tar xzfv patch.tar.gz 
cd ARPACK
```
- 次いで、`ARmake.inc`を編集していきます；
  - Line 28: Change home = $(HOME)/ARPACK to directory where ARPACK in extracted
  - Line 115: Change MAKE = /bin/make to e.g. MAKE = make (if needed)
  - Line 120: Change SHELL = /bin/sh to e.g. SHELL = sh (if needed)
   fortranコンパイラーをgfortranに変更します。

   ```bash:
   FC = gfortran
   #FFLAGS = -O -cg89 
   ```

  - Line 35: `PLAT = SUN4` → `PLAT = INTEL` に修正

- 次いで`UTIL/second.f`中の該当ラインを以下のようにコメントアウトします；
```fortran:UTIL/second.f
*        EXTERNAL           ETIME
```

- これでコンパイル準備は完了です。`make lib`すれば作業終了です。

### yaml-cpp

```bash:
wget https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.6.2.zip
unzip yaml-cpp-0.6.2.zip
cd yaml-cpp-yaml-cpp-0.6.2
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
```
---

### calculix source

```bash:
wget http://www.dhondt.de/ccx_2.19.src.tar.bz2
tar xvjf ccx_2.19.src.tar.bz2 
```
ここでは`~/CalculiX/ccx_2.19/src`にソースが展開されているとして、作業を進めていきます。

## calculix-adapter

```bash:
 wget https://github.com/precice/calculix-adapter/archive/refs/heads/master.tar.gz
 tar -xzf master.tar.gz
 cd calculix-adapter-master
```

Makefile中のCalculixのソースの場所を修正します；

```bash:Makefile
CCX_VERSION         = 2.19
CCX             = $(HOME)/CalculiX/ccx_$(CCX_VERSION)/src
```

`make`でコンパイルすると`ccx_preCICE`が作成されます。あとはPATHを通してすべての作業は修了です。

### adapterコンパイル時のエラー対応について (CalculiX ver.2.20 2023.7.18現在)
gtortran10でのコンパイル時にエラーが出ることがあるようです．詳細は[こちら](https://calculix.discourse.group/t/compilation-error-with-gfortran10/1048/2)で．

こちらに**cubtri.f**ファイルがあるので，それをダウンロードすればコンパイルできるようになります．


# まとめ
preCICE / OpenFOAM / Calculix の流体構造連成解析の環境構築を、今更ではありますがまとめてみました。