ようやく今年1つ目の記事です.
今年はオープンデータを活用したフィールドの計算をやろうとかなと思ってます. 第一弾は,平面二次元流の計算結果です.まだ,ソースは上げてないですが週末には上げます.
斐伊川ですがなかなかいい感じです.実はドライベッドで質量が保存しないところに結構苦労しました.
2019/2/4 uplaod
徐々に解説を書きます.
openfoamの条件ファイルを作るwebアプリですがご存知でしたか?
こんなのが作りたいです.
ようやく今年1つ目の記事です.
今年はオープンデータを活用したフィールドの計算をやろうとかなと思ってます. 第一弾は,平面二次元流の計算結果です.まだ,ソースは上げてないですが週末には上げます.
斐伊川ですがなかなかいい感じです.実はドライベッドで質量が保存しないところに結構苦労しました.
2019/2/4 uplaod
徐々に解説を書きます.
openfoamの条件ファイルを作るwebアプリですがご存知でしたか?
こんなのが作りたいです.
またまた地図ネタです.今回はちょっと力作です.コードは短いですが,結構便利です.
国土地理院の標高タイルから標高値を取得するpythonモジュール libgsidem2el を作ってみました.
標高タイルとは, https://maps.gsi.go.jp/development/ichiran.html#dem を見るとわかるように,タイル単位で配信される数値標高データです.
これがあると,基盤地図情報からダウンロードしなくても標高値を取得できます.
コードは以下です.
import libgsidem2el as gsi
dem = gsi.libgsidem2el('DEM5A')
el = dem.getEL(lon, lat, zoom = 15)
これを使って計算の準備をしています.お正月休みには準備できると思います.
またまた地図ネタです.
先日ネタにでましたミャンマーのある河川の河口部について,ETOPO1とgeoviewsで絵を書いてみました.
驚くほど簡単でした.手順をまとめておきます.
以下のとおり,geoviewsとxarrayを読みます.
xarrayは多次元データの解析用のモジュールで非常に高速です.後日記事を書きます.
import xarray as xr import geoviews as gv import geoviews.tile_sources as gts gv.extension('bokeh')
以下から,ETOPO1のnetCDFデータをダウンロードします.これが一番時間がかかります.
https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/ice_surface/grid_registered/netcdf/
リードは一行です.gzのままいけちゃいます.
xr_ensemble = xr.open_dataset('ETOPO1_Ice_g_gmt4.grd.gz')
xr_ensemble = xr_ensemble.rename({'x':'Longitude', 'y':'Latitude'}) xr_ensemble = xr_ensemble.sel(Longitude=slice(95,99), Latitude=slice(14,18))
この形式以外でも描けますが,geoviews.Datasetは高速なので,データが多い場合は有効です.
kdims = ['Longitude', 'Latitude'] vdims = ['z'] xr_dataset = gv.Dataset(xr_ensemble, kdims=kdims, vdims=vdims)
今回はESRI mapとリンクさせてます.
%%output size=100 filename='out' fig='html' %opts Image {+framewise} xr_dataset.to(gv.Image, ['Longitude', 'Latitude']).redim.range(z=(-50, 10)).options(cmap='jet',colorbar=True,width=450, height=400) \ + gts.ESRI.options(width=400, height=400) * gts.StamenLabels.options(level='annotation')
ソースコードは以下です.
備忘録です.
データセットの解像度を示す.ETOPO1が最新.
http://ofgs.aori.u-tokyo.ac.jp/~okino/gmtscripts/datainfo.html
https://www.ngdc.noaa.gov/mgg/global/etopo1sources.html
南極とグリーンランドの標高値を氷上か基岩かどちらを使うかの差だけです.基本は,絵的には前者を使ったほうが良いですね.
今まで,javascriptを直で書いたりとかしてましたが,よく考えたら,htmlをそのままiframeで埋め込むのが楽じゃないかという話です.
結果簡単にできました.
基本的な流れは,
1.2.は常識なので,3.4.をメモしておきます.
その前に
愛用していたRawGitが終了するとのことです.新たなアップロードは不可でこれまで上げたものは,2019/2までは参照可能とのことです.これまでブログに上げたものにも影響がでますね...
以下を参照.簡単です.
[setting] - [GitHub Pages] - [source] : master branch に変更でsave
変更が10分くらい反映されません.
いろんなサイトにindex.htmlを作らないと駄目だよと書いてますが,無くても全然大丈夫でした.
前回の記事の内容をリンクすると,以下の感じです.
https://computational-sediment-hyd.github.io/1DBedVariationMixed/case01.html
以下を参照.
上記サイトのとおりですが,普通に埋め込むと,
<iframe src="https://computational-sediment-hyd.github.io/1DBedVariationMixed/case01.html" width="600" height="300" ></iframe>
なので,下のようにスケールを調整.大きめのサイズで取り込んで0.6倍してます.
<div style="width:600px;height:200px;"><div style="width:1000px;"><iframe src="https://computational-sediment-hyd.github.io/1DBedVariationMixed/case01.html" frameborder="0" width="1000" height="333" style="transform:scale(0.6); transform-origin: left top;"></iframe></div></div>
もっと複雑なグラフを作ろうと思うとサーバが必要ですね.
githubの新機能GitHub Actionsがベータ版ですが公開されたようで,自動でデプロイまでやってくれるらしいので,サーバを立てるのもいいですね.
またまた更新です.
ほぼ完成かなと思います.
勾配変曲点設けた計算です.
勾配変曲点設けた計算で,上流側河道をガチガチのアーマーコートにしてます.
河床勾配は一定で,狭窄部を中央に設けた計算です.川幅100mから50mです.
下流端水位をE.L.5mで固定してます.
先日お話させて頂きましたnumba.jitの件です.私の手続きが間違ってました. 前回の河床変動の計算時間ですが,タイトルのとおり,超高速化します.100倍です. github更新しておきました.
でも,実問題はそんなわけにはいきません.
以下のサイトを参考にしました.
http://yutori-datascience.hatenablog.com/entry/2014/12/10/123157
http://www7a.biglobe.ne.jp/~thor/novel/column/14.html
ポイントは,公式 http://numba.pydata.org/ にもあるように,
@numba.jit(nopython=True) or @numba.njit
と書くことです.nopythonオプションは,最適化できないものはエラーとして返すというものです.これがないと最適化できるものはするけど,できないものはしないのでほんとに最適化できているかわからないということです.
特に,後述の高速化できないものがループに含まれるとそのループ自体が最適化されないので,ほとんど早くなりません.
一応並列化もやってみましたが,一次元なので,逆に遅くなりましたが,大規模だと早くなるようです.
@numba.jit(nopython=True, parallel=True) # 並列化loopをrange(imax)から, numba.prange(imax) # に変更
まだ,やってないですがclassの最適化もあるようです.ちょっと面倒です.
https://stackoverflow.com/questions/38682260/how-to-nest-numba-jitclass
一切駄目です.例えば,print(str(i))も駄目でした.
引数は駄目です。printは使えます。
駄目です.ちょっと不便
使えます。
これも駄目です.
駄目です.
すべて,numpyにしましょう.例えば,通常sumも使えません.np.sumならO.K.です
2020/3/7追記
より詳しい解説を下記事にしました.
computational-sediment-hyd.hatenablog.jp
computational-sediment-hyd.hatenablog.jp
2020/06追記