地球実験

地球の実験を行う方法を説明します.

この計算には以下の物理過程を用いています.

  • 放射 (地球大気用放射)
  • 鉛直拡散 (Mellor and Yamada, 1982, レベル 2.5)
  • 積雲パラメタリゼーション: Relaxed Arakawa-Schubert スキーム (Moorthi and Suarez, 1992)
  • 診断型大規模凝結
  • 乾燥対流調節
  • バケツモデル

概要

本実験では, 海表面温度, 地面特性, 海表面密度, オゾン分布のデータが必要です. したがって, 実験の実行は以下の 4 つのステップで行います.

  • 実験ディレクトリの準備
  • 初期値の準備
  • 実験用データの準備
  • 実験の実行

実験用ディレクトリ準備

DCPAM5 の数値実験はソースツリー内部では行わず ソースツリーとは別の外部ディレクトリにて行うことを推奨いたします.

まず DCPAM5 ソースのトップディレクトリ(以下の例では dcpam5-YYYYMMDD とする)に移動してください. 以下では DCPAM5 ソースディレクトリの隣に ../dcpma5-exp/Earth-exp ディレクトリを作成し, そこで実験を行うことにします. 次のように ../dcpam5-exp/Earth-exp ディレクトリを作成し, 移動してください.

$ mkdir -p ../dcpam5-exp/Earth-exp
$ cd ../dcpam5-exp/Earth-exp

次に, このディレクトリに実行ファイルと設定ファイル置き場を作成します.

$ mkdir bin
$ mkdir conf

最後に作成したディレクトリに実行ファイルと設定ファイルをコピーします.

$ cp ../../dcpam5-YYYYMMDD/src/main/dcpam_main bin
$ cp ../../dcpam5-YYYYMMDD/src/main/dcpam_init_data  bin
$ cp ../../dcpam5-YYYYMMDD/src/main/dcpam_init_data_surface  bin
$ cp ../../dcpam5-YYYYMMDD/exp_setup_files/*.conf conf

なお, 実行ファイルと設定ファイル (NAMELIST ファイル) があれば, どのディレクトリにおいても計算を行うことができます.

初期値データファイルの作成

dcpam_init_data と init_data_E_T21L26.conf, および dcpam_init_data_surface と surface_data_E_T21.conf を用いて初期値ファイル init_T21L26.nc と surface_T21.nc を作成します.

まず dcpam_init_data で大気中の変数の初期値を作成します.

$ ./bin/dcpam_init_data -N=./conf/init_data_E_T21L26.conf

 *** MESSAGE [init_data] ***  Run: Initial data generation
 *** MESSAGE [init_data] ***  -- version = $Name:  $$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $
 *** MESSAGE [namelist_util] ***  ----- Initialization Messages -----
 *** MESSAGE [namelist_util] ***    MaxNmlArySize = 256
 *** MESSAGE [namelist_util] ***  -- version = $Name:  $$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $
 *** MESSAGE [timeset] ***  NAMELIST group "timeset_nml" is loaded from "./conf/init_data_E_T21L26.conf".
                       : 
 *** MESSAGE [initial_data] ***    Ueq     = 0.
 *** MESSAGE [initial_data] ***
 *** MESSAGE [initial_data] ***  -- version = $Name:  $$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $
 *** MESSAGE [HistoryClose] ***  "init_T21L26.nc" is closed

 ############## CPU TIME SUMMARY ################
 others                 0.120000E-01
 ------------------------------------------------
        TOTAL TIME =    0.120000E-01

次に dcpam_init_data_surface で惑星表面の変数の初期値を作成します.

$ ./bin/dcpam_init_data_surface -N=./conf/surface_data_E_T21.conf

 *** MESSAGE [sst_data] ***  Run: SST data generation
 *** MESSAGE [sst_data] ***  -- version = $Name:  $$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $
 *** MESSAGE [namelist_util] ***  ----- Initialization Messages -----
 *** MESSAGE [namelist_util] ***    MaxNmlArySize = 256
 *** MESSAGE [namelist_util] ***  -- version = $Name:  $$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $
 *** MESSAGE [timeset] ***  NAMELIST group "timeset_nml" is loaded from "surface_data_E_T21.conf".
 &TIMESET_NML CAL_TYPE=noleap                          ,MONTH_IN_YEAR=-1,DAY_IN_MONTH=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
                       : 
 *** MESSAGE [HistoryCreate1] ***  "surface_T21.nc" is created (origin=0. [day])
 *** MESSAGE [HistoryClose] ***  "surface_T21.nc" is closed

 ############## CPU TIME SUMMARY ################
 others                 0.800000E-02
 ------------------------------------------------
        TOTAL TIME =    0.800000E-02

実験用データの準備

実験用データとして, 海表面温度, 地面特性, 海表面密度, オゾン分布のデータを 以下に用意してあります.

上記のページから "sst_amipII_bc_clim_T021.nc", "sp_for_Earth_T021.nc", "sic_amipII_bc_clim_T021.nc", "O3_CMIP5_climatology_zonalmean_T021.nc" をダウンロードして, 実験を行うディレクトリに置いてください.

実験の実行

最後に dcpam_main, dcpam_E_T21L26.nml を用いて実験を実施します. 解像度 T21L26 で 2 日分計算を行います. リスタートデータ, 地表面リスタートデータといくつかのヒストリデータ ファイルが出力されます.

$ ./bin/dcpam_main -N=./conf/dcpam_E_T21L26.conf | tee Earth.log

初期値データ, 地表面データ, 実験設定を変更する場合には, 上記の実行に際して conf ディレクトリ内の init_data_E_T21L26.conf, dcpam_E_T21L26.conf を変更してください.

結果の可視化

2 日後における温度の東西平均分布は以下の図のようになります. ただし, コードのバージョンの違いによって, 図は必ずしも下の図と全く同じにはならないかもしれません.

この図は, Gphys を 用いて, 下の処理によって描画しています.

まず irb を起動. 

$ irb

以下のような irb のプロンプトが表示されます.

irb(main):001:0>

このプロンプトに, 以下のようにコマンドを打ちます.
左端の数字は行番号で, 打つ必要はありません.

1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('Temp.nc', 'Temp')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
6: GGraph.set_fig( 'itr'=> 2 )
7: GGraph.tone( gphys.mean('lon').cut('time'=>2) )
8: GGraph.color_bar
9: DCL.grcls

irb のプロンプトにおいて quit と打つと irb を終了することができます. 

この計算で用いている初期値は等温静止大気です. 地球大気は, 2 日間では準定常状態には達しませんので, 上記の図はスピンアップ中の状態を表しています.

また, 解析・可視化のもう少し詳しい方法についてはこちらを参照してください.

実験の実行 その 2

例えば, 1 年間の積分を実施するには, dcpam_E_T21L26.conf 内の

&timeset_nml
  ...
  EndYear           =     1,
  EndMonth          =     1,
  EndDay            =     3,
  ...
/

&timeset_nml
  ...
  EndYear           =     2,
  EndMonth          =     1,
  EndDay            =     1,
  ...
/

のように書き換えて実行します. なお, 積分期間の変更の詳細は, こちらを参照してください.

この計算は, 比較的時間がかかります. 例えば, Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz のある計算機では, 7 時間程度かかります.

この計算の終了時点での温度分布を, 上に述べた GPhys スクリプトで描いてみると, 下のようになるでしょう. ただし, コードのバージョンの違いによって, 図は必ずしも下の図と全く同じにはならないかもしれません.

参考文献


$Id: exp-Earth.rd,v 1.18 2015/02/11 14:59:26 yot Exp $