%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Build a ROMS grid file % % Further Information: % http://www.brest.ird.fr/Roms_tools/ % % This file is part of ROMSTOOLS % % ROMSTOOLS is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published % by the Free Software Foundation; either version 2 of the License, % or (at your option) any later version. % % ROMSTOOLS is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place, Suite 330, Boston, % MA 02111-1307 USA % % Copyright (c) 2002-2006 by Pierrick Penven % e-mail:Pierrick.Penven@ird.fr % % Contributions of P. Marchesiello (IRD) and X. Capet (UCLA) % % Updated Aug-2006 by Pierrick Penven % Updated 24-Oct-2006 by Pierrick Penven (mask correction) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all close all %%%%%%%%%%%%%%%%%%%%% USERS DEFINED VARIABLES %%%%%%%%%%%%%%%%%%%%%%%% % romstools_param % %%%%%%%%%%%%%%%%%%% END USERS DEFINED VARIABLES %%%%%%%%%%%%%%%%%%%%%%% warning off isoctave=exist('octave_config_info'); % % Title % disp(' ') disp([' Making the grid: ',grdname]) disp(' ') disp([' Title: ',ROMS_title]) disp(' ') disp([' Resolution: 1/',num2str(1/dl),' deg']) % % Get the Longitude % lonr=(lonmin:dlx:lonmax); latr=(latmin:dly:latmax); % % Get the latitude for an isotropic grid % [Lonr,Latr]=meshgrid(lonr,latr); [Lonu,Lonv,Lonp]=rho2uvp(Lonr); [Latu,Latv,Latp]=rho2uvp(Latr); % % Create the grid file % disp(' ') disp(' Create the grid file...') [M,L]=size(Latp); disp([' LLm = ',num2str(L-1)]) disp([' MMm = ',num2str(M-1)]) create_grid(L,M,grdname,ROMS_title) % % Fill the grid file % disp(' ') disp(' Fill the grid file...') nc=netcdf(grdname,'write'); nc{'lat_u'}(:)=Latu; nc{'lon_u'}(:)=Lonu; nc{'lat_v'}(:)=Latv; nc{'lon_v'}(:)=Lonv; nc{'lat_rho'}(:)=Latr; nc{'lon_rho'}(:)=Lonr; nc{'lat_psi'}(:)=Latp; nc{'lon_psi'}(:)=Lonp; close(nc) % % Compute the metrics % disp(' ') disp(' Compute the metrics...') [pm,pn,dndx,dmde]=get_metrics(grdname); for j=2:M+1 pm(j,:)=pm(1,:); % for periodic conditions pn(j,:)=pn(1,:); end xr=0.*pm; yr=xr; for i=1:L xr(:,i+1)=xr(:,i)+2./(pm(:,i+1)+pm(:,i)); end for j=1:M yr(j+1,:)=yr(j,:)+2./(pn(j+1,:)+pn(j,:)); end [xu,xv,xp]=rho2uvp(xr); [yu,yv,yp]=rho2uvp(yr); dx=1./pm; dy=1./pn; dxmax=max(max(dx/1000)); dxmin=min(min(dx/1000)); dymax=max(max(dy/1000)); dymin=min(min(dy/1000)); disp(' ') disp([' Min dx=',num2str(dxmin),' km - Max dx=',num2str(dxmax),' km']) disp([' Min dy=',num2str(dymin),' km - Max dy=',num2str(dymax),' km']) % % Angle between XI-axis and the direction % to the EAST at RHO-points [radians]. % angle=get_angle(Latu,Lonu); angle=0.*angle; % % Coriolis parameter % %f=4*pi*sin(pi*Latr/180)/(24*3600); f=ones(size(Latr))*1.04510e-4; % for j=2:M+1 f(j,:)=f(1,:); % for periodic conditions end % % Fill the grid file % disp(' ') disp(' Fill the grid file...') nc=netcdf(grdname,'write'); nc{'pm'}(:)=pm; nc{'pn'}(:)=pn; nc{'dndx'}(:)=dndx; nc{'dmde'}(:)=dmde; nc{'x_u'}(:)=xu; nc{'y_u'}(:)=yu; nc{'x_v'}(:)=xv; nc{'y_v'}(:)=yv; nc{'x_rho'}(:)=xr; nc{'y_rho'}(:)=yr; nc{'x_psi'}(:)=xp; nc{'y_psi'}(:)=yp; nc{'angle'}(:)=angle; nc{'f'}(:)=f; nc{'spherical'}(:)='T'; close(nc); % % % Add topography from topofile % disp(' ') disp(' Add topography...') nc=netcdf(topofile); h=squeeze(nc{'bathy'}(1,3:7,:)); close(nc) for j=2:M+1 h(j,:)=h(1,:); % for periodic conditions end % % Compute the mask % maskr=h>0; [masku,maskv,maskp]=uvp_mask(maskr); % % Write it down % nc=netcdf(grdname,'write'); nc{'h'}(:)=h; nc{'mask_u'}(:)=masku; nc{'mask_v'}(:)=maskv; nc{'mask_psi'}(:)=maskp; nc{'mask_rho'}(:)=maskr; close(nc); % % Smooth the topography % if n_filter_deep_topo>0 nc=netcdf(grdname,'write'); h=nc{'h'}(:); maskr=nc{'mask_rho'}(:); % h=smoothgrid(h,maskr,hmin,hmax_coast,hmax,... rtarget,n_filter_deep_topo,n_filter_final); % for j=2:M+1 h(j,:)=h(1,:); % for periodic conditions end % % Write it down % disp(' ') disp(' Write it down...') nc{'h'}(:)=h; close(nc); end % % make a plot % if makeplot==1 disp(' ') disp(' Do a plot...') figure pcolor(lonr,latr,h) shading flat figure plot(lonr,-h(3,:)) end % % End % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%