REFPROPをpythonから呼び出す

【追記：2019/02/06】
このページの記事ではビルドから始まっていて少し複雑に見えたので、簡単に使うだけの記事も作成しました。
[REFPROPをpythonから呼び出す（簡易版）](https://qiita.com/ina111/items/b974805d0b36ac14d2a9)

----

REFPROPは商用ソフトで、アメリカ国立標準技術研究所（National Institute of Standards and Technology, NIST）によって開発されたプログラムです。名称はREFerence fluid PROPertiesの頭字語から来ているそうです。

工業的に重要な流体とそれらの混合物の熱物性値および輸送物性値を計算してくれます。[ホームページ](https://www.nist.gov/srd/refprop)からオーダーすると325ドル（2019年1月現在）で購入でき、ダウンロード出来ます。

GUIがあるので、それを使うと様々な種類の物質や混合物の熱物性値や輸送物性値を表やグラフで得られます。熱物性値、輸送物性値は一通りなんでも出るのでとても有用です。

この記事ではpythonからREFPROPの関数を呼び出してみます。
NISTの公式が出しているドキュメントとgithubのページが充実しているので、それをみると終わりですが、少しつまづくところもあったので記事にしておきます。

REFPROPのダウンロード版では外部ソフトからREFPROPの中身を呼び出すのにWindows用のDLLしか同梱されていません。MacOS（自分の環境）から使おうとすると同梱されているfortranのソースを自分でコンパイルしてダイナミックライブラリファイル(.dylib)を作成する必要があります。


## NISTからの有用な資料
* https://www.nist.gov/srd/refprop
* https://github.com/usnistgov/REFPROP-cmake
* https://github.com/usnistgov/REFPROP-manager
* https://github.com/usnistgov/REFPROP-wrappers
* https://nbviewer.jupyter.org/github/usnistgov/REFPROP-wrappers/blob/master/wrappers/python/notebooks/Tutorial.ipynb

## ダイナミックライブラリのコンパイル
### 必要なもの

* Python + numpy 
* fortran コンパイラ
* Cmake
* git

### やり方

1. REFPROP-cmakeを再帰的オプションを付けてクローン、``git clone --recursive https://github.com/usnistgov/REFPROP-cmake.git``
2. REFPROPのFORTRANフォルダをgitでクローンしたフォルダ内にコピー
3. ターミナルでgitでクローンしたフォルダに移動
4. ``mkdir build``
5. ``cd build``
6. ``cmake .. -DCMAKE_BUILD_TYPE=Release``
7. ``cmake --build .`` （ドットまであるのに注意）


![スクリーンショット 2019-02-01 12.10.05.png](https://qiita-image-store.s3.amazonaws.com/0/40132/4ed73cee-4493-b660-994f-0c57a4d52679.png)
ビルド完了。

REFPROP-cmake/build/の中にlibrefprop.dylibが出来ています。
それが共有ライブラリ（ダイナミックライブラリ）です。

### 環境変数に登録

一度共有ライブラリがビルドできると、OSから見つけられる場所に置く必要があります。
OSから見つけられる場所に置くのには、２通りのやり方があります。

1. PATHを通す。
2. 使うpythonスクリプトファイルと同じフォルダにダイナミックライブラリ（.DLL/.dylib/.so）などを置く

Windowsで、REFPROPをインストーラからインストールしているとすでにPATH通されているので難しいこと考える必要はありません。

#### 自分でビルドしている場合の環境変数（１の方法）（MacOS）
自分でビルドしている場合、１の方法でREFPROPを使おうとするとPATH通す必要があります。（上でも書いている通り、Windowsでインストーラ使っている方は不要です。）

Macだと標準的なダイナミックライブラリの置き場所は以下とのことです。
> The standard locations for dynamic libraries are ~/lib, /usr/local/lib, and /usr/lib.

PATHを通すのに、出来たlibrefprop.dylicとREFPROPに同梱されているFLUIDSフォルダとMIXTURESフォルダを上記のフォルダのいずれかにコピーします。
私は/usr/local/libの中にいれました。

そのあと、~/.bach_profileに書いておく必要があります。ターミナルで以下を入れます。

```
echo 'export RPPREFIX=/usr/local/lib' >> ~/.bash_profile
```

/usr/local/libのところは自分の置いたフォルダに置き換えてください。



## pythonライブラリインストール
REFPROPのpythonラッパーがNISTの方が作っていますので、それをインストールします。ターミナルから以下を実行。

```
pip install ctREFPROP
```

## チュートリアル
公式のctREFPROPのチュートリアルを参考に、自分用チュートリアルを作りました。
https://nbviewer.jupyter.org/gist/ina111/a4d9507eef905c5aeb11fffd42d32a48

以下はその出力ファイルです。こんなのが出来ますよということで。

#### 蒸気圧曲線
![METHANE_vapor_pressure1.png](https://qiita-image-store.s3.amazonaws.com/0/40132/f4618ba7-4f75-c192-bc52-a6c8c1dbc6f5.png)
![METHANE_vapor_pressure2.png](https://qiita-image-store.s3.amazonaws.com/0/40132/80a5ee31-63cc-2f61-11ba-6f3a3645443f.png)

#### 温度ー密度
![METHANE_T-density1.png](https://qiita-image-store.s3.amazonaws.com/0/40132/0b9c4e59-c94e-c05b-31ee-aa1201498539.png)

#### 定圧比熱Cp、粘性、熱伝導率
![METHANE_T-Cp1.png](https://qiita-image-store.s3.amazonaws.com/0/40132/e9dbdcb1-41cd-b489-1a3e-8bddafb2dd22.png)
![METHANE_T-vis.png](https://qiita-image-store.s3.amazonaws.com/0/40132/88b445a1-3873-7153-08e8-4de542a1eef4.png)
![METHANE_T-α.png](https://qiita-image-store.s3.amazonaws.com/0/40132/e6e17a25-3dff-998a-a2d7-a328d415989e.png)