GrADSのデータファイル(拡張子はgrdが一般的)は,4バイト実数(単精度)の バイナリ―データの羅列であり,必ずctlファイルとセットである.
grdファイルにデータは, x (経度) → y (緯度) → z (高度) → v (変数)→ t (時間) の順に入っている.
以下,説明の簡略化のため,次のように定義する.
このときgrdファイルのサイズは, 4 byte×xsz×ysz×zsz×vsz×tszとなる.
xsz=4, ysz=3, tsz=2の3次元データの場合,以下の順番でgrdファイルに データが入っている.
xsz=4, ysz=3, vsz=2, tsz=2の4次元データの場合は, 以下の順番でgrdファイルにデータが入っている.
GrADSのgrdファイルは,4バイト実数(float32)で読みこめばよい. 以下は,xytの3次元データtest.grdを読み込むプログラムです.
fid=fopen('test.grd'); data=fread(fid,'float32'); fclose(fid); data=reshape(data,xsz,ysz,tsz);
これを関数(rdgrd.m)にすると以下になります.
function data=rdgrd(filename) fid=fopen(filename); data=fread(fid,'float32'); fclose(fid); return
GrADSのgrdファイルは,4バイト実数で出力すれば良い. (ctlファイルは別途用意する必要がある.) 以下は,xytの3次元データtest.grdを書き出すプログラムである.
data=reshape(data,xsz,ysz,tsz); fid=fopen('test.grd','wb'); % b denotes binary fwrite(fid,data,'float32'); fclose(fid);
これを関数(wrtgrd.m)にすると以下になります.
function wrtgrd(data,filename) fid=fopen(filename,'wb'); fwrite(fid,data,'float32'); fclose(fid); return
さらにこの関数にエラー処理等をつけて, wrtgrd.mは完成です.
function [count]=wrtgrd(data,outname,flag) % function [count]=wrtgrd(data,outname,flag) % flag==1 write (default) % flag~=1 append if(nargin<3 || flag==1) fid=fopen(outname,'wb'); else fid=fopen(outname,'ab'); end if(fid<=0); error('disable to open'); end szdm=size(data); count=fwrite(fid,data,'float32'); fclose(fid); if count~=prod(szdm); error('disable to write'); end