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