CM1
このページは、CM1(Bryan's Cloud Model)に関するメモです。
Last modified: 2013/08/14
本家HOME PAGE:
http://www.mmm.ucar.edu/people/bryan/cm1/
Reference:
Bryan, G. H., and J. M. Fritsch, 2002: A Benchmark Simulation for Moist Nonhydrostatic Numerical Models. Mon. Wea. Rev., 130, 2917-2928. LINK
---
# 以下のメモは ver. 1.16 で確認したものである。
初期擾乱をカスタマイズする場合:
src/init3d.F を編集する。
・iinit - 3D initialization option:
1 = warm bubble
2 = cold pool
3 = line of warm bubbles
4 = initialization for moist benchmark
5 = cold blob
7 = Rotunno-Emanuel tropical cyclone
8 = line thermal with random perturbations
9 = forced convergence (Loftus et al 2008)
気温・湿度及び、風速の鉛直分布をカスタマイズする場合:
src/base.F を編集する。
・isnd - Base-state sounding: 1 = Dry adiabatic
2 = Dry isothermal
3 = Dry, constant dT/dz
4 = Saturated neutrally stable (BF02 sounding)
5 = Weisman-Klemp analytic sounding
7 = External file (named 'input_sounding')
(see isnd=7 section of base.F for info)
(some soundings are available at http://www.mmm.ucar.edu/people/bryan/cm1)
8 = Dry, constant d(theta)/dz
9 = Dry, constant Brunt-Vaisala frequency
10 = Saturated, constant Brunt-Vaisala frequency
11 = Saturated, constant equiv. pot. temp.
・iwnd - Base-state wind profile: (ignored if isnd=7)
0 = zero winds
1 = RKW-type profile
2 = Weisman-Klemp supercell
3 = multicell
4 = Weisman-Klemp multicell
5 = Dornbrack etal analytic profile
6 = constant wind
地形をカスタマイズする場合:
src/init_terrain.F を編集する。
・itern - Initial topography specifications:
1 = bell-shaped hill
2 = Schaer test case
3 = (case from T. Lane and J. Doyle)
4 = specified in external GrADS file
CM1で使用できる 成形済みnamelist.input, input_sounding:
http://www.mmm.ucar.edu/people/bryan/cm1/namelists/
http://www.mmm.ucar.edu/people/bryan/cm1/soundings/
注意点:
・terrain_flag を使用する場合、出力時に地形のマスクをかけるには output_interp = 1 としておく。
このとき、stat_out の出力が0だと、12998 のエラーコードで計算が止まる。
そこで、stat_out の出力を1以上に設定しておく必要がある。
Z方向のストレッチ座標にしても地形のマスクはかからない。
12998 のエラーコードは、バイナリ出力時に stat_out の出力が一つもない場合にも生じる。
・output_interp = 1 にした場合、out_s の出力が無駄なので、以下のように変更すると便利。
○ writeout.F ! 346行目
!IF(s_out.ge.1)THEN
IF(s_out.ge.1 .and. output_interp.eq.0)THEN
○ cm1.F ! 857行目
!DO n=1,nn
!if(n.eq.1)then
if(nn.eq.1)then
・・・
!ENDDO
○ solve.F ! 3672行目
!DO n=1,nn
!if(n.eq.1)then
if(nn.eq.1)then
・・・
!ENDDO
これで、output_interp = 1 を指定した時は out_i のみの出力となる。
・NetCDFのCOARDS形式の場合、60s以下の頻度で出力出来ない。
COARDS形式での出力には、writeout_nc.F 内で coards = .true. とする。
・var1~var8をnamelist内の変数として置き換えが可能。
・squall line の計算時に下層シアーを与える場合、imove = 1 として
スコールラインとともに動く座標系で計算するが、
シアーを与える以外の層で相対風速が0になるように調整する必要がある。
そうしなければ相対座標系で計算している意味がない。
・乱数で地形の凹凸を入れる場合に何も考えずにコーディングし計算すると、MPI計算領域毎に同じパターンの凹凸が出来てしまう。これを回避するために、プログラム内にMPI毎にも乱数を振り直すループを加える必要がある。
・パーセルの出力には、以下の項目を編集する必要がある。
○ init3d.F ! 351行目以降
・・・
do k=1,10 ! z 方向のパーセル数
do j=1,40 ! y 方向のパーセル数
do i=4,4 ! x 方向のパーセル数
n = n + 1
! namelist.input で総パーセル数をnparcelsで指定するので、
! 上記の i*j*k <= nparcels となるように設定しておく。
・・・
pdata(1,n) = minx + 4000.0*(i-1) ! minx から 4 km 毎にパーセルを配置
pdata(2,n) = miny + 2000.0*(j-1) ! miny から 2 km 毎にパーセルを配置
pdata(3,n) = zh(1,1,1) + 1000.0*(k-1) ! 地表 から 1 km 毎にパーセルを配置
if(dowr) write(outfile,*) n,pdata(1,n),pdata(2,n),pdata(3,n) ! 定義したパーセル位置とそのid番号を出力。
enddo
enddo
enddo
・パーセルの積分開始時刻を変更する場合は、solve.F 内の parcel_driver を呼び出す前に rtime に関する分岐条件を課す。
○ solve.F ! 1814行目以降
if(iprcl.eq.1)then
if(rtime.ge.18000.)then ! integrate parcel after 5h into the simulation
call parcel_driver(dt,xh,uh,ruh,yh,vh,rvh,zh,mh,rmh,mf, &
ua,va,wa,pdata,ploc,packet(1,1),reqs_p, &
pw1,pw2,pe1,pe2,ps1,ps2,pn1,pn2, &
nw1,nw2,ne1,ne2,sw1,sw2,se1,se2)
endif
endif
対流雲の数値実験:
http://ssrs.dpri.kyoto-u.ac.jp/~unuma/study/case/convection.html
地形性降雨の数値実験:
http://ssrs.dpri.kyoto-u.ac.jp/~unuma/study/case/ridge.html
スコールラインの数値実験:
http://ssrs.dpri.kyoto-u.ac.jp/~unuma/study/case/squall_line.html