- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
#br
* ROMSの図化(簡易版) [#l1fcca2c]
#br
計算結果の簡単なチェックには「ncview」が便利です.論文やプレゼンに使用する図面や動画は「Matlab」で作ります.
#br
* ncviewを使う [#i874d64d]
#br
$ ncview SCB2_avg.1770.nc
あるいは連番ファイルを一気に表示させることもできる.
$ ncview SCB2_avg.*.nc # ディレクトリ内にある全ファイル
$ ncview SCB2_avg.0???.nc # 0000から0999まで
$ ncview SCB2_avg.0[0-2]??.nc # 0000から0299まで
-ncviewで好きな画像を表示させる。
--「Print」をクリック、DeviceをFileにして.ps形式(postscript)で保存。
$ convert filename.ps filename.jpg
などを使って好きなファイルフォーマットに変換する。
編集したい場合は、例えば「gimp」を使う。
$ gimp filename.jpg
#br
** ncviewを使って簡易アニメーションを作成する. [#a5bdc477]
#br
$ ncview -frames roms_out.????.nc
ncviewでアニメーションを表示させると,frames.00000.ppmのような連番ファイルが作成される.
$ ffmpeg -threads 8 -r 10 -i frame.%05d.ppm -sameq output.avi
これで「output.avi」というムービーファイルが作成される.このとき,-threads 8はコアの数,-r 10はフレームレート(ここでは毎秒10フレームという意味)である.ffmpegのオプションはググれば色々出てくるので,出力フォーマットを変更したりしてみても良い.
''注意点'':出力フォーマットによってはWindowsやMacでは再生できない可能性もあるので,必ず使用したいマシン上で再生テストを行うこと.
Windows XP + Powerpoint 2000の組み合わせでは、以下のようにもう一度動画を変換すると、スライドショーでうまく再生できるようである。
$ mencoder input.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=5000000 -vf scale=640:640 -o output.avi
あるいは,
$ mencoder input.avi -o output.wmv -of lavf -oac lavc -ovc lavc -lavcopts vcodec=wmv2:vbitrate=5000
ここで、input.aviは入力ファイル(ncviewからの.ppmファイルをつなげて作った無圧縮.aviファイル)、 output.aviは変換後の動画、msmpeg4v2はWindows標準のmp4フォーマット、vbitrateはビデオのビットレートで、 5000000ならば5M bit/secという意味。この数字を大きくすれば圧縮率の低いきれいな動画が作成され、小さくすればファイルサイズ重視の動画ファイルが作成される。 scale=640:640は変換後の動画のピクセル数で、8の倍数でなければいけない。もしオリジナルの動画のピクセル数が8の倍数でなければ、なるべくもとのピクセル数に近い数にするか、アスペクト比を変えないように適宜調整する。この方法はMatlabで作成した動画ファイルにも適用可能。
なお,上記はmencoderのオプションのほんの一例であるので,色々と調べて綺麗な動画を作りましょう.
再生する時は,例えば「mplayer」を使う.
$ mplayer -loop 0 output.avi
--「-loop 0」オプションを指定すると,アニメーションが繰り返し再生される.
#br
** Matlabを使う。 [#hbecd62a]
#br
[[Matlab]]も参照のこと.
>> nc=netcdf('output_file','r'); % open netcdf file with read-only mode
>> tind=10; N=32; % tind: record number in the nc file, N: number in vertical layer (32 means surface in this case)
>> zeta=squeeze(nc{'zeta'}(tind,:,:));
>> sst=squeeze(nc{'temp'}(tind,N,:,:)); % temp(time,z,y,x) or zeta(time,y,x)
>> close(nc); % close netcdf file
>>
>> nc=netcdf('grid_file','r');
>> lon=nc{'lon_rho'}(:); % (:) means (y,x) (or get everything)
>> lat=nc{'lat_rho'}(:);
>> mask=nc{'mask_rho'}(:);
>> close(nc);
>>
>> mask(mask==0)=NaN; % make land points NaN
>> cax=[10 30]; % min & max of the data to display
>> figure; pcolor(lon,lat,sst.*mask); caxis(cax); shading flat; colorbar;
アニメーションを作成する場合は,Matlabで作成したFigureをhoge.00001.jpgのような連番ファイルで保存し,
$ ffmpeg -threads 8 -r 10 -i frame.%05d.jpg -sameq output.avi
のようにすれば動画ファイルが作成できる.
#br
** Matlabを使って連番ファイルを作る例(>>は省略) [#j0faaf9d]
#br
% start plotting
%
clear all;
close all;
%
iframe=0; % initialize counter
%
for nfile=0:12:120; % start loop on nfile
%
snum=sprintf('%04g',nfile); % convert nfile into snum (4-digit character strings. ex: nfile=10 --> snum = '0010')
roms=['/home/foo/ROMS/project1/roms_his' snum '.nc'];
nc=netcdf(roms,'r');
ntime=length(nc{'ocean_time'}(:)); % get number of records in the file
%
for tind=1:ntime; % start loop on tind
%
sfig=sprintf('%05g',iframe);
fname=['../figure/jpg/fig_' sfig '.jpg']; % define output figure name of the current counter
sst=nc{'temp'}(tind,N,:,:);
%
% you can play around the following portion
%
figure;
pcolor(lon,lat,sst.*mask);
shading flat;
caxis(cax);
colorbar;
%
print('-djpeg60',fname);
close all; % close all of figures
iframe=iframe+1; % counter increment
end; % end loop on tind
%
close(nc);
%
end; % end loop on nfile
%