3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CDOで水平高解像度なnetCDFファイルを低解像度に変換する

Last updated at Posted at 2021-11-12

はじめに

気象モデルの高解像度な(例えば、東西10240 x 南北5120 x 鉛直18くらいの)出力結果のnetCDFファイルは、見たい現象の空間スケールと比べて細かい場合は、サイズが大きくデータの取り扱いが大変であったりします。こうしたデータは水平格子を粗くして解析することがあります。

netCDFのデータの解像度変換を行う方法には色々ありますが、ここではCDO (Climate Data Operators) という便利なコマンドラインツールを使って簡単に行う方法を紹介します。

インストール

LinuxやIntel Macの場合、Anaconda(Miniconda)を使うことでインストールできます。

conda install -c conda-forge cdo

Intel macやApple Siliconでは、Homebrewを使うことでインストールできます。

brew install cdo

解像度変換

サンプルコード

水平高解像度なnetCDFファイル(in_hires.nc)を低解像度なnetCDFファイル(out_lowres.nc)へと変換する場合、シェル(Bash)で以下のコマンドを実行します。

export MAX_REMAPS=1
cdo -f nc4 -P <スレッド数> remapcon,grid_output in_hires.nc out_lowres.nc

このとき、カレントディレクトリにgrid_outputという名前の出力格子定義ファイルをあらかじめ用意しておきます。

gridtype = latlon
xsize = 360
ysize = 180
xunits = 'degree'
yunits = 'degree'
xfirst = 0.5
xinc = 1.0
yfirst = -89.5
yinc = 1.0

解説

格子の解像度変換をするオペレーターには、remapから始まる様々なものが用意されています。こうしたオペレーターには、高解像度化するのに適したものと低解像度化するのに適したものがあります。remapbilは周囲の格子からバイリニア内挿(線形内挿)をするオペレーターのため、高解像度な格子へと変換するのに向いています。一方、remapconはfirst order conservative remapping、要は物理量の面積分が変換前と変換後で等しくなるようなオペレーターのため、どちらかといえば低解像度な格子へと変換するのに向いています。

CDOにはスレッド並列のオプションがあり、-Pオプションでスレッド数を指定できます。並列化効率が良いかはオペレーターによりますが、解像度変換をするremapから始まるオペレーターは並列化と相性が良いようです。

高解像度なデータを扱うときには、メモリの使用量にも注意が必要です。陸地があるなど鉛直方向で未定義な格子数が異なっている場合、解像度変換の重み係数は再利用するためにすべての異なる層について保存されます。そのため、高解像度データを扱う場合に大量のメモリを使用してしまうことがあります。これを解決するには、異なる層の重みをメモリに保存しないように、環境変数MAX_REMAPSに1を設定します。このことは以下のページに書かれていました。

参考になるページ

CDOの公式マニュアルはこちらです。

日本語だと、以下のページが参考になります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?