Personal tools

Matlab samples

From MohidWiki

Revision as of 10:14, 8 July 2008 by 192.168.20.177 (talk) (Read and write netcdf files)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This article compiles some useful matlab samples to use with the MOHID converted netcdf files.

Netcdf MOHID vector plot

Sample code for the Portuguese coast application. It integrates several layers of the horizontal velocity. And plots and saves it.

file='F:\Results200606\20060601_Hydrodynamic_1.nc';
nc_dump(file)

lon = nc_varget(file,'lon')
lat = nc_varget(file,'lat')
depth = nc_varget(file,'depth')

siz = [length(lon)-1 length(lat)-1];
lon2d = zeros(siz); 
lat2d = zeros(siz);

for i=1:siz(1) 
for j=1:siz(2)
   lon2d(i,j) = lon(i); 
   lat2d(i,j) = lat(j);
end
end
 
SumVelX = 0; 
SumVelY = 0;

for k=35:42  

   Vel_xk = nc_varget(file,'Vel_X',[k 1 1],[1 116 176]);    
   SumVelX = SumVelX + Vel_xk * (depth(k+1) - depth(k)) / (depth(43) - depth(36));    

   Vel_yk = nc_varget(file,'Vel_Y',[k 1 1],[1 116 176]);    
   SumVelY = SumVelY + Vel_yk * (depth(k+1) - depth(k)) / (depth(43) - depth(36));

end
 
%plot arrows
m_proj('miller', 'lon', [min(lon) max(lon)], 'lat', [min(lat) max(lat)]);
m_quiver(lon2d(1:3:end), lat2d(1:3:end), Vel_xk(1:3:end), Vel_yk(1:3:end), 0, 'k');
hold on;
m_grid('box','fancy','linestyle','none','fontsize', 7);
m_usercoast('coastline.mat','patch', [.5 .5 .5]);       
%plot scale
m_quiver(-8.5, 37.5, .1,  0.0, 0, 'k');
htv5 = text(.015, .69, '10 cm s^{-1}');
set(htv5,'FontSize',8);

%save figure as a png file
saveas(gcf, 'MyArrowsFigure.png', 'png');

Read and write netcdf files

%Read level2 residual fields
%%%%%%%%%%%% 3D results %%%%%%%%%%%%%%%%%%%%%
file = 'BiscayResidual.nc';
u = nc_varget(file,'Vel_X');
v = nc_varget(file,'Vel_Y');
lon = nc_varget(file,'lon');
lat = nc_varget(file, 'lat');
depth = nc_varget(file, 'depth');
level = nc_varget(file, 'Lev_Z');

%Create level1 residual fields
out = 'MOHIDresidual3D.nc';
nc_create_empty(out, nc_write_mode);
nc_add_dimension(out, 'lon', length(lon));
nc_add_dimension(out, 'lat', length(lat));
nc_add_dimension(out, 'deptht', length(depth));

s_ncvars = struct ( 'Name', ...
                       {   'lon',...
                           'lat',...
                           'deptht',...
                           'u',...
                           'v',...
                           'elevation'}, ...
                  'Nctype', ...
                       {   'float',...
                           'float',...
                           'float',...
                           'float',...
                           'float',...
                           'float'}, ...
                  'Dimension', ...
                       {   {'lon'},...
                           {'lat'},...
                           {'deptht'},...
                           {'deptht' 'lat' 'lon'},...
                           {'deptht' 'lat' 'lon'},...
                           {'lat' 'lon'}}, ...
                  'Attribute', ...
                       {   struct( 'Name','units',...
                                   'Value','degrees_east' ), ...
                           struct( 'Name','units',...
                                   'Value','degrees_north' ), ...
                           struct( 'Name','units',...
                                   'Value','m' ), ...
                           struct( 'Name','units',...
                                   'Value','m s-1' ), ...
                           struct( 'Name','units',...
                                   'Value','m s-1' ), ...
                           struct( 'Name','units',...
                                   'Value','m' ), ...
                        })

for i=1:length(s_ncvars)                     
   nc_addvar(out, s_ncvars(i));
end

nc_dump(out);

See also