Python バージョンを入れ替える(Mac)
2020年4月27日、Pythonは3.8.1を入れていたが、3.8.2にしてみた。 Pythonと関連ライブラリのインストールはpyenvとpipのみで行っている。
目的はPythonのバージョンを変えるだけなので、.zshrcに記載しているパスや、Jupyterの設定は変更しない。もちろんこれらのファイルはいじらない。
関連事項として以下を参照。
パスの設定:.zshrc
PROMPT="%# " export PYENV_ROOT=${HOME}/.pyenv export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" alias brew="env PATH=${PATH/\/Users\/${USER}\/\.pyenv\/shims:?/} brew"
ファインダーに隠しファイルを表示するスクリプト:a_dota.sh
defaults write com.apple.finder AppleShowAllFiles TRUE killall Finder
ファインダーで隠しファイルを非表示にするスクリプト:a_dotk.sh
defaults write com.apple.finder AppleShowAllFiles FALSE killall Finder
以下に手順を示す。
まずは、.pyenv
を含む隠しファイルをファインダーに表示する。
% sh a_dota.sh
% brew uninstall pyenv Uninstalling /usr/local/Cellar/pyenv/1.2.18... (695 files, 2.5MB)
上記操作により、homebrew で pyenv を削除後、ディレクトリ.pyenv
をファインダーで削除。
homebrew で pyenv を再インストール。
以下の画面では、homebrew をアップデート後、pyenv
をインストールしている。
% brew install pyenv Updating Homebrew... ==> Auto-updated Homebrew! Updated 2 taps (homebrew/core and homebrew/cask). ==> New Formulae autodiff hcxtools libcpuid ==> Updated Formulae ammonite-repl fastlane nushell azcopy fetchmail open-mesh (途中省略) fantastical qiyimedia ==> Deleted Casks go2shell wineskin-winery ==> Downloading https://homebrew.bintray.com/bottles/pyenv-1.2.18.catalina.bottl Already downloaded: /Users/kk/Library/Caches/Homebrew/downloads/cd594a21b931d84b2c968913ea285837c751aa1c0db7d47a935f60c49794d6cd--pyenv-1.2.18.catalina.bottle.tar.gz ==> Pouring pyenv-1.2.18.catalina.bottle.tar.gz 🍺 /usr/local/Cellar/pyenv/1.2.18: 695 files, 2.5MB
pyenv
のインストールが無事完了。
欲しいPythonのバージョンを確認。
% pyenv install -l Available versions: 2.1.3 2.2.3 (途中省略) 3.7.7 3.8.0 3.8-dev 3.8.1 3.8.2 # <= これが欲しい! 3.9.0a5 3.9-dev activepython-2.7.14 activepython-3.5.4 activepython-3.6.0 anaconda-1.4.0 anaconda-1.5.0 (途中省略) stackless-3.4.7 stackless-3.5.4
Python 3.8.2 をインストール。
% pyenv install 3.8.2 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.8.2.tar.xz... -> https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz Installing Python-3.8.2... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-3.8.2 to /Users/kk/.pyenv/versions/3.8.2
% which python /Users/kk/.pyenv/shims/python
Pythonは.pyenvの下にあるのだが、呼び出そうとするとシステムのPythonが呼び出される。
% python3 Python 3.7.7 (default, Mar 10 2020, 15:43:33) [Clang 11.0.0 (clang-1100.0.33.17)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> quit()
pyenvのglobalで3.8.2を宣言。
% pyenv global 3.8.2
% python3 Python 3.8.2 (default, Apr 27 2020, 09:48:02) [Clang 11.0.0 (clang-1100.0.33.17)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> quit()
これでPythonを呼ぶと3.8.2が立ち上がるようになる。
% python3 Python 3.8.2 (default, Apr 27 2020, 09:48:02) [Clang 11.0.0 (clang-1100.0.33.17)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy' >>> quit()
numpyをimportしてみるがもちろん入っていない。 以降はpipで欲しいライブラリを入れていく。
まずはpipのアップデート。
% which pip3 /Users/kk/.pyenv/shims/pip3 % pip3 install --upgrade pip Collecting pip Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 19.2.3 Uninstalling pip-19.2.3: Successfully uninstalled pip-19.2.3 Successfully installed pip-20.0.2
pip のアップデート完了後、自分が欲しいライブラリをインストール。私の場合、以下のもの。
pip3 install numpy # 数値計算用ライブラリ pip3 install scipy # 数値解析用ライブラリ pip3 install matplotlib # グラフ作成用ライブラリ pip3 install pandas # データ加工支援用ライブラリ pip3 install pillow # 画像処理用ライブラリ pip3 install openpyxl # エクセルデータ読み書き pip3 install xlrd # エクセルデータ読込用 pip3 install xlwt # エクセルデータ書込用 pip3 install scikit-learn # 機械学習ライブラリ pip3 install seaborn # グラフ作成ライブラリ pip3 install sympy # 記号計算用ライブラリ pip3 install jupyter # Jupyter
上記で入れたものを確認。依存関係にあるものは自動的にインストールされている模様。
% pip3 list Package Version ------------------ ------------ appnope 0.1.0 attrs 19.3.0 backcall 0.1.0 bleach 3.1.4 cycler 0.10.0 decorator 4.4.2 defusedxml 0.6.0 entrypoints 0.3 et-xmlfile 1.0.1 ipykernel 5.2.1 ipython 7.13.0 ipython-genutils 0.2.0 ipywidgets 7.5.1 jdcal 1.4.1 jedi 0.17.0 Jinja2 2.11.2 joblib 0.14.1 jsonschema 3.2.0 jupyter 1.0.0 jupyter-client 6.1.3 jupyter-console 6.1.0 jupyter-core 4.6.3 kiwisolver 1.2.0 MarkupSafe 1.1.1 matplotlib 3.2.1 mistune 0.8.4 mpmath 1.1.0 nbconvert 5.6.1 nbformat 5.0.6 notebook 6.0.3 numpy 1.18.3 openpyxl 3.0.3 pandas 1.0.3 pandocfilters 1.4.2 parso 0.7.0 pexpect 4.8.0 pickleshare 0.7.5 Pillow 7.1.2 pip 20.0.2 prometheus-client 0.7.1 prompt-toolkit 3.0.5 ptyprocess 0.6.0 Pygments 2.6.1 pyparsing 2.4.7 pyrsistent 0.16.0 python-dateutil 2.8.1 pytz 2019.3 pyzmq 19.0.0 qtconsole 4.7.3 QtPy 1.9.0 scikit-learn 0.22.2.post1 scipy 1.4.1 seaborn 0.10.1 Send2Trash 1.5.0 setuptools 41.2.0 six 1.14.0 sympy 1.5.1 terminado 0.8.3 testpath 0.4.4 tornado 6.0.4 traitlets 4.3.3 wcwidth 0.1.9 webencodings 0.5.1 widgetsnbextension 3.5.1 xlrd 1.2.0 xlwt 1.3.0 %
これにて作業完了。
以 上
流況曲線作図(改訂版)
流況曲線作図プログラムを(自分にとって)少しわかりやすくしたのでアップ。 対象期間内に欠測はないことを前提にしている。
import numpy as np import pandas as pd import datetime import matplotlib.pyplot as plt from scipy import interpolate def rdata(fnameR): df=pd.read_csv(fnameR,header=0,index_col=0) df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df=df['2001/01/01':'2018/12/31'] return df def makedata(qq,ylist): qqq=np.zeros((101,len(ylist)+1),dtype=np.float64) # discharge ppp=np.arange(101,dtype=np.float64) # propability for i,sy in enumerate(ylist): qd=np.array(qq[sy]) qd=np.sort(qd)[::-1] ii=np.arange(len(qd)) pp=ii/(len(qd)-1)*100 ff=interpolate.interp1d(pp,qd) qqq[:,i]=ff(ppp) for j in range(len(ppp)): qqq[j,-1]=np.average(qqq[j,0:len(ylist)]) return ppp,qqq def drawfig1(ylist,ppp,qqq,tstr,fnameF): fsz=16 xmin=0; xmax=100; dx=10 ymin=0; ymax=200; dy=20 fig=plt.figure(figsize=(10,6),facecolor='w') plt.rcParams['font.size']=fsz plt.rcParams['font.family']='sans-serif' plt.xlim([xmin,xmax]) plt.ylim([ymin,ymax]) plt.xlabel('Non-exceedance probability (%)') plt.ylabel('River flow Q (m$^3$/s)') plt.xticks(np.arange(xmin,xmax+dx,dx)) plt.yticks(np.arange(ymin,ymax+dy,dy)) plt.grid(color='#999999',linestyle='solid') plt.title(tstr,loc='left',fontsize=fsz-2) for i in range(0,len(ylist)): plt.plot(ppp,qqq[:,i],'-',color='#aaaaaa',lw=1) plt.plot(ppp,qqq[:,-1],'-',color='#ff0000',lw=3,label='Average') # Q95 q95=qqq[95,-1] plt.plot([95],[q95],'o',color='#ff0000') plt.plot([95,95],[q95,q95+100],'-',color='#ff0000') xs=95 ys=q95+100 ss='Q95%:{0:6.2f}m$^3$/s'.format(q95) plt.text(xs,ys,ss,va='top',ha='right',fontsize=fsz-2,rotation=90) plt.legend() plt.savefig(fnameF, dpi=100, bbox_inches="tight", pad_inches=0.1) plt.show() def tblq(lyy,qym): mmq=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec','Ave'] tstr='* monthly average discharge' mmm=mmq arr=qym print(tstr) ss='{0:4s}'.format('Year') for m in mmm: ss=ss+',{0:>6s}'.format(m) print(ss) lyy=lyy+['Ave.'] for i,yy in enumerate(lyy): ss='{0:4s}'.format(yy) for j in range(len(mmm)): ss=ss+',{0:6.1f}'.format(arr[i,j]) print(ss) def emon(lyy,qq): lmm=['01','02','03','04','05','06','07','08','09','10','11','12'] # month qym=np.zeros((len(lyy)+1,len(lmm)+1),dtype=np.float64) kda=np.zeros((len(lyy)+1,len(lmm)+1),dtype=np.float64) for i,sy in enumerate(lyy): for j,sm in enumerate(lmm): ss=sy+'-'+sm qym[i,j]=qq[ss].sum() # sum of each month kda[i,j]=qq[ss].count() # availavle days qym[i,-1]=np.sum(qym[i,:]) # sum of a year of data kda[i,-1]=np.sum(kda[i,:]) # sum of a year of available days for j in range(len(lmm)+1): qym[-1,j]=np.sum(qym[:,j]) # sum of months of data kda[-1,j]=np.sum(kda[:,j]) # sum of months of available days qym=qym/kda return qym def main(): lyy=['2001','2002','2003','2004','2005','2006','2007','2008','2009', '2010','2011','2012','2013','2014','2015','2016','2017','2018'] for kkk1 in [1,2]: if kkk1==1: fnameR='df_teromu_estimated_tk.csv' df0=rdata(fnameR) qd=np.array(df0['Q1516'])*822.6/1070*3393/3417 # discharge at dam site tstr='Duration curve at dam site estimated by tank model (2001-2018)' fnameF='fig_duration_dam_tank.png' if kkk1==2: fnameR='df_teromu_estimated_ml.csv' df0=rdata(fnameR) qd=np.array(df0['Q_knn'])*822.6/1070*3393/3417 # discharge at dam site tstr='Duration curve at dam site estimated by KNN (2001-2018)' fnameF='fig_duration_dam_knn.png' qq=pd.Series(qd,index=df0.index) qym=emon(lyy,qq) tblq(lyy,qym) ppp,qqq=makedata(qq,lyy) drawfig1(lyy,ppp,qqq,tstr,fnameF) #============== # Execution #============== if __name__ == '__main__': main()
以 上
VS code と BasicTeX 2020 をインストール
2020年4月12日、最近話題のVS codeをインストール。また、BasicTeX 2020もインストール。
BasicTeXは、2019がインストールしてあったので、まずこれを削除。
また、which ghostscript
しても、なぜだか「見つからない」と言われるので、再インストール。
BasicTeX のインストールは、ここに従ってインストール。
具体的には以下のとおり。
brew cask install basictex
/Library/TeX/texbin
にパスを通す。
パスの確認は echo $PATH
でできる。
(BasicTeX 2019のためにパスを通してあったので、実際にはいじらない)
sudo tlmgr update --self --all sudo tlmgr install latexmk sudo tlmgr install collection-langjapanese sudo tlmgr install courier sudo tlmgr install newtx txfonts helvetic fontaxes boondox sudo tlmgr install kastrup tex-gyre
mktexlsr
は自動でやってくれる。
TeX文書のプレアンブルは以下の通り。ただし英語用。
\documentclass[10pt]{article} \usepackage[a4paper,top=25mm,bottom=20mm,left=25mm,right=25mm]{geometry} \usepackage[T1]{fontenc} \usepackage{newtxtext,newtxmath,bm} %\usepackage{amsmath,amssymb,bm} \usepackage{float} \usepackage{fancyvrb} %\usepackage[titletoc,title]{appendix} \usepackage[dvipdfmx]{graphics,graphicx} \let\olditemize\itemize \renewcommand{\itemize}{ \olditemize \setlength{\itemsep}{1.2pt} \setlength{\parskip}{0pt} \setlength{\parsep}{0pt} } \begin{document} ...... \end{document}
\usepackage{newtxtext,newtxmath,bm}
か、
\usepackage{amsmath,amssymb,bm}
のどちらかを入れないと数式を認識してくれないので注意。
VS codeは少し触ってみたが、評判どおりとても軽快である。
以 上
matplotlibで使える色一覧
色一覧
画像作成プログラム
import matplotlib import colorsys import matplotlib.pyplot as plt from matplotlib import rcParams rcParams['font.family'] = 'Ricty Diminished' def penc(hval): r=int(hval[1:3],16) g=int(hval[3:5],16) b=int(hval[6:8],16) hsv=colorsys.rgb_to_hsv(r/255, g/255, b/255) h=hsv[0] s=hsv[1] v=hsv[2] col='#000000' if 0.5<h: col='#ffffff' if v<0.75: col='#ffffff' return col cdic=matplotlib.colors.cnames lkey=[] lval=[] for key, val in zip(cdic.keys(), cdic.values()): lkey=lkey+[key] lval=lval+[val] xmin=0 xmax=4 k=-1 fnameF='fig_col_mpl.png' ymin=0 ymax=37 plt.figure(figsize=(6,12)) plt.xlim([xmin,xmax]) plt.ylim([ymax,ymin]) plt.axis('off') fsize=8 # fontsize k=-1 for i in range(int(ymin),int(ymax)): for j in range(0,4): k=k+1 if k<len(lval): xs=float(j) xe=xs+1.0 ys=float(i) ye=ys+1.0 xx=[xs,xe,xe,xs] yy=[ys,ys,ye,ye] plt.fill(xx,yy,color=lval[k]) text1=lkey[k] text2=lval[k] xg=0.5*(xs+xe) yg=0.5*(ys+ye) col=penc(lval[k]) plt.text(xg,yg-0.25,text1,rotation=0,ha='center',va='center',fontsize=fsize,color=col) plt.text(xg,yg+0.25,text2,rotation=0,ha='center',va='center',fontsize=fsize,color=col) plt.savefig(fnameF, dpi=300, bbox_inches="tight", pad_inches=0)
以 上
流況曲線と運転パターン図
はじめに
同じような図は何回か作成しているのだが、また必要になったため、新しく作り直した。 最新版のプログラムをアップしておく。
成果図
プログラム
import numpy as np import pandas as pd import datetime import matplotlib.pyplot as plt def rdata1(): fnameR='df_tank_nk.csv' # input file name df=pd.read_csv(fnameR, header=0, index_col=0) # read excel data df.index = pd.to_datetime(df.index, format='%Y/%m/%d') df=df['1985/01/01':'2017/12/31'] return df def fig_duration(ppp, qqq): qe=5.84 qt0=7.0 fsz=14 xmin=0; xmax=100; dx=10 ymin=0; ymax=40; dy=5 plt.figure(figsize=(8,5),facecolor='w') plt.rcParams['font.size']=fsz plt.rcParams['font.family']='sans-serif' tstr='Typical operation pattern of units' plt.xlim([xmin,xmax]) plt.ylim([ymin,ymax]) plt.xlabel('Non-exceedance Probability (%)') plt.ylabel('River Discharge (m$^3$/s)') plt.xticks(np.arange(xmin,xmax+dx,dx)) plt.yticks(np.arange(ymin,ymax+dy,dy)) plt.grid(color='#999999',linestyle='solid') plt.title(tstr,loc='left',fontsize=fsz) qt1=np.zeros(len(qqq),dtype=np.float64) qt2=np.zeros(len(qqq),dtype=np.float64) qt3=np.zeros(len(qqq),dtype=np.float64) for i in range(len(qqq)): if qe+qt0*3<=qqq[i]: qt1[i]=qe+qt0*3 if qe+qt0*2<=qqq[i]<qe+qt0*3: qt1[i]=qqq[i] if qqq[i]<qe+qt0*2: qt1[i]=0 for i in range(len(qqq)): if qe+qt0*3<=qqq[i]: qt2[i]=qe+qt0*2 if qe+qt0*2<=qqq[i]<qt0*3+qe: qt2[i]=qe+qt0+(qqq[i]-qt0-qe)/2.0 if qe+qt0*1<=qqq[i]<qt0*2+qe: qt2[i]=qqq[i] if qqq[i]<qe+qt0*1: qt2[i]=0 for i in range(len(qqq)): if qe+qt0*3<=qqq[i]: qt3[i]=qt0+qe if qe+qt0*2<=qqq[i]<qe+qt0*3: qt3[i]=qe+qt0 if qe+qt0*1<=qqq[i]<qe+qt0*2: qt3[i]=qe+(qqq[i]-qe)/2 if qe+0.2*qt0<=qqq[i]<qe+qt0*1: qt3[i]=qqq[i] plt.fill_between(ppp,qt1,0,facecolor='#00ffff',alpha=1.0) plt.fill_between(ppp,qt2,0,facecolor='#ffffcc',alpha=1.0) plt.fill_between(ppp,qt3,0,facecolor='#ffd700',alpha=1.0) plt.fill_between(ppp,qqq,0,where=qqq<qe,facecolor='#ff00ff',alpha=1.0) plt.fill_between(ppp,qe,0,where=qe<qqq,facecolor='#ff00ff',alpha=1.0) plt.plot(ppp,qqq,'-', lw=2,color='#000080') plt.plot([xmin,xmax],[qe+qt0*3,qe+qt0*3],'-',color='#000000',lw=1) plt.plot([xmin,xmax],[qe+qt0*2,qe+qt0*2],'-',color='#000000',lw=1) plt.plot([xmin,xmax],[qe+qt0*1,qe+qt0*1],'-',color='#000000',lw=1) plt.plot([xmin,xmax],[qe+qt0*0,qe+qt0*0],'-',color='#000000',lw=1) ss1='Qe + 3 x Qu' ss2='Qe + 2 x Qu' ss3='Qe + 1 x Qu' ss4='Qe' plt.text(xmax,qe+qt0*3,ss1,va='bottom',ha='right',fontsize=fsz) plt.text(xmax,qe+qt0*2,ss2,va='bottom',ha='right',fontsize=fsz) plt.text(xmax,qe+qt0*1,ss3,va='bottom',ha='right',fontsize=fsz) plt.text(xmax,qe+qt0*0,ss4,va='bottom',ha='right',fontsize=fsz) plt.text(10,qe+qt0*2.5,'No.3 unit',va='center',ha='left',fontsize=fsz) plt.text(10,qe+qt0*1.5,'No.2 unit',va='center',ha='left',fontsize=fsz) plt.text(10,qe+qt0*0.5,'No.1 unit',va='center',ha='left',fontsize=fsz) plt.text(10,qe*0.5,'Environmental flow',va='center',ha='left',fontsize=fsz) xs=xmin+0.97*(xmax-xmin) ys=ymin+0.95*(ymax-ymin) ss='Qu : turbine discharge per unit\nQe : environmental flow' props = dict(boxstyle='square', facecolor='#ffffff', alpha=1.0) plt.text(xs, ys, ss, fontsize=fsz-2,va='top',ha='right',bbox=props) fnameF='fig_operation.png' plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1) plt.show() def main(): df=rdata1() q0 = np.array(df['Qtank']) qqq=np.sort(q0)[::-1] # target discharge sort ppp=np.linspace(0,100,len(q0)) # non-exceedance probability fig_duration(ppp,qqq) #============== # Execution #============== if __name__ == '__main__': main()
以上
サージング解析プログラムの挙動解明(2)
解析条件
解析パラメータを下表に示す。 変化させているパラメータは、制水口径および遮断時間でる。
項目 | 採用値 |
---|---|
解析条件 | 負荷遮断 |
シャフト内径(断面積) | D=10.0 m (F=78.5 m2) |
ポート内径(断面積) | Dp=2.0, 3.0, 4.0, 8.0m (Fp=3.14, 7.065, 12.56, 50.24 m2) |
ポート流量係数 | Cd=0.9 |
圧力トンネル延長 | L=2553.370 m |
圧力トンネル内径(断面積) | d0=8.2 m (f=52.783 m2) |
圧力トンネル損失係数 | c=0.179 |
初期流量=>遮断時流量 | Q=340 m3/s => 0 m3/s |
遮断時間(線形遮断) | t=0.1 〜 1000 sec |
貯水池水位 | EL.1100 |
サージタンク頂部標高 | EL.1200 |
サージタンク底部標高 | EL.1000 |
解析結果
下図中、Tは以下で表される自由サージの周期であり、参考のため、自由サージ周期の1/4 (T/4) を一点鎖線で記載してある。
最高上昇水位および制水口抵抗最大値
上図から以下のことがわかる。
- 遮断時間を増加させていくと、最高上昇水位は増加していき、ある遮断時間を超えると、最高上昇水位は減少する。
- この傾向は、制水口径が大きくなってもあるが、制水口径が大きいほど、遮断時間が小さい場合(ここでは0.1秒)に対する水位上昇量は小さくなる。
- 制水口の最大抵抗は、遮断時間が小さい間は遮断完了時に発生するが、制水口最大抵抗が発生する時刻は、社団時間が大きくなってくと、自由サージ周期の1/4時間周辺で頭打ちとなる。
水面変動時刻歴
制水口径Dp=2.0m | 制水口径Dp=3.0m |
---|---|
制水口径Dp=4.0m | 制水口径Dp=8.0m |
---|---|
上図からわかるように、社団時間が150病を超えてくると、水位が調整池水位より高いところで2山を持つようになり、社団時間が200秒となると、2山目の水位が最高水位となる。
コメント
- 計算結果によれば、制水口型サージタンクの場合、遮断時間が長くなるにつれて最高上昇水位が高くなる傾向にあり、ある遮断時間を超えると最高上昇水位は減少していくことが確認できた。
- これが実現象を正しく表しているかについて、明言はできないが、解析結果のプロットは不自然とはいえず、あり得るものと考えたほうがよいと考える。
- この現象を確認するには、実験によることが好ましいと考える。
- この現象の原因については不明であるが、制水口抵抗は遮断時間が大きくなるにつれて単調に減少していくため、制水口抵抗と水面を押し上げる力のバランスによりこのような現象が出ている可能性がある。
以 上
サージング解析プログラムの挙動解明
きっかけ
昨日、私のwebページをご覧になった方から、サージング解析プログラムに関するメールを頂いた。
下が、その疑惑のページのコピーである。 図を見てわかるように。
サージング解析では、「制水口(ポート)径が小さい場合、遮断時間を大きくしていくと、最高上昇水位が大きくなる」とされているが、これは本当なのだろうか?という疑問である。 確かに計算結果はそうなっているし、そうコメントしている。これに関してどのように解釈したら良いのか解明することになった。
試し計算
現象を確認するため、以下の条件でサージング計算を行ってみた。 変化させるパラメータは遮断時間であり、ポート径は比較的小さい2.5mとしシャフト径は現象が顕著に出ている10mとした。 貯水池水位は区切りよくEL.1100mとし、サージタンク頂部標高EL.1150、サージタンク底部標高EL.1050(シャフト高さ100m)とした。
解析パラメータを下表に示す。
項目 | 採用値 |
---|---|
解析条件 | 負荷遮断 |
シャフト内径(断面積) | D=10.0 m (F=78.5 m2) |
ポート内径(断面積) | Dp=2.5m (Fp=4.906 m2) |
ポート流量係数 | Cd=0.9 |
圧力トンネル延長 | L=2553.370 m |
圧力トンネル内径(断面積) | d0=8.2 m (f=52.783 m2) |
圧力トンネル損失係数 | c=0.179 |
初期流量=>遮断時流量 | Q=340 m3/s => 0 m3/s |
遮断時間(線形遮断) | t=0.1, 1, 10, 100, 1000 sec |
貯水池水位 | EL.1100 |
サージタンク頂部標高 | EL.1150 |
サージタンク底部標高 | EL.1050 |
計算結果は以下の通り。
コメント
上図から以下のことがわかる。
- 遮断時間t=0.1secからt=10secまでは遮断時間が増加しているにも関わらず、最高上昇水位が増加している
- 遮断時間t=100secでの最高上昇水位は遮断時間t=0.1secでのものより小さくなっている
- 遮断時間t=1000secでは顕著なサージング現象は発生せず、定性的には期待される挙動となっている
よって、計算結果と想定される実現象に致命的な差異はないと予想されるが、遮断時間が比較的小さい領域では、遮断時間を大きくするに連れ最高上昇水位が上昇するという計算結果の解釈が課題として残る。
以 上