BiomassGasificationFoam【インストール(Docker環境)】
インターネットを探していたら、BiomassGasificationFoamなるものがあるとのことでインストールしようと思ったのですが、、、
https://iopscience.iop.org/article/10.1088/1742-6596/530/1/012015/pdf
注意しよう!!
論文中のリンクをたどって開こうとするとなぜかリンクが飛ばない、、、と思っていたら、ウイルスバスターさんが危険なサイトとしてブロックしていました。urlをgoogle検索してみてみると、ドイツの怪しげな夜のお店につながっていた模様(なぜだ、、、)
本家のサイト
ここが新しい本家のページのようです。ただし、後述のようにReserch gateの作者のページにあるファイルが最新のようです。
環境構築
適当な自分の環境でインストールを進めると、
porousReactingZone.H:269:34: error: 'const class Foam::coordinateSystem' has no member named 'axis' return coordSys_.axis();
とエラーが出ます。下でも同じような話が出ています。
Error on biomassGasificationFoam_installPack_1.0 -- CFD Online Discussion Forums
そのため、
OpenFOAMのバージョンに注意; (できれば)本家のOpenFoam 2.1.1.にそろえる。
ソースコードは作者のresearch gateから引っ張る
にての対応の方針です。Reserch gateの作者ページはこちら
OpenFOAMのインストール(Docker)
バージョン違いのOpenFOAMを入れるため、環境を汚さないようにDockerを使ってインストールします。Docker hubを探すと2.1.1の開発バージョンのものがありましたので、ありがたく使います。なお、これより後バージョン(v2.4とかv4)ではbiomassGasificationFoamがうまくコンパイルできませんでした。
https://hub.docker.com/r/konradmalik/openfoam211
dockerのpullコマンドはコレ。
$ docker pull konradmalik/openfoam211
pullした後は、docker イメージを一応わかりやすくコピー(別名保存)しておきます。今回は、biomass-gasification-foamという名前にしました(変更可)。
$ docker tag openfoamのイメージID biomass-gasification-foam
コンテナを作成します。rootで入ります。通常ユーザでログインすると、よくpermission負けします。
$ docker run -it --user root biomass-gasification-foam /bin/bash
CUI環境に入りますが、一旦exitしたら次回以降はstartで開始します。毎回runで開始すると延々とコンテナを増やすことになってしまいます(初心者らしいミス)。
$ docker start -i コンテナのID
BiomassGasificationFoamのダウンロード
wgetを使って、作者reserch gateページからダウンロードしてきます。
$ wget https://www.researchgate.net/profile/Kamil-Kwiatkowski/publication/258998426_Biomass_gasification_solver_based_on_OpenFOAM_-_library_biomassGasificationFoam_installPack_10tar/data/0c9605299f53bc6c4d000000/biomassGasificationFoam-installPack-10tar.gz
拡張子が変なことになっているので、変更して解凍します。
$ mv biomassGasificationFoam-installPack-10tar.gz biomassGasificationFoam-installPack-10.tar.gz $ tar -zxvf biomassGasificationFoam-installPack-10.tar.gz
なお、dockerコンテナによってはデフォルトでtarとかが入っていなかったりするので、ホスト側からのコピーでもよいです(今回のdocker imageではwgetもtarも入ってました)。
$ docker cp biomassGasificationFoam_installPack_1.0/ コンテナのID:/home/openfoam/
BiomassGasificationFoamのインストール
biomassGasificationFoam_installPack_1.0
フォルダ中のREADMEを見ながら進めます。まずは、(一応)必要なライブラリをインストールしておきます。やらなくてもよさそうです。
$ apt-get update $ apt-get install build-essential flex bison cmake zlib1g-dev qt4-dev-tools libqt4-dev gnuplot libreadline-dev libncurses-dev libxt-dev
biomassGasificationFoam_installPack_1.0
フォルダ中に移動し、環境変数を設定します。そのままインストール実行します。
$ cd biomassGasificationFoam_installPack_1.0 $ source biomassGasificationMediaDirectories $ ./install
無事インストールができたらコマンドがたたけるハズなので、helpでインストールを確認してみます。
$ biomassGasificationFoam --help
チュートリアル
TGA
のディレクトリに移動して、
$ biomassGasificationFoam
で実行してみますが、以下エラーが出てきます。
--> FOAM FATAL IO ERROR: Unknown ddt scheme CrankNicholson
/system/fvSchemes
のフォルダを修正します。CrankNic"h"olsonのタイポのようですので、修正します。
ddtSchemes { default CrankNicolson 0.7; }
満を持して実行。出力は保存しておいた方がよい+結構時間がかかります。
$ biomassGasificationFoam > log &
参考にしました。
BiomassGasificationFoam compiling issue -- CFD Online Discussion Forums
Dockerでホストとコンテナ間でのファイルコピー - Qiita
[Docker] 起動するとファイルが消えてしまうときに確認してみること | script life 千夜一夜 プログラミング別館
Docker【FrontISTRを動かす】
OSSのFEMソフトウェアFrontISTRのDocker利用を通じて、Dockerについての理解を深める回です。
Docker imageをインストールする
以下のFrontISTR公式サイトのダウンロードページに行くと、各バージョンごとのFrontISTRが用意されています。
https://www.frontistr.com/download/
Dockerのボタンを押すと、以下コマンドをコピーしてくれとの表示がされるので、コマンドをコピーします。
docker pull registry.gitlab.com/frontistr-commons/frontistr/fistr1:master
:以下はタグと呼ばれるもののようで、ダウンロードするfrontistrのバージョンで違います。
わき道)Docker imageの格納場所
一般的に、docker imageはdocker hubに保管されています。
FrontISTRのdocker imageはGitLab Container Registryにて管理されているようです。
プライベートDockerレジストリとしてのGitLab Container Registry - Qiita
置き場はここのようです。
docker · master · FrontISTR-Commons / FrontISTR · GitLab
ということでdocker imageをpull
$ docker pull registry.gitlab.com/frontistr-commons/frontistr/fistr1:master
Dockerコンテナの起動
コマンドを打ち込んでfrontistrコンテナ環境に移行します。
$ docker run -it registry.gitlab.com/frontistr-commons/frontistr/fistr1:master
# which fistr1
コマンドで実行ファイルの保存先を確認できます(/usr/bin/fistr1にあった。)。
# gfortran -v
でgfortranをインストールしていることを確認します。なお、ファイルを読もうとするとviコマンド(lessも)が無く、困ったなぁってなりましたが、一旦保留(使わないし)。docker環境では、同様の状態の場合も多いようです。
Docker コマンド
$ docker run -it --sig-proxy=false --rm -u $UID -v $PWD:$PWD -w $PWD registry.gitlab.com/frontistr-commons/frontistr/fistr1:master fistr1 -t 1
dockerコンテナを使って、frontistrの実行プログラムを直接するときは、上記コマンドで実行可です。コマンドオプションは以下。(研究会資料をカンニングしています。)
- ワークディレクトリをホストと同一パスにして(-w)
- カレントディレクトリをマウントして(-v)
- UIDを指定し同じものを使う(-u)
- コンテナへの変更を保存しない(--rm)
- インタラクティブ(-i)で端末を割り当て(-t)
- Ctrl+Cなどでコンテナごと落とす(--sig-proxy=false)
以上、とりあえず深まりました。
参考)FrontISTRのDocker対応
第57回FrontISTR研究会の資料に簡単に記載あり(会員のみ閲覧可)
参考にしました
Docker【ことはじめ】
Docker Hello-world
$ docker run hello-world
のコマンドの実行で、hello-worldのimageのダウンロード+コンテナの展開がおこなわれるようです。
$ docker ps
を実行しても特に何も見れないですが、hello-worldは実行後に停止させているからのよう。
$ docker images
を実行すると、hello-worldイメージをダウンロードしていることがわかります。
$ docker ps -a
で停止中のコンテナも見れます。IDも確認です。
$ docker rm ID番号
でコンテナ削除できます。
$ docker rm $(docker ps -q -a)
を打ち込むと、休止中のコンテナをすべて削除できます。
$ docker rmi hello-world
でhello-world imageを削除
Docker Ubuntu
$ docker pull ubuntu
でubuntu imageをインストール。以下コマンドで
$ docker run -it
でubuntu環境にログインします(すごいなぁ、、、)。-itとはなんだ?
docker run -it の「-it」とはなにか - Qiita
# exit
で環境から抜けれます(コンテナも停止)。コンテナを稼働させながら環境を抜ける(デタッチ)には
ctrl-P+Q
コマンドですが、vscodeを使用していると、ショートカットで負けます。ショートカット負けしないようにするには、ショートカット書き換えしかなさそう?
Dockerのコンテナから抜ける in VSCode - Qiita
エラー
imageをpullしようとしたらなんかうまくいかんかったですが、dockerデスクトップを再起動したらうまくいきました。
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on xxxx: read udp yyyy:40196->xxxx: i/o timeout
参考にしました。
Docker入門 ~Hello World~ - Qiita
Docker【インストール】
WSL2をインストールしたので、Dockerのインストールにトライします。
ページからインストーラをダウンロード・実行。"Enable WSL 2 Windows Features"にチェックを入れるのを忘れない。
$ docker ps The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings.
docker Desktopから、WSL2の選択が必要です。Settings→Resources→WSL INTEGRATIONから設定します。
設定したら、もう一度コマンドを入れます。
$ docker ps
うまく出力されればOK。
PCの再起動後
PCを再立ち上げしたりすると、以下コマンドが出力されたりします。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker desktopから見ると、wsl integrationの設定のチェックが外されたりしていたので、再設定。設定を保存する方法とかは確認中、、、
チュートリアル
$ docker run hello-world
dockerが入っていれば、hello-worldイメージが自動的にダウンロードされて実行することができます。
FrontISTRでdocker
チュートリアル代わりに、OSSのFEMソフトウェアFrontISTRでdockerをやってみます。 www.ricos.co.jp
まずは、frontISTR自体をgit cloneして、docker imageを続いてpullします。
$ git clone https://github.com/FrontISTR/FrontISTR.git $ docker pull registry.gitlab.com/frontistr-commons/frontistr/fistr1:master
実行ディレクトリに移動して、dockerコマンドでFrontISTRを実行します。
$ docker run -it --sig-proxy=false --rm -u $UID -v $PWD:$PWD -w $PWD registry.gitlab.com/frontistr-commons/frontistr/fistr1:master fistr1 -t 1
詳細の理解はおいおいやっていこう
参考にしました
シリアル通信(RS-232C)とは?
実験装置からの出力データがRS-232Cだったので、勉強ベースで情報のまとめ。
シリアル通信とは?
RS-232はシリアル通信の規格とのこと。
シリアル通信の基礎知識 - シリアル通信とは?RS-232C / RS-422 / RS-485の違いはなんだろう? - | コンテック
windows10に接続する
Windows 10 シリアルへの接続とCOMポート割り当ての変更方法 by ボクにもわかる地上デジタル
シリアル通信を受信する
TeraTermを使ってPICとPC間でシリアル通信をする方法 | 東京海洋大学 田原研究室
pythonでシリアル通信
【Python入門】pySerialでシリアル通信を実行する方法を解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
pytonでfft・ローパスフィルタ
試験結果のデノイズのためにフーリエ解析に基づくローパスフィルタをかけます。 まずは、周波数解析。fftpackを使います。fsには周波数を入れます。
import scipy.fftpack as spfft X = spfft.fft(data) amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in X] freq = spfft.fftfreq( len(amplitudeSpectrum) , d=1.0/fs) import matplotlib.pyplot as plt plt.plot(freq,amp)
ローパスフィルタをかけます。パラメータは
- fp:通過域端周波数[Hz]
- fs:阻止域端周波数[Hz]
- gpass:通過域端最大損失[dB]
- gstop:阻止域端最小損失[dB]
fnは規格化のための基準の周波数。
wp = fp / fn
ws = fs / fn
N, Wn = signal.buttord(wp, ws, gpass, gstop)
b, a = signal.butter(N, Wn, "low")
y = signal.filtfilt(b, a, x)
参考にしました。
PythonでFFT実装!SciPyのフーリエ変換まとめ | WATLAB -Python, 信号処理, AI-
周波数解析 — Mechanical Design Lab. of TUMSAT 1.0 documentation
Python:ScipyのFFT(scipy.fftpack)をやってみる。 - がれすたさんのDIY日記
デシベルとは?
numpy【loadtxtで日本語ファイルを読む】
日本語交じりのファイルをnp.loadtxtで読み込みます。
data = np.loadtxt('data.CSV',delimiter=',',skiprows=1, encoding="utf-8_sig")
エラーが発生
UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
エンコード指定で解消します。"utf-8_sig"が必要なようです。
data = np.loadtxt('data.CSV',delimiter=',',skiprows=1, encoding="utf-8_sig")
詳しくは、こちらに記載ありました。