setrun.py Memorandums

特に重要な変数を書き出してみる.

clawdata

  • clawdata.lower (list of float)
    計算領域の端点の設定.
    clawdata.lower[0] は西端の x (または lon),
    clawdata.lower[1] は南端の y (または lat).

  • clawdata.upper (list of float)
    計算領域の端点の設定.
    clawdata.upper[0] は東端の x (または lon),
    clawdata.upper[1] は北端の y (または lat).

  • clawdata.num_cells (list of int)

  • clawdata.capa_index (int) 直交座標系か緯度経度かで異なる.
    example を見ると直交座標系のときは 0 で緯度経度の時は 2.
    amrdata.aux_type も参照.

  • clawdata.bc_lower, clawdata.bc_upper
    境界条件の設定.
    名前とリストが意味するものはそれぞれ以下の通り.
    # Choice of BCs at xlower and xupper:
    #   0 => user specified (must modify bcN.f to use this option)
    #   1 => extrapolation (non-reflecting outflow)
    #   2 => periodic (must specify this at both boundaries)
    #   3 => solid wall for systems where q(2) is normal velocity
    clawdata.bc_lower[0] = 'extrap' # Western,  x-direction
    clawdata.bc_upper[0] = 'extrap' # Eastern,  x-direction
    clawdata.bc_lower[1] = 'extrap' # Southern, y-direction
    clawdata.bc_upper[1] = 'extrap' # Northern, y-direction
    入力値は数値でもテキストでもOKで,以下のように対応している.
    1 <-> "extrap"   
    2 <-> "periodic" 
    3 <-> "wall"     

  • clawdata.t0 (float)
    計算開始時の時刻設定.
    基本的には 0.0 で良いが,storm-surge の計算でハリケーン上陸時刻を 0.0 という基準にすると,計算開始時の時刻はマイナスになる.
    ike の examples を参照.

  • clawdata.tfinal (float)
    計算終了時刻.ただし,下にある clawdata.output_times の方が優先される.
    リストで指定した clawdata.output_times の最後の出力時刻が clawdata.tfinal より早ければ,clawdata.output_times の最後の時刻をもって計算が終わる.

  • clawdata.output_t0 (boolean)
    True なら計算開始時のファイルを出力する.

  • clawdata.num_output_times (int)
    計算開始から計算終了までに出力を行う回数.
    計算時間を指定した値で等分割した間隔で出力される.
    # Output nout frames at equally spaced times up to tfinal:
    clawdata.num_output_times = 36


  • clawdata.output_times (list of float)
    出力の回数を指定するのではなく,出力する時間をリストで指定する.
    等間隔でなくても良い.
    # Specify a list of output times.
    clawdata.output_times = [0.5, 1.0, 2.0]


  • clawdata.output_step_interval (int)
    出力の回数や時刻を指定するのではなく,出力するステップ数を指定する.
    AMR では相性がよろしくなくあまり使わないような気がする(debug 時には便利).
    # Output every iout timesteps with a total of ntot time steps:
    clawdata.output_step_interval = 1

    上記の3つの変数
    clawdata.num_output_times (int)
    clawdata.output_times  (list of float)
    clawdata.output_step_interval (int)
    はいずれか一つを指定すればよい.重複しないように.

  • clawdata.dt_variable
    clawdata.dt_variable = True # variable time steps used based on cfl_desired

  • clawdata.dt_initial

  • clawdata.dt_max

  • clawdata.cfl_desired

  • clawdata.cfl_max

  • clawdata.steps_max


amrdata

  • amrdata.amr_levels_max
    分割するレベルの数.Level 1 を一番粗いレベルとして,Level 4 までの 4種類のメッシュサイズとする場合は 4 を入れる.

  • amrdata.refinement_ratios_x
    Level k から Level k+1 となる時の, x 方向のメッシュサイズの比.\( \frac{\Delta x_{k+1}}{\Delta x_{k}} \)のこと.
    したがって,Level 1 から 4 まである場合は 3要素のリストになる.
    \( \frac{\Delta x_{2}}{\Delta x_{1}}, ~ \frac{\Delta x_{3}}{\Delta x_{2}}, ~ \frac{\Delta x_{4}}{\Delta x_{3}}, ~ \dots \) の順番で書く.

  • amrdata.refinement_ratios_y
    上に同じで,y 方向のレベル間のメッシュサイズ比. \( \frac{\Delta y_{k+1}}{\Delta y_{k}} \)のこと.

  • amrdata.refinement_ratios_t
    上に同じで,\( \frac{\Delta t_{k+1}}{\Delta t_{k}} \)のこと.
    クーラン数を考慮すると,一般的には上の2変数と同一の値にするのが無難.


例えば 2430m → 810m → 270m → 90m という分割をしたい場合は以下のようになる.

# ---------------
# AMR parameters:
# ---------------
amrdata = rundata.amrdata

# max number of refinement levels:
amrdata.amr_levels_max = 4

# List of refinement ratios at each level (length at least mxnest-1)
amrdata.refinement_ratios_x = [3,3,3]
amrdata.refinement_ratios_y = [3,3,3]
amrdata.refinement_ratios_t = [3,3,3]


  • amrdata.aux_type リストの要素の数は clawdata.num_aux の値と一致している必要がある.
# Specify type of each aux variable in amrdata.auxtype.
# This must be a list of length maux, each element of which is one of:
#   'center',  'capacity', 'xleft', or 'yleft'  (see documentation).

amrdata.aux_type = ['center','center','yleft'] # if x,y-coordinates
#amrdata.aux_type = ['center','capacity','yleft'] # if lonlat



geo_data

  • geo_data.coodinate_system
    座標系の指定.X,Y で計算するか lon, lat で計算するか.
    ここを変更する場合は併せてコリオリの設定を変更する必要がある.
    geo_data.coodinate_system = 1 # for Cartesian x-y in meters
    geo_data.coodinate_system = 2 # for latitude-longitude on the sphere


topo_data

# topotype: format style
# fname: filename of the topography
topo_data.topofiles.append([topotype, minlevel, maxlevel, t1, t2, fname])

topotypeの2はheaderが6行,7行目から1行1メッシュずつのデータ.
topotypeの3はheaderが6行,7行目からmy(nrows)行mx(ncols)列のデータ.
1は古い形式らしく,4はnetCDF.
dtopoのtopotypeも同じ.


dtopo_data

# topotype: format style
# fname: filename of the topography
dtopo_data.dtopofiles.append([topotype, minlevel, maxlevel, fname])

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2020-02-22 (Sat) 17:12:46 (34d)