NetCDF
WRF
difference
mystery

NetCDF > 異なるサイズの.ncファイル | 同じncdump結果 > NetCDFのバージョン3と4の違い

動作環境1
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
NCAR Command Language Version 6.3.0
for WRF3.7.1, WPS3.7.1
  openmpi-1.8.x86_64 とその-devel
  mpich.x86_64 3.1-5.el6とその-devel
  gcc version 4.4.7 (とgfortran)
for WRF3.9, WPS3.9
  Open MPI v2.1.1
  gcc version 4.9.2 (とgfortran; devtoolset-3使用)
 NetCDF v4.4.1.1, NetCDF (Fortran API) v4.4.4
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
date (GNU coreutils) 8.4 
tmux 1.6-3.el6
動作環境2
CentOS 6.8 (64bit)
  - on VMWare workstation
  - ホスト側はCore i7-6700
for WRF3.9, WPS3.9
  Open MPI v2.1.1
  gcc version 4.9.2 (とgfortran; devtoolset-3使用)
 NetCDF v4.4.1.1, NetCDF (Fortran API) v4.4.4

症状

WRF(Weather Research and Forecasting Model)とその前処理であるWPS、およびWRFの後続処理のF***T関連。

動作環境1で動いていたのと同じ環境を動作環境2で構築中。

WRFの処理結果までは同じであることは確認済。

F***Tで生成される.ncファイルに違いがある。

原因の切り分けのために試しに以下を実施してみた。

  1. 動作環境2でビルドした実行ファイルF***Tを動作環境2で実行 (original)
  2. 動作環境1でビルドした実行ファイルF***Tを動作環境2で実行 (copied)
    • 動作環境2にコピーして実行
  3. 動作環境1でビルドした設定で、動作環境2でビルドしたファイルF***Tを動作環境3で実行 (sameConfig)

以下のファイルが得られた。

$ ls -l FXXXXXT_*
-rw-rw-r--. 1 wrf wrf 1536636 Mar 14 08:46 FXXXXXT_copied
-rw-rw-r--. 1 wrf wrf   50678 Mar 14 08:44 FXXXXXT_original
-rw-rw-r--. 1 wrf wrf 1536636 Mar 14 09:17 FXXXXXT_sameConfig

ファイルサイズが異なる。
一方で、ncdumpで出力される結果は同一となった。

copiedで使った実行ファイルは圧縮する機能が有効にでもなっているのだろうか?

動作環境1でビルドして動作環境1で実行した場合のファイルサイズも1536636 となっている。

原因

ビルドするところで以下のオプションを変えてビルドしてしまっていた。

#NETCDFVERSION=4
NETCDFVERSION=3

この設定の近辺に「Version 4は圧縮に関してずっといい」というコメントがある。

Version 3にした理由はメモに残っていない。

NetCDF-3とNetCDF-4の違いについては以下に詳しそう。
https://www.unidata.ucar.edu/blogs/developer/entry/netcdf_compression

圧縮の有無の違いはmd5sumの違いも生じさせてしまう。