GTOOL3形式の情報まとめ（2024年版）

# はじめに

この記事ではGTOOL3形式のファイルを(主にPythonで)扱うのに有用なオープンになっている情報をまとめる。

GTOOL3形式は沼口淳氏により策定された格子点データフォーマットである。[^3]現在では主に気候モデルMIROCの入出力に用いられており、関連する情報はMIROCグループ関係者限定のMIROC wikiにて共有されている。しかし最近ではMIROCと結合する陸面モデルMATSIRO/ILSや、MIROCの海洋コンポーネントCOCOと結合した非静力学モデルNICAM-COCO(NICOCO)など、MIROCグループ外にも利用が広まったことから、GTOOL3のデータ解析・可視化のための公開情報の需要が高まっている。

また、近年では大気海洋のデータ解析や可視化をPythonで行うようになり、Fortranで解析しGrADSで描画することを前提に開発されたツール群では不十分であると感じられるようになった。そのため、GTOOL3を読み込むためのPythonパッケージが複数の開発者により公開されている。

そこで本記事では、2024年11月現在、GTOOL3に関して公開されているツールや記事について、私の知っている情報をまとめて整理する。GTOOL3を初めて扱う初学者の道標とすることを目的としており、個別のツールの使い方の詳細については深くは立ち入らない。

なお、gtool4はNetCDFの規約として策定されたもので、GTOOL3とは異なるデータ形式である。そのため、gtool4についてはこの記事では扱わない。

# データ形式

## 概要

GTOOL3のオリジナルのドキュメント「格子点データ解析ツールGTOOL3利用の手引き」は以下のリンクからアクセスできる。

https://www.gfd-dennou.org/library/gtool/gtool3/doc/gtool.pdf

GTOOL3のデータ形式は、ヘッダ部とデータ部の2つから構成される。ヘッダ部は16文字×64レコード、データ部は単純バイナリで格納される。

現在GTOOL3形式として流通しているデータは、ビックエンディアンとリトルエンディアンのどちらの場合もある。MIROCなどのモデル出力ではビックエンディアンが使われていることが多い。

通常はFortranのsequential accessで出力されヘッダ部とデータ部の前後にデータ長を表す4byteのmarkerが付くが、sequential accessでmarkerがつかない場合がある[^2]。これは扱うデータサイズが大きくなり、配列の長さがsequential access のmarkerの4byte整数で表現できる長さを超えることに対処するためである。



## 軸情報ファイル

GTOOL3ではヘッダ部に緯度・経度・高度軸を表す文字列が書かれているが、それがどのような数値の配列であるかは軸情報ファイルという別のGTOOL3形式のファイルに記述されている。そのため、読み出したいファイルとは別に軸情報ファイルを用意しておく必要がある。

共用の計算機などですでにある場合はそのまま利用すれば良いが、ない場合は以下のリポジトリからダウンロードすることができる。[^1]

https://github.com/wm-ytakano/gtool3-axis

利用するツールに応じて、環境変数`GTAXDIR`や`GTAX_PATH`等に軸情報ファイルのあるディレクトリを設定する必要がある。

なお、軸情報ファイルのうち`GLON*`, `GGLA*`, `GLAT*`については後述する`ngtmkax`コマンドを用いて作成することができる。

# コマンドラインツール

## gtool3ライブラリ (`gt*`コマンド)

沼口敦氏が作成したオリジナルのGTOOL3。ソースは公開されていないと思われる。

竹広真一氏がdcl-5.0に対応させたGTOOL3-DCL5が地球流体電脳倶楽部で公開されている。ライブラリの実態はほとんどオリジナルと変わっていないとのこと。

https://www.gfd-dennou.org/library/gtool/gtool3/SIGEN.htm

ドキュメントは以下にある。

https://www.gfd-dennou.org/library/gtool/gtool3/doc/SIGEN.htm

## libgtool3 (`ngt*`コマンド)

`ngt`から始まるコマンドラインツールが、GTOOL3ファイルの中身を確認したり、簡単な加工を行うのに有用である。上記`gt*`コマンドで対応されていない数値フォーマットにも対応している。

https://github.com/kjoti/libgtool3

インストールの手順は以下の通り。

```bash
# 適当なディレクトリにクローンして中に入る
git clone https://github.com/kjoti/libgtool3.git
cd libgtool3

# ビルド & インストール
./configure
make
sudo make install
```

環境変数`PATH`に/usr/local/bin、`LD_LIBRARY_PATH`に/usr/local/libが含まれているか確認し、なければ追記する。

## `ngtcf` `ncgt` (netCDF変換)

netCDFとの変換コマンドとして`ngtcf`や`ncgt`があるが、これらは上記リポジトリには含まれておらず、作成者や入手方法は把握できていないので情報求む。

https://ccsr.aori.u-tokyo.ac.jp/~obase/gtool.html

https://ccsr.aori.u-tokyo.ac.jp/~masakazu/memo/format.htm

## extgtool3 (Extra-gtool3)

山下陽介氏が作成しているGTOOL3形式のデータを扱うためのコマンドラインツール集。オリジナルの機能拡張を目的としている。

https://github.com/yyousuke/fortran_grads/tree/master/extgtool3

## TOUZA (楊座)

齋藤冬樹氏が開発しているDCLに依存しないGTOOL3のデータ加工ツール。

https://github.com/saitofuyuki/touza/tree/master

# Pythonでの読み込み

Pythonでの読み込みパッケージは、私が確認している限り3つ存在する。公開された時系列順に以下に記す。

## gtool io submodule

Kim Hyungjun氏作成。

https://github.com/hyungjun/gtool3/

解説記事はこちら。

https://qiita.com/kanonundgigue/items/82867eb43744bff53a1f

## xgtool3

橋本恵一氏作成。Xarrayで読み出せる。

https://github.com/k1bb/xgtool3/tree/main

## TOUZA/Zbt

齋藤冬樹氏が開発している、Xarray engineとして動作するGTOOL3バックエンド。

https://github.com/saitofuyuki/touza/tree/master/zbt

# 終わりに

記事の修正やリンクの追加等の要望を歓迎します。

[^3]: https://www.metsoc.jp/tenki/pdf/2001/2001_08_0577.pdf

[^1]: この軸情報ファイルは私が勝手に公開しているものです。著作権はないと思いますがグレーですし、MIROCの公式で管理して頂けるならそちらに移管したいと考えています。

[^2]:Fortranのバイナリ出力についての一般的な話は以下の記事を参考にされたい。 https://qiita.com/convection/items/f3be09bb280df030f980