Title: DCCHART NCEP/Reanalysys データ

最終改訂: 2005 年 03 月 25 日

1 目次

2 はじめに

DCCHART プロジェクトでアーカイブする NCEP/NCAR をソースとするデータおよび サンプル図表の作り方について解説する.

3 収集するデータのリスト

集めるデータは以下のとおり.

3.1 データの収集時期

NCEP では公開データにエラーが見つかった場合, 随時修正している. そのため, ダウンロードした時期により, エラーを含む割合が変わる. 以下, どのファイルがいつ頃ダウンロードされたものか記述する.

4 作業の流れ

4.1 オリジナルデータの取得

まず CDC の web サイトからオリジナルの netCDF データを取得する.

4.1.1 データ取得方法

  1. データソースの欄のURL へブラウザ経由でアクセスする.
  2. 上部の "The 6-hourly and daily data currently available on-line" というリンクへアクセスする.
  3. 欲しい物理量のリンクへアクセスし, "4 Time Daily Individual Obs" という項目の "See list" という リンクへ飛ぶ.
  4. 欲しい年のデータを選択しダウンロード.

4.2 環境変数

export RUBYLIB=/GFD_Dennou_Club/ftp/arch/dcchart/atmos_global/bin

4.3 daily データの作成

daily データは, ORG_data/ 以下のオリジナルデータを util/netcdf_cutter.rb を用いて月毎に切り出したものを指す. それぞれ 1 つのファイルに 1 月分のデータが格納されるようにしている.

4.3.1 Makefile, SIGEN ファイル雛型作成(初回のみ)

NCEP/NCAR データは 約 50 年分あるので, いちいち SIGEN ファイルや Makefile を書くのはうっとうしい. DCCHART ではある程度自動化するように 以下の作業を行う.

まず daily データを格納するディレクトリを作成する. ディレクトリ名は "物理量.daily.NCEP" とする. 以降, "newphys" という物理量のデータに関して 作業することにする.

% mkdir NEWPHYS.daily.NCEP

作成したディレクトリに移動する.

% cd NEWPHYS.daily.NCEP

ついで Makefile および SIGEN ファイルの雛型を作成する. これらの雛形ファイルを後述のスクリプトを用いて処理することで, 複数年のサブディレクトリおよび Makefile, SIGEN ファイルが生成される.

daily データ作成用 Makefile の雛型例

# Makefile for newphys.{year}.daily
#
# 2004/05/06 D. Tsukahara

## make daily-NEWPHYS nc. ##

PHYS = newphys                 # 基本的に書き換えはここだけ!
FILE = $(PHYS).
YEAR = {year}                  # 後述のスクリプトによって置換( ex. 2002 )

COMMAND_MKNC = ruby ../../util/netcdf_cutter_NCEP.rb
COMMAND_RMAT = ruby ../../bin/gtattr.rb
ATTR1 = actual_range
ATTR2 = valid_range

all: nc attr

nc:
        $(COMMAND_MKNC) ../../ORG_data.NCEP/$(FILE)$(YEAR).nc
attr:
        $(COMMAND_RMAT) --delete $(ATTR1) $(PHYS) ./*.nc
        $(COMMAND_RMAT) --delete $(ATTR2) $(PHYS) ./*.nc                

daily データサブディレクトリ用 SIGEN ファイル の雛型例

Subject: NCEP Re-Analysys 新物理量(NEWPHYS) {year} 年 6-hourly
Maintainer: 作業者名
Update: 編集日
Description: relative:ORG_data に格納される NCEP のオリジナルデータを月ごとに分割した
             データ. 詳細は relative:../ORG_data.SIGEN  および  relative:../../NCEP.SIGEN
             参照のこと.

履歴
        編集日 作業者名

上記の雛形ファイルをそれぞれ NEWPHYS.NCEP.Makefile.hinagata, NEWPHYS.NCEP.SIGEN.hinagata という名前で保存する.

4.3.2 サブディレクトリ, Makefile, SIGEN ファイル生成

上記の雛形ファイルを元にサブディレクトリ, Makefile, SIGEN ファイルを生成するには util/make-dcchart-dir.rb を用いる. 1980 年から 1999 年までのサブディレクトリ, Makefile, SIGEN ファイルをカレントディレクトリ以下に 生成したい場合,

% ls ./
NEWPHYS.daily.NCEP.Makefile.hinagata
NEWPHYS.daily.NCEP.SIGEN.hinagata
% make-dcchart-dir.rb --range 1980:1999 ./

とする. すると

% ls ./                     

NEWPHYS.1980.daily.NCEP        NEWPHYS.1990.daily.NCEP       
NEWPHYS.1980.daily.NCEP.SIGEN  NEWPHYS.1990.daily.NCEP.SIGEN
NEWPHYS.1981.daily.NCEP        NEWPHYS.1991.daily.NCEP      
NEWPHYS.1981.daily.NCEP.SIGEN  NEWPHYS.1991.daily.NCEP.SIGEN
NEWPHYS.1982.daily.NCEP        NEWPHYS.1992.daily.NCEP      
NEWPHYS.1982.daily.NCEP.SIGEN  NEWPHYS.1992.daily.NCEP.SIGEN
NEWPHYS.1983.daily.NCEP        NEWPHYS.1993.daily.NCEP
NEWPHYS.1983.daily.NCEP.SIGEN  NEWPHYS.1993.daily.NCEP.SIGEN      
NEWPHYS.1984.daily.NCEP        NEWPHYS.1994.daily.NCEP      
NEWPHYS.1984.daily.NCEP.SIGEN  NEWPHYS.1994.daily.NCEP.SIGEN
NEWPHYS.1985.daily.NCEP        NEWPHYS.1995.daily.NCEP      
NEWPHYS.1985.daily.NCEP.SIGEN  NEWPHYS.1995.daily.NCEP.SIGEN
NEWPHYS.1986.daily.NCEP        NEWPHYS.1996.daily.NCEP      
NEWPHYS.1986.daily.NCEP.SIGEN  NEWPHYS.1996.daily.NCEP.SIGEN
NEWPHYS.1987.daily.NCEP        NEWPHYS.1997.daily.NCEP      
NEWPHYS.1987.daily.NCEP.SIGEN  NEWPHYS.1997.daily.NCEP.SIGEN
NEWPHYS.1988.daily.NCEP        NEWPHYS.1998.daily.NCEP      
NEWPHYS.1988.daily.NCEP.SIGEN  NEWPHYS.1998.daily.NCEP.SIGEN
NEWPHYS.1989.daily.NCEP        NEWPHYS.1999.daily.NCEP      
NEWPHYS.1989.daily.NCEP.SIGEN  NEWPHYS.1999.daily.NCEP.SIGEN
NEWPHYS.daily.NCEP.Makefile.hinagata
NEWPHYS.daily.NCEP.SIGEN.hinagata

サブディレクトリ名はカレントディレクトリから判断, 名づけられる. 既にディレクトリや Makefile, SIGEN ファイルが存在する場合は何もしない.

4.3.3 nc ファイル生成

daily ファイルを作成する場合は,各ディレクトリにおいて,

% make

を実行することで, 作成される. ファイルを消去する際は

% make ncclean

とすること. 詳細は netcdf_cutter.rb, Makefile を参照のこと.

複数年分のファイルを一度に生成したい場合がほとんどである. カレントディレクトリに以下のような Makefile を用意しておくとよいだろう.

# Makefile for newphys.daily
#
# 2004/04/28 D. Tsukahara

## make daily-NEWPHYS nc. ##

PHYS = NEWPHYS

all: 1940 1950 1960 1970 1980 1990 2000

200?: 2000 2001 2002 2003

199?: 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999

198?: 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989

197?: 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979

196?: 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969

195?: 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959

194?: 1948 1949

## each year
2003:
        cd $(PHYS).$@.daily.NCEP; make; cd ../
2002:
        cd $(PHYS).$@.daily.NCEP; make; cd ../
2001:
        cd $(PHYS).$@.daily.NCEP; make; cd ../
...

4.4 monthly-mean データの作成

4.4.1 Makefile, SIGEN ファイル雛型作成(初回のみ)

4.4.2 サブディレクトリ, Makefile, SIGEN ファイル生成

4.4.3 nc ファイル生成

monthly-mean データは, daily データに util/mkmean-nc_NCEP.rb を作用させて生成される. データ作成のコマンドは各ディレクトリにおいてある Makefile に記述されている. monthly-mean ファイルを作成する場合は,各ディレクトリにおいて,

% make ncall

を実行することで, 作成される. サンプル図表の絵は

% make fig

で生成される. 単に make した場合は, ファイルと絵の双方が生成される. 詳細は mkmean-nc.rb, Makefile を参照のこと.

4.4.4 2 回目以降

4.5 物理量の計算

オリジナルデータより計算される量は, bin/gt*.rb により計算される. どの物理量がどのスクリプトによって生成されたかは, 各ディレクトリ以下の Makefile を参照のこと.

5 注意事項

5.1 valid_range, actual_range (2004/10/04)

NCEP の actual_range, valid_range はパックを展開した後に上記範囲を比較するように 定められている.

しかし, ruby-netcdf の仕様は パックしたまま(展開前に) 値を比べ有効値か否かを判断 する仕様になっている. よってほとんどの場合, 全てのグリッドが欠損値扱いされてしま う.

これを防ぐため, NCEP 用の作業メソッドを定義している libgphys-n.rb では, scaling _get の仕様を変え, 展開済みのデータにおいて値を比較するようにしてある.

ちなみに NCEP の valid_range, actual_range は非常に狭い範囲を定義しているので, いずれにしろ gtool4 規約化するときは属性を削除している.

5.2 対欠損値用メソッドの再定義 (2004/10/12)

GPhys のバージョンを 0.3.3 以上から, 外部から GPhys 内部における NetCDFVar 等のメソッドを変更することが出来ないようである. DCCHART 関連の作業で困るのは get_with_miss_and_scaling を NCEP のデータ方式に変更できないこと, すなわち 欠損値を正しく扱えないことである. とりあえずの対策として仕方無しに, netcdf_miss.rb 中のメソッドを libgphys-n.rb に定義したメソッドを読むよう直接書き換えることにした. 具体的には get_with_miss_and_scaling を get_with_miss_and_scaling2 という fix したメソッドを読むようにした. 仕様のないこととはいえ, 非常に気持ち悪い. 良い解決策がないか考える.

5.3 欠損値を含んだデータの微分(2004/11/23)

欠損値を含んだデータの微分は激しく注意が必要である. それは, 定義される格子のとなりの値も参照するため, 元のデータの 欠損領域よりも広い範囲で欠損となるからである.

DCCHART で計算する EP_Flux は欠損なしの風速, 温度データから計算し, その結果に地表面マスクをかぶせることにしている. その理由は 特に中緯度において, 欠損となる格子が多くなり, その平均的状態としての 値が極めてよろしくないからである.

5.4 NCEP データのエラー???(2004/11/29)

1989/01 月の温度, 熱帯域の 200 hPa より高高度の領域で, TOVS のデータ抜けと見られるエラーが 存在するらしい. (情報元: http://www.jreap.org/results/tseq.html)

その他の物理量や年に関しても同様のエラーが存在するやも知れない. NCEP のサイトの Problem list を参照するなどして押さえておくこと.