#author("2021-02-22T11:30:02+09:00","default:Miyashita","Miyashita") #author("2021-02-22T11:31:28+09:00","default:Miyashita","Miyashita") * fgmax メモ [#m531e0ae] fg は fixed grid monitoring のこと.~ [[Fixed grid monitoring - Clawpack 5>https://www.clawpack.org/fgmax.html]] を参照.~ fixed grid の中で,水位・流速等の最大値の空間分布の情報が fort.FGX.valuemax (Xには数が入る) のファイルに書き出される.~ ** v5.7.0 [#c39b725d] v5.7.0より,ファイルによる定義がなくなり,setrun.py 上で設定用のモジュールを呼び出して使うようになった.~ 以下は定義の例. #codeprettify{{ from clawpack.geoclaw import fgmax_tools }} #codeprettify{{ # Domain 1 fg = fgmax_tools.FGmaxGrid() fg.point_style = 2 # uniform rectangular x-y grid fg.x1 = -20790.0 fg.x2 = 28710.0 fg.y1 = -82690.0 fg.y2 = -19690.0 fg.dx = 90.0 # desired resolution of fgmax grid fg.min_level_check = 1 # which levels to monitor max on fg.tstart_max = 0.0 # just before wave arrives fg.tend_max = 1.e10 # when to stop monitoring max values fg.dt_check = 60.0 # how often to update max values fg.interp_method = 0 # 0 ==> pw const in cells, recommended rundata.fgmax_data.fgmax_grids.append(fg) # written to fgmax_grids.data # Domain 2 fg = fgmax_tools.FGmaxGrid() fg.point_style = 2 # uniform rectangular x-y grid fg.x1 = -11730.0 fg.x2 = 7770.0 fg.y1 = -49630.0 fg.y2 = -19930.0 fg.dx = 30.0 # desired resolution of fgmax grid fg.min_level_check = 1 # which levels to monitor max on fg.tstart_max = 0.0 # just before wave arrives fg.tend_max = 1.e10 # when to stop monitoring max values fg.dt_check = 60.0 # how often to update max values fg.interp_method = 0 # 0 ==> pw const in cells, recommended rundata.fgmax_data.fgmax_grids.append(fg) # written to fgmax_grids.data # num_fgmax_val rundata.fgmax_data.num_fgmax_val = 5 }} ~ 地形ファイルの範囲をそのまま使用したいときは,clawpack.topotools を使って以下のように設定できる. 地形ファイルの範囲をそのまま使用したいときは,clawpack.geoclaw.topotools を使って以下のように設定できる. #codeprettify{{ # Domain 4 topo_file = topotools.Topography(os.path.join('topofile.asc'), topo_type=3) fg = fgmax_tools.FGmaxGrid() fg.point_style = 2 # uniform rectangular x-y grid fg.dx = topo_file.delta[0] # desired resolution of fgmax grid fg.x1 = topo_file.x[0] fg.x2 = topo_file.x[-1] fg.y1 = topo_file.y[0] fg.y2 = topo_file.y[-1] fg.min_level_check = 1 # which levels to monitor max on fg.arrival_tol = 1.0e-1 fg.tstart_max = 0.0 # just before wave arrives fg.tend_max = 1.e10 # when to stop monitoring max values fg.dt_check = 1.0 # how often to update max values fg.interp_method = 0 # 0 ==> pw const in cells, recommended rundata.fgmax_data.fgmax_grids.append(fg) # written to fgmax_grids.data }} ** v5.6.1 [#y11ad48d] 読み取りのカラムについては,GEOLIB の fgmax_finalize.f90 の format 文を参考に. #codeprettify(lang-fortran){{ do k=1,fg%npts do mv=1,FG_NUM_VAL if (abs(fg%valuemax(mv,k)) .lt. 1.d-90) then fg%valuemax(mv,k) = 0.d0 endif enddo write(FG_UNIT,111) fg%x(k),fg%y(k), fg%levelmax(k), & (fg%valuemax(mv,k), mv=1,FG_NUM_VAL), & (fg%tmax(mv,k), mv=1,FG_NUM_VAL), fg%arrival_time(k) 111 format(2e17.8,i4,21e17.8) enddo }} ~ fort.FGX.aux1 には,1, 2 列目は x, y, 3列目以降に各 AMR level レベルでの水深 (bathymetry) が入っている???~ 同じく GEOLIB の fgmax_finalize.f90 に,その出力形式が記述されている. #codeprettify(lang-fortran){{ do ma=1,FG_NUM_AUX cma = char(ichar('0') + ma) fname = 'fort.FG' // cfg // '.aux' // cma print *, 'Writing to file ', fname open(unit=FG_UNIT,file=trim(fname),status='unknown',form='formatted') do k=1,fg%npts write(FG_UNIT,112) fg%x(k),fg%y(k), & (fg%aux(level,ma,k), level=1,mxnest) 112 format(2e17.8,20e17.8) enddo close(FG_UNIT) enddo }} ~ chile2010 の topo ファイルを例に,fgmax を全体に定義し,fort.FG1.valuemax の AMElevel と fort.FG1.aux1 の 水深をそれぞれを書き出してみた.~ 解像度が細かい Level 3 の黒塗りの部分は,-0.99999000E+99 となっており,右下の図の通り,Level 3 の水深が表示できない.~ 抽出対象とする最小レベルを指定することができるが,対象時間中にそのレベルまで分割が行われなかった場合にはこのように外れ値が入る. #htmlinsert(svg/fgmax_bath.svg) ~ fort.FG1.valuemax に吐き出される h は全水深のため,fort.FG1.aux1 で得る水深を使って h + bath をすると海面からの上昇量に変換できる.~ 初期潮位があるときはさらに補正が必要.~ ~ これらのファイルを読み取り図にしてみた.最大水位,最大流速とこれらが発生した時間を表している. #htmlinsert(svg/FGmax4vars.svg)