2022年1月23日日曜日

技術者の階段 その2

数年前にお世話になった御客様から電話を頂きました。

どうも、御一緒した仕事の続きをされるみたいでした。
当時、地質統計学を用いた3次元確率分布の可視化を含め、好評だったと記憶しています。覚えていてくださったのはありがたい話です。で、今の担当部署にバトンタッチ。
結果、executive が「こんなことはできないよ」と一蹴されていました。担当部署では技術的に備えておらず、一般的な調査のみで仕事を片づけられたようです。私も当時使っていたソフトは部署移動時に手放してしまいましたのでサービスできず。残念です。

別部署の後輩さんとの雑談で、水位と透水係数の話が出てきました。

水位を変えるために透水係数をどう設定するかが分からないようでした。先輩さんの専門が異なるので、地下水に関する十分な指導を受けていないのでしょう。
昔 EXCEL で作っていた揚水時の2次元水位変化の book を渡しておきました。単純化しているので正確ではないのですが、透水係数や揚水量に応じてどのような水面が得られるかイメージを掴む程度のことは可能でしょう。
本来なら基礎理論を理解し、水理公式や FloPy などでイメージを掴んでから浸透流計算に移るべきです。が、後輩さんの部署は基礎理論はおろかプログラミングも計算もされないようですので EXCEL ぐらいしか選択肢がありません。残念です。


いずれも単純な技術力不足なのですが、それで通用するのがヒトの世。どこかで技術者の階段を必死に登ることをやめたヒトたちが集まって、バイアスがかかり「常識」が生まれ、技術力不足を感じなくなったのでしょう。怖いですね。

しかも、このような状況に陥らないようにするために技術士の総監があったはずです。専門技術のみならず、管理技術を勉強される方が増えると、お客様にとっても喜ばしいことです。そう思えば日々研鑽される方が出てくるのではないでしょか。

一人でも多く、そのような「技術者」と呼べる方が増えることを願います。

2022年1月19日水曜日

CfdOF その2

CfdOFに関しては、多孔質媒体を含む流体解析が目的。

OpenFOAM では Darcy Forchheimer(ダルシー・フォークハイマー)model として実装されています。
https://openfoamwiki.net/index.php/DarcyForchheimer


日本語の文献もありました。 
高田ほか(2019)防波堤基礎捨石より流入する津波や高潮に関する水理実験および数値解析
吉岡ほか(2010)高透水性多孔質体中の非ダルシー流れに関する考察

係数は Ergun の推定式が良いとされていますが、透水係数からでも求められます。今回は一つ目の文献と同条件で多孔質媒体の透水性を定め、テストしてみました。


VOF(Volume of Fluid)法での2相流です。越流からのエアのトラップも表現されていますが、メッシュをもっと細かくしないとダメですね。

粒径を半分にした場合がコチラ。


透気係数や空気の圧縮性が気になりますが、設定を見つけられませんでした。表面張力の設定は transportProperties の中にありました(sigma)。後からエディタで修正が必要でしょう。

OpenFOAM の基本は tutorial をコピーして利用するスタイルかと思いますが、こちらの方が便利。自由表面の流れと地下水を同時に扱う場合、これをベースに設定を詰めていくスタイルの方が楽そうです。

*************************
20220205追記

式を展開していくと、高田ほか(2019)の(12)式とは微妙に異なる形になりました。数値は一致したので、誤植でしょうね。

2022年1月16日日曜日

CfdOF

Surface water と Groundwater にかかわる文献を読んでいて、CfdOFにたどり着きました。

Integral Flow Modelling Approach for SurfaceWater-Groundwater Interactions along a Rippled Streambed
A finite-volume solver for two-fluid flow in heterogeneous porous media based on OpenFOAM
CfdOF は FreeCAD のワークベンチ。
早速、Win10 + FreeCAD v0.19 に CfdOF をインストールしようとしたのですが、以下のエラーが発生。
エラーが発生したためこのワークベンチをインストールすることができません. 先ずは、見当たらないコンポーネントをインストールしてください。
Gitのレポジトリを見に行くと、インストール手順が書かれていました。
CfdOF: A Computational fluid dynamics (CFD) workbench for FreeCAD
https://gitlab.com/opensimproject/cfdof/-/tree/master
Before installing CfdOF, the Plot workbench must first be
installed into FreeCAD using the Addon manager:

Run FreeCAD
Select Tools | Addon manager ...
Select Plot in the list of workbenches, and click "Install/update"
Restart FreeCAD
Repeat the above for the "CfdOF" workbench
For installation of dependencies, see below

このあと、dependencies をチェックする流れ。その中の一つに OpenFOAM が必要でした。これは FreeCAD に含まれているものと勘違いしていました。

Ubuntu20.04 では 既に OpenFOAM を走らせて結果を可視化するまで環境を整えていましたので、そちらへ行移行。したのですが、FreeCAD v0.18 から addon manager を立ち上げても CfdOF が出てこない。調べてみると、v0.18 の不具合でした。

*********ここから読み飛ばしてOK**************
仕方ないのでWin10 に戻り続行。
管理者権限で FreeCAD を立ち上げてから 編集‐設定 で CfdOF を選択。必要なソフトをボタンポチポチでインストールしました。OpenFOAM は CFD 版の2012がデフォでした。Ubuntu 側は Foundation 版でしたので、ちょうど良いかも。

ところが、dependency cheker がうまく走りません。無視して計算を流しても、エラーになります。
因果関係はわからず、これは重そう、ということで再び Ubuntu へ。

*********ここまで読み飛ばしてOK***************
ターミナルから
$ sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
$ sudo apt update
$ sudo apt upgrade

保留されてしまったので、
$ sudo apt dist-upgrade
これで v0.19 になりました。

次は gmesh のインストール。
$ sudo apt install gmsh
ダメでしたので、公式HPからパッケージを DL して /opt の下位へ展開。

OpenFOAM の directory を指定。
/opt/openfoam9
paraview,gmesh,output も同様に指定

cfMesh, HiSA をポチっとインストール(OpenFOAM の directory を先に指定しないと入りません)。

Win版で作成した fcstd データを Ubntu 側にコピーして、実行。
gmsh のケースがないといわれたので作成して再実行。

走りました。これで環境は整いました。

*********ここから読み飛ばしてOK**************
Win10側でも mesh を作成しなおすと走りました。他のケースでも試してみましたが、mesh作成は計算の直前に実施した方が良さそうです。順番があるのかもしれません。
checker がうまく走らない点の原因はわかりませんが、Win10側でも計算環境が整いました。


2022年1月13日木曜日

plotly in Jupyter

Jupyter Lab にて plotly の図が表示されませんでした。

公式HPを見てみると、以下の案内がありました。
https://plotly.com/python/getting-started/

$ conda install "ipywidgets>=7.6"
$ conda install -c plotly jupyter-dash
$ conda install python-kaleido

はい、これで無事に表示されました。

以前は Surfer で作成していた地形変化の図化(色塗りコンター)。今は Plotly でも対応可。xyz の DataFrame にしてしまえば、容易に図化できます。個人的には メッシュ配列に加工しなくて良いため、matplotlib よりも好みです。

import plotly.graph_objects as go
import plotly.offline as offline

fig = go.Figure(data =go.Contour(z=df.z,x=df.x,y=df.y,))
fig.update_layout(title='contou',
                  autosize=False, width=500, height=500,
                  xaxis=dict(ticks='outside'),
                  yaxis=dict(ticks='outside'),
                  margin=dict(l=20, r=20, b=20, t=20))
fig.update_traces(zmin=-100,zmax=100,colorscale= 'Edge')
#fig.show()
offline.iplot(fig, filename='contour', image='png')
fig.write_image('./contour.png')

2022年1月6日木曜日

pyc to py

pyc ファイルを py へ decompile。

使用したのは uncompyle6 v3.8。Python3.10 だと動かなかったので、3.8 で環境構築。これで動きました。 

数10ファイルのうち、エラーはひとつ。他はほぼ完ぺきに再現できているでしょう。

import uncompyle6
import glob

for f in glob.iglob("./**/*.pyc", recursive=True):
    print(f)
    pyc_path = f.split('.')[1]
    py_path = '.'+pyc_path + '.py'
    with open(py_path, "w") as fileobj:
        try:
            uncompyle6.decompile_file(f, fileobj)
        except:
            print("Error")

********************************
20220108追記
再現内容を見るとインデントのおかしな箇所があり、そのままでは完走しませんでした。修正すればOKでしたが、完ぺきではないようです。ま、ここまで再現できれば素晴らしいのですが。windowsだったからかな?


2022年1月4日火曜日

SeisNoise

Timothy Clements, Marine A. Denolle
SeisNoise.jl: Ambient Seismic Noise Cross Correlation on the CPU and GPU in Julia
Seismological Research Letters (2021) 92 (1): 517–527.
https://doi.org/10.1785/0220200192
https://docs.juliahub.com/SeisNoise
https://github.com/tclements/SeisNoise.jl

ambient seismic noise cross correlation のライブラリです。これまで見てきた passive 手法の中では最も新しく、シンプルに書けそうです。しかも CUDA 対応済み。
https://phreeqc.blogspot.com/2021/05/passive.html
https://phreeqc.blogspot.com/2021/06/blog-post_25.html

ちょうど手元の Win10 + Jupyter がエラーを吐いて動かない状態でしたので、再構築がてらインストールしてみました。
まずは、既存の Julia と miniconda をアンインストール。関連フォルダをすべて削除。レジストリもクリーンにしてから再起動。

Julia 1.65 をインストール後、
pkg> add IJulia
pkg> add SeisNoise
pkg> add SeisIO; build; precompile
pkg> add Plots
 
miniconda 3 をインストール後、
$ conda install jupyter lab
$ jupyter lab

規定の browser だと表示されなかったので、起動 browser を変更。
$ jupyter lab --generate-config
~/.jupyter/jupyter_lab_config.py
 c.ServerApp.browser = '"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" %s'

これで立ち上がりました。
Github の README.md のソースをコピペして run。
同じ絵が出ました。OKです。

F-net の sac が手元になかったため、FDSN(IRIS) にある気象庁の静岡と岐阜のデータに変更。周波数を低めに設定し、run。

1日間と短いのですが、そこそこの形になりました。

DL に時間がかかりますが、仕方がないでしょう。
テストは CPU +1日間のデータのみでしたが、感覚的に速い方だと思います。GPU を使えるなら、大きなデータを扱えそうです(データを用意するのに時間がかかりますが)。

exsample は今後整備される予定のようです。楽しみですね。

2022年1月2日日曜日

Mahalanobis distance

マハラノビス距離を利用する異常検知手法は、機械学習系の図書に載っています。

これまで、ユークリッド距離での異常検知しか実施したことがありませんでした。が、それらの結果は散々。今回、淡い期待を込めてマハラノビス距離も潰しておくことに。

ガウス分布の指数部分のみなので、計算自体は簡単です。
pandas の DataFrame の形で多次元データを成形してしまえば、分散共分散行列、逆行列、平均を減ずる操作が容易。機械学習系のフレームワークを使用せずとも、pandas と numpy のみで完結します。

で、結果は散々。ま、不可を確認できましたので良しとしておきましょう。