Search
AND
OR
Front page
|
Reload
Coastal and Oceanic Research Group at Kobe University
Navigation
Top
Members
Contact and Access
Projects
Publications
Funding
Awards
Gallery
Linux
Matlab
ROMS
Seminars
Classes
COFTEC
Internal
(authenticated)
recent(5)
2026-03-13
gallery_2025.12.30
gallery_2026.2.13
2026-03-07
Publications
2026-03-05
Gallery
2026-02-23
Awards
since Feb 2012.
edit
Total:0/Today:0
Matlab/Basic2
Start:
#br
*matlab講座その2:ROMS outputをmatlabで図化する [#d92af33d]
#br
* ROMS outputファイルを読み込む [#nd8175b4]
例えば,読み込みたいファイルを「roms_his.0124.nc」,1ファ...
$ ncdump roms_his.0124.nc | less
これでnetcdfファイルの中身を確認する.止める時は「:q」.
このファイルをmatlabで読み込むには,以下のようにする.
nc=netcdf('roms_his.0124.nc','r');
変数「nc」に読み込むべきファイル(roms_his.0124.nc)が受...
close(nc);
この2つのコマンドの間にデータを読み込む.例えば水温tempを...
nc=netcdf('roms_his.0124.nc','r');
dat=nc{'temp'}(:);
close(nc);
tempは4次元の配列(temp(1:tmax, 1:kmax, 1:jmax, 1:imax))...
tind=3;
dat=squeeze(nc{'temp'}(tind, :, :, :));
つまり,4次元配列tempのうち,レコード番号3番のみを読むこ...
size(dat)
仮に,imax=320, jmax=256, kmax=32だとすると,sizeコマンド...
>> size(dat)
>> ans = 32, 256, 320
のようになる.応用例として,レコード番号10,表層(k=kmax=...
tind=3; kind=32;
dat=squeeze(nc{'temp'}(tind, kind, :, :));
size(dat)
ans = 256, 320
となる.
** ROMS gridファイルも読み込んでおく. [#p71d3420]
図化するためには空間座標データも必要になる.手っ取り早い...
nc=netcdf('roms_grd.nc','r');
lon=nc{'lon_rho'}(:);
lat=nc{'lat_rho'}(:);
mask=nc{'mask_rho'}(:);
close(nc);
というような感じで,水平座標lon, latと,マスクを読み込む...
mask(mask==0)=NaN;
上のコマンドはmatlabっぽい処理の仕方で,配列maskの全要素...
** 2次元pcolorプロットを作成する. [#d9bd7502]
ncviewで見るようなカラーマップを作成する.上記の手順に従...
figure;
pcolor(lon, lat, dat.*mask);
hold on;
shading flat;
caxis([15 25]);
colormap(jet);
colorbar;
これできれいなSSTのマップが緯度経度座標軸を持った2次元プ...
まず,1行目「figure」でグラフを描くべきfigureウィンドウを...
3行目は上記の例では不要だが,1つのfigureウィンドウ内で複...
colormap(colormaps_rainbow)
colormap(colormaps_bright)
また,2行目のpcolor関数の引数において,
dat*mask
dat.*mask
の違いに気をつけること.前者はスカラー量同士,あるいはス...
dat./mask
dat./20
のようにしないとエラーになる.「dat.*mask」の意味するとこ...
** 相対渦度の2次元pcolorプロットを作成する. [#q33b19a4]
海洋の乱流構造を理解する上で,相対渦度(curl u)を見る必...
まずはグリッドファイルから必要な変数を読み込む.先程のSST...
nc=netcdf('roms_grd.nc','r');
lon=nc{'lon_rho'}(:);
lat=nc{'lat_rho'}(:);
mask=nc{'mask_rho'}(:);
f = nc{'f'}(:);
pm = nc{'pm'}(:);
pn = nc{'pn'}(:);
close(nc);
pmとpnはグリッド間隔dx,dyの逆数であり,渦度の計算に必要...
続いて,表層における流速の水平2成分をROMS outputファイル...
tind=12; kind=32;
nc=netcdf('roms_his.0124.nc','r');
u = squeeze( nc{'u'}(tind,kind, :, :));
v = squeeze( nc{'v'}(tind,kind, :, :));
close(nc);
渦度の計算には,関数「vorticity」を使う.
chi = vorticity(u,v,pm,pn);
これで(有次元:1/s)の相対渦度の鉛直成分(curl u)が求ま...
chi = psi2rho(chi);
さらに,fで無次元化するので,
chi = chi ./ f;
とする.ROMSがメソスケール渦を解像する程度の格子間隔(5km...
プロットはSSTと同様に以下のようにすれば良い.
figure;
pcolor(lon, lat, chi.*mask);
hold on;
shading flat;
caxis([-1 1]);
colormap(colormaps_rainbow);
xlabel('lon');
ylabel('lat');
title('normalized relative vorticity');
colorbar;
SSTと違ってchiは正負の値を取るので,カラーマップはjetやbr...
** プロットを画像ファイルとして保存する. [#y8df42cd]
このようにして作成した図面は,簡易的に表示するだけなら「j...
figure;
plot(x,y,dat);
print('-djpeg90', 'output.jpg');
のように,直近で作成したfigureウィンドウに表示されている...
print('-dpng', '-r200', 'output.png'); % PNGフォーマッ...
print('-depsc2', 'output.eps'); % EPSフォーマット...
print('-dpdf', 'output.pdf'); % PDFフォー...
など.印刷品質を考えるとEPS出力が好ましく,印刷物上でカラ...
print('-depsc2', '-cmyk', 'output.eps');
とすると良い.
PDF出力は汎用性が高くてファイルサイズもEPSよりは小さくな...
End:
#br
*matlab講座その2:ROMS outputをmatlabで図化する [#d92af33d]
#br
* ROMS outputファイルを読み込む [#nd8175b4]
例えば,読み込みたいファイルを「roms_his.0124.nc」,1ファ...
$ ncdump roms_his.0124.nc | less
これでnetcdfファイルの中身を確認する.止める時は「:q」.
このファイルをmatlabで読み込むには,以下のようにする.
nc=netcdf('roms_his.0124.nc','r');
変数「nc」に読み込むべきファイル(roms_his.0124.nc)が受...
close(nc);
この2つのコマンドの間にデータを読み込む.例えば水温tempを...
nc=netcdf('roms_his.0124.nc','r');
dat=nc{'temp'}(:);
close(nc);
tempは4次元の配列(temp(1:tmax, 1:kmax, 1:jmax, 1:imax))...
tind=3;
dat=squeeze(nc{'temp'}(tind, :, :, :));
つまり,4次元配列tempのうち,レコード番号3番のみを読むこ...
size(dat)
仮に,imax=320, jmax=256, kmax=32だとすると,sizeコマンド...
>> size(dat)
>> ans = 32, 256, 320
のようになる.応用例として,レコード番号10,表層(k=kmax=...
tind=3; kind=32;
dat=squeeze(nc{'temp'}(tind, kind, :, :));
size(dat)
ans = 256, 320
となる.
** ROMS gridファイルも読み込んでおく. [#p71d3420]
図化するためには空間座標データも必要になる.手っ取り早い...
nc=netcdf('roms_grd.nc','r');
lon=nc{'lon_rho'}(:);
lat=nc{'lat_rho'}(:);
mask=nc{'mask_rho'}(:);
close(nc);
というような感じで,水平座標lon, latと,マスクを読み込む...
mask(mask==0)=NaN;
上のコマンドはmatlabっぽい処理の仕方で,配列maskの全要素...
** 2次元pcolorプロットを作成する. [#d9bd7502]
ncviewで見るようなカラーマップを作成する.上記の手順に従...
figure;
pcolor(lon, lat, dat.*mask);
hold on;
shading flat;
caxis([15 25]);
colormap(jet);
colorbar;
これできれいなSSTのマップが緯度経度座標軸を持った2次元プ...
まず,1行目「figure」でグラフを描くべきfigureウィンドウを...
3行目は上記の例では不要だが,1つのfigureウィンドウ内で複...
colormap(colormaps_rainbow)
colormap(colormaps_bright)
また,2行目のpcolor関数の引数において,
dat*mask
dat.*mask
の違いに気をつけること.前者はスカラー量同士,あるいはス...
dat./mask
dat./20
のようにしないとエラーになる.「dat.*mask」の意味するとこ...
** 相対渦度の2次元pcolorプロットを作成する. [#q33b19a4]
海洋の乱流構造を理解する上で,相対渦度(curl u)を見る必...
まずはグリッドファイルから必要な変数を読み込む.先程のSST...
nc=netcdf('roms_grd.nc','r');
lon=nc{'lon_rho'}(:);
lat=nc{'lat_rho'}(:);
mask=nc{'mask_rho'}(:);
f = nc{'f'}(:);
pm = nc{'pm'}(:);
pn = nc{'pn'}(:);
close(nc);
pmとpnはグリッド間隔dx,dyの逆数であり,渦度の計算に必要...
続いて,表層における流速の水平2成分をROMS outputファイル...
tind=12; kind=32;
nc=netcdf('roms_his.0124.nc','r');
u = squeeze( nc{'u'}(tind,kind, :, :));
v = squeeze( nc{'v'}(tind,kind, :, :));
close(nc);
渦度の計算には,関数「vorticity」を使う.
chi = vorticity(u,v,pm,pn);
これで(有次元:1/s)の相対渦度の鉛直成分(curl u)が求ま...
chi = psi2rho(chi);
さらに,fで無次元化するので,
chi = chi ./ f;
とする.ROMSがメソスケール渦を解像する程度の格子間隔(5km...
プロットはSSTと同様に以下のようにすれば良い.
figure;
pcolor(lon, lat, chi.*mask);
hold on;
shading flat;
caxis([-1 1]);
colormap(colormaps_rainbow);
xlabel('lon');
ylabel('lat');
title('normalized relative vorticity');
colorbar;
SSTと違ってchiは正負の値を取るので,カラーマップはjetやbr...
** プロットを画像ファイルとして保存する. [#y8df42cd]
このようにして作成した図面は,簡易的に表示するだけなら「j...
figure;
plot(x,y,dat);
print('-djpeg90', 'output.jpg');
のように,直近で作成したfigureウィンドウに表示されている...
print('-dpng', '-r200', 'output.png'); % PNGフォーマッ...
print('-depsc2', 'output.eps'); % EPSフォーマット...
print('-dpdf', 'output.pdf'); % PDFフォー...
など.印刷品質を考えるとEPS出力が好ましく,印刷物上でカラ...
print('-depsc2', '-cmyk', 'output.eps');
とすると良い.
PDF出力は汎用性が高くてファイルサイズもEPSよりは小さくな...
Page: