Search
AND
OR
Front page
|
Reload
Coastal and Oceanic Research Group at Kobe University
Navigation
Top
Members
Contact and Access
Message
Projects
Publications
Funding
Awards
Gallery
Linux
Matlab
ROMS
Seminars
Classes
COFTEC
Internal
(authenticated)
recent(5)
2025-01-07
Seminars
2024-12-02
Publications
2024-11-28
gallery_2024.11.5
2024-11-27
gallery_2024.10.12
2024-11-26
Members
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: