HYCOM Datasets のデータを利用する

Table of Content

HYCOM Datasets

HYCOM Data Server では HYCOM による全球の海洋流動場の再現予測結果がデータセットとして公開されています.主なものは以下の2つです.ほとんど同じ名称ですが,AnalysisReanalysis が違いです.内容の違いについてはこちらに書かれています.
項目は両者とも同じで,SSH(海面水位),zonal velocity(東西方向流速),meridional velocity(南北方向流速),temperature(in-situ 水温),salinity(塩分)の5つです.

GOFS 3.1: 41-layer HYCOM + NCODA Global 1/12° Analysis

2014年7月から現在までのアーカイブです.詳細はこちらです.データの存在しない Missing days があるので要注意です.

GOFS 3.1: 41-layer HYCOM + NCODA Global 1/12° Reanalysis

1994年1月1日から2015年12月31日までの3時間毎のアーカイブです.詳細はこちらです.データの存在しない Missing days が多数あるので要注意です.

データダウンロードの方法

Reanalysisデータを例に紹介します.こちらにデータセットがアーカイブされており,年を選択してクリックするとダウンロードサイト(2015年の例)に移ります.
NetcdfSubset: をクリックすると,領域や期間を入力してダウンロードできることになっていますが,かなり絞り込まないと 500 Internal errorとなって,ダウンロードできませんでした.
一方,FTP をクリックすると,ユーザーに anonymous と入力することでダウンロードできそうなのですが,毎回エラーとなってしまいました.実は,こちらのFTPサイト にはNetCDFのアーカイブがあり,1ファイルずつダウンロードできそうですが,1ファイルあたり 1GB 前後もあり,現実的ではありません.
OPeNDAP をクリックすると,以下のような OPeNDAP Dataset Access Form が表示されます.以下では OPeNDAP でダウンロードする方法を紹介します.

NCL の準備

NCL を用いた方法を紹介します.Windows naitive版は用意されていませんが,conda でインストールするのが推奨となっていますので,Windows 10 Pro の WSL の Ubuntu 18.04LTS に Miniconda をインストールした状態を想定します.こちらのサイト に NCL の情報がまとまっています.

NCL のインストール

こちらの通り,NCL は conda でインストール可能です.安全のため,仮想環境 ncl にインストールします.

$ conda create -n ncl
$ conda activate ncl
$ conda install -c conda-forge ncl

テストします.

$ ncl -V
6.6.2

以下のテストは X11 Window が必要です.WSL の Ubuntu 18.04 の標準のターミナルは X11 Window に対応していません.そこで,MobaXterm を用意し,WSL-Ubuntu session を開きます.以下の一つ目は X11 Window に図が表示され,マウスで図をクリックする度に図が切り替わります.二つ目はNUG_multi_timeseries.png ファイルが出力されます.

$ ncl $NCARG_ROOT/lib/ncarg/nclex/gsun/gsun02n.ncl
$ ncl $NCARG_ROOT/lib/ncarg/nclex/nug/NUG_multi_timeseries.ncl

NCL では nclスクリプトを用意し ncl コマンドで実行します.

$ ncl sample.ncl

注意: こちらによれば,NCL の開発は終了となり,Python 環境へ移行するようです.

OPeNDAPのテスト

以下の内容の nclスクリプト test_opendap.ncl を用意します.これを実行して以下の様な実行結果が得られれば成功です.

;---Path to file served by OPeNDAP server at NOAA
  url      = "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis.dailyavgs/pressure/"
  filename = "air.1948.nc"

  exists = isfilepresent(url+filename)
  if(.not.exists) then
    print("OPeNDAP test unsuccessful.")
    print("Either the file doesn't exist, or NCL does")
    print("not have OPeNDAP cabilities on this system.")
  else
    f = addfile(url + filename,"r")
    vnames = getfilevarnames(f)
    print(vnames)
  end if
$ ncl test_opendap.ncl
 Copyright (C) 1995-2019 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.6.2
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.

Variable: vnames
Type: string
Total Size: 40 bytes
            5 values
Number of Dimensions: 1
Dimensions and sizes:   [5]
Coordinates:
(0)     level
(1)     lon
(2)     lat
(3)     time
(4)     air

ダウンロード対象の設定

GOFS 3.1: 41-layer HYCOM + NCODA Global 1/12° Reanalysis を例として採り上げます.このページACCESS DATA HERE アイコンをクリックするとこちらのカタログに移動します.
ダウンロード対象をクリックします.例えばこちらを選択します.
AccessOPENDAP のurlをクリックするとこちらのフォームに移動します(上図参照).
このフォームの Variables でダウンロードしたい変数にチェックを入れ,その範囲等を編集します.フォームを編集する度に2行目にある,Data URL が変化します.完了したら,一番上にある,Get ASCII ボタンをクリックし,内容を保存しておきましょう.

NCL を用いたダウンロード

ダウンロードのための ncl スクリプトを作成します.フォームの Data URL がダウンロード対象であり,このURLを以下のスクリプトにコピーします("URL"のように" "で囲みます).

;---Path to file served by OPeNDAP server at NOAA
  url      ="URL"

  exists = isfilepresent(url)
  if(.not.exists) then
    print("OPeNDAP test unsuccessful.")
    print("Either the file doesn't exist, or NCL does")
    print("not have OPeNDAP cabilities on this system.")
  else
    f = addfile(url,"r")
    vnames = getfilevarnames(f)
    print(vnames)
  end if

url はコマンドライン引数として以下のように与えることもできます.インデックスはすべての変数間で整合するようにします.例えば,time のインデックス表記はすべての変数で同一とします.

$ ncl 'url="http://tds.hycom.org/thredds/dodsC/GLBv0.08/expt_53.X/data/2015?depth[0:1:39],lat[1935:1:1940],lon[3993:1:4000],time[0:1:3],salinity[0:1:3][0:1:39][1935:1:1940][3993:1:4000]"' hycom_gofs31.ncl

実際には新たなNetCDFとして書き出す必要があります.かなり面倒なので,後日まとめます.

Python から ncl を起動する

Python(Jupyter Notebook)からnclを起動できるようにします.仮想環境 ncl がアクティベートされているものとします.

$ conda install jupyterlab matplotlib netCDF4 pandas xarray

ncl scriptが存在するディレクトリに移り,Jupyter Labを立ち上げます.

$ jupyter lab

WSLのUbuntu 18.04LTS のターミナルを MobaXterm で立ち上げている場合は,以下のようなurlがターミナルに現れますので,これをマウスで選択し,WindowsのChromeブラウザにペーストし,Enterを押すと,JupyteLabが立ち上がります.

http://localhost:8888/?token=0c9c7ca0a56a838fd0f980a3c5a0748b4a42166fdba5eba9

Jupyter Notebook の中でnclコマンドを実行します.コマンドとその引数を要素とするリストを与えます.

import subprocess
cmd = ["ncl", "test.ncl"]
subprocess.run(cmd)

ncl コマンド実行時に shell に出力される情報を表示します.

res = subprocess(cmd)
res.decode("utf-8")

!マークを先頭に付けることで,shellコマンドを実行することもできます.

!ls

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください