バイナリーデータ転送
TOP > プリポスト  >  データ変換  > バイナリーデータ転送
プリポストが解析ソフトと異なるマシンにある場合にバイナリーでデータ転送できるかどうかが問題になります。

<バイナリーファイルはマシン間で互換性があるのでしょうか?>

# No.1924 # 2001年9月20日 # りかぴん #
バイナリーファイルの異機種間でのうけわたしって、できるんですか?
具体的に言いますとある機種で出力されたバイナリー(リスタートファイル)を異機種で読み込んで、リスタートしたいのです。
(ちなみに、NASTRANとかDYTRANをしたいのです)
IEEEでかかれているなら、できるようなことを聞いたのですが、今までの経験では、異機種間では、うまくいかないような先入観からやったことが、ないのですが。簡単なプログラムで確認すればいいのですが、もし、日常的にバイナリーのやり取りをして、FEMのリスタート計算を実行されている方がいれば、どんなものか知りたくて、投稿しました。


# No.1929 # 2001年9月21日 # shimizuf #
整理させていただきます。バイナリファイルの互換性には、3つのレベル(障害?) があるかと存じます。
1)浮動小数の表現形式:
 最近のマシンはほとんどが、IEEEの規格に則っているはずです。
  (昔はIBM、CRAY、VAXなど、各社固有の表現があり。。。)
2)ワード内のビット順:
  エンディアンと呼ばれます。
(厳密には多ワード内のバイト順も絡みますが)ビッグ・エンディアンとリトル・エンディアンがあり、IEEE規格準拠では、あっても、マシン内の表現が異なるため互換性が無い事態がありえます。
3)ファイルを出力する部分のプログラミング言語と使用しているファイル出力:
 大概のソフトはFortranの書式無し入出力文を使用しているはずで、実装に対する規格(規約)は無いのです。(各レコードの長さをどう埋め込むかは、コンパイラメーカの勝手)

ということですが、実際にはEWS間での互換性は結構あるはずです。
(IEEE規格で、エンディアンが一致し、Fortranが互換性を考慮して作られているため) これまでの書き込みにもありましたが、SUN、SGI、IBM、HP辺りは、同一のバイナリ表現になっている可能性が大です。
DEC(アルファ)とインテル(PC)は、これらのマシンとは、
エンディアンが異なっています。(どっちがリトルだったかは忘れました。。。)
一部のPC用のプリポストでは、エンディアンの違いを自動認識して、PCでEWSのバイナリーを直接処理できるようになっているはずです。
富士通やコンパックのFortranには、OPEN文でエンディアンを指定することができますので、自作ポストでも同様の機能を実現できるはずです。


# No.1944 # 2001年9月25日 # shimizuf #
・Fortranのランダムアクセス・ファイルに関しても、実装上の規格は無いはずですが、一般には、裸で(データレコードの前後に何も付けずに)入出力されるはずです。
 OPEN文にて、RECLを指定しますので、これを頼りに、読み書きすれば良いからかと存じます。このため、Frotranのランダムアクセスで出力したファイルをCで読むことは、比較的簡単なはずです。(シーケンシャルファイルをCで読もうとすると、前後のレコード長の情報を、自前で処理する必要があるため、ちょっと面倒です。。)
・Nastranの結果ファイルについては、OUTPUT2は、間違いなくシーケンシャルファイルになっています。(バイナリーで出力した場合。ASCIIでの出力も可能ですが、これはあくまで転送用で、人間が読める形には、なりませんので。。)
 私の周りの連中は、もっぱらOUTPUT2を使用しており。。XDBなども、本質的には同様の考え方で出力されているはずです。
(編集担当:Happy 2001/12/24)





NCnetwork