fgmax メモ

fg は fixed grid monitoring のこと.
Fixed grid monitoring - Clawpack 5 を参照.
fixed grid の中で,水位・流速等の最大値の空間分布の情報が fort.FGX.valuemax (Xには数が入る) のファイルに書き出される.

v5.7.0

v5.7.0より,ファイルによる定義がなくなり,setrun.py 上で設定用のモジュールを呼び出して使うようになった.
以下は定義の例.

from clawpack.geoclaw import fgmax_tools
    # 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.geoclaw.topotools を使って以下のように設定できる.

    # 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

読み取りのカラムについては,GEOLIB の fgmax_finalize.f90 の format 文を参考に.

        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 に,その出力形式が記述されている.

        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 の水深が表示できない.
抽出対象とする最小レベルを指定することができるが,対象時間中にそのレベルまで分割が行われなかった場合にはこのように外れ値が入る.

-120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 Level 1 - 5000 - 4000 - 3000 - 2000 - 1000 0 1000 2000 3000 4000 5000 -120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 Level 2 - 5000 - 4000 - 3000 - 2000 - 1000 0 1000 2000 3000 4000 5000 -120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 Level 3 - 5000 - 4000 - 3000 - 2000 - 1000 0 1000 2000 3000 4000 5000 -120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 AMRlevel 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 3.00


fort.FG1.valuemax に吐き出される h は全水深のため,fort.FG1.aux1 で得る水深を使って h + bath をすると海面からの上昇量に変換できる.
初期潮位があるときはさらに補正が必要.

これらのファイルを読み取り図にしてみた.最大水位,最大流速とこれらが発生した時間を表している.

-120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 h 0 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 (m) -120 -110 -100 -90 -80 -70 -60 -60 -50 -40 -30 -20 -10 0 v