WRF / GFortran > v4.4.7とv4.9.2のバイナリ互換 > よく分からないので、混在はしないことにした


動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv

WRF(Weather Research and Forecasting Model)に関して。

WRF / WPS > v3.9セットアップ > GFortranのバグにはまる
において、GFortranのv4.4.7とv4.9.2でそれぞれ作成した実行ファイルが生成するバイナリファイルの互換性が気になっている。

unformatted形式で試してみた。

バージョンの切替 > scl使用

CentOS 6.8ではv4.4.7のGFortranがインストールできる。

一方でSoftware Collections (SCL)を用いてv4.9.2をインストールできる。
方法については以下を参照 (gcc-c++でなくgcc-gfortranとした)
http://qiita.com/phanect/items/45c67fa55d624e45367b

code

Fortran90なのかFortran77なのか分からないcodeであるが気にしない。

write_sample_170606.f90
    implicit none

    real(8) pi, napier, avogadro

    pi = 3.141592
    napier = 2.7182
    avogadro = 6.022

    open(10, file='test.bin', form='unformatted')
    write(10) pi
    write(10) napier
    write(10) avogadro
    close(10)

    stop
    end
read_sample_170606.f90
    implicit none

    real(8) pi, napier, avogadro

    open(10, file='test.bin', form='unformatted')
    read(10) pi
    read(10) napier
    read(10) avogadro
    close(10)

    write(6,*) pi
    write(6,*) napier
    write(6,*) avogadro

    stop
    end

実行

v4.4.7の環境において

$ gfortran write_sample_170606.f90
$ gfortran read_sample_170606.f90 -o read_sample_v4_4_7

v4.9.2の環境において

$ gfortran read_sample_170606.f90 -o read_sample_v4_9_2
$ ./read_sample_v4_4_7 
   3.1415920257568359     
   2.7181999683380127     
   6.0219998359680176     
$ ./read_sample_v4_9_2 
   3.1415920257568359     
   2.7181999683380127     
   6.0219998359680176     

ここまで実施して、ふと思ったのが「バージョンが変わることでバイナリ出力形式が変更されたら大問題になるだろう」ということ。
よほどの問題がない限りは変更されないという気がしてきた。

しかしながらmodファイルはバージョンによって違う。
同じバージョンのコンパイラでビルドするのが前提のような気もする。

link

バイナリ保存関連で見つけた記事。
http://naturesflyers.blogspot.jp/2015/01/fortran-unformatted-binary.html

v4.4.7とv4.9.2の混在

影響が不明のため混在をやめてv4.9.2で統一することにした。