function ROMS2SWAN_GRID(varargin); % ROMS2SWAN_GRID - Convert ROMS curvilinear grid to SWAN grid % roms2swan_grd( 'roms_grd.nc' ) % or % roms2swan_grd( x_rho, y_rho, h, mask_rho ) % %Function to convert a ROMS netCDF depth grid into a SWAN ASCII depth grid, %and create the SWAN curvilinear coordinates grid. %If the input is the name of a netCDF file (string), the function calls the variables %x_rho, y_rho, h, and mask_rho from the file; if the input is four variables, it assumes %that these are the variables x_rho, y_rho, h, and mask_rho in that order. %Files output to the ASCII filenames defined in the SWAN input file - bathymetry %goes to roms_bathy.bot, grid goes to grid_coord.grd. %Soupy Alexander, 6/11/02 %csherwood@usgs.gov 5/09/05 % These parameters are hard-wired right now idla = 4; % SWAN layout parameter hfn = 'roms_bathy.bot'; % bathy file for input to SWAN gfn = 'grid_coord.grd'; % coordinates file for input to SWAN ugfn = 'ugrid_coord.grd'; % coordinates for u points for SWAN vgfn = 'vgrid_coord.grd'; % coordinates for v points for SWAN exc_val = 9999; % exception value for masking in SWAN if nargin == 1; ncid = netcdf(varargin{1}); % x_rho = ncid{'lon_rho'}(:); % y_rho = ncid{'lat_rho'}(:); x_rho = ncid{'x_rho'}(:,:); y_rho = ncid{'y_rho'}(:,:); x_u = ncid{'x_u'}(:,:); y_u = ncid{'y_u'}(:,:); x_v = ncid{'x_v'}(:,:); y_v = ncid{'y_v'}(:,:); h = ncid{'h'}(:); mask_rho = ncid{'mask_rho'}(:); mask_u = ncid{'mask_u'}(:); mask_v = ncid{'mask_v'}(:); elseif nargin == 4; x_rho = varargin{1}; y_rho = varargin{2}; h = varargin{3}; mask_rho = varargin{4}; else error('Improper number of inputs: input netCDF file or four variables.'); end clear ncid varargin %Replace the land positions with the flag for land (defined in the SWAN %input file) land_values = find(mask_rho == 0); h(land_values) = exc_val; %TEST TEST x_rho = x_rho-x_rho(1,1); y_rho = y_rho-y_rho(1,1); %Print depths to the bathy file [m,n] = size(h); [mu,nu]= size(x_u); [mv,nv]= size(x_v); fid = fopen(hfn,'w'); for index = 1:m; for index2 = 1:n; % fprintf(fid,' '); fprintf(fid,' %8.2f\n',h(index,index2)); end % fprintf(fid,'\n'); end %fprintf(fid,'%12.6e\n',h'); %fprintf(fid,'%g\n',h'); fclose(fid); %Print the rho grid coordinates to the grid file fid2 = fopen(gfn,'w'); for index = 1:m; for index2 = 1:n; % fprintf(fid2,' '); fprintf(fid2,'%12.6e\n',x_rho(index,index2)); end % fprintf(fid,'\n'); end for index = 1:m; for index2 = 1:n; % fprintf(fid2,' '); fprintf(fid2,'%12.6e\n',y_rho(index,index2)); end % fprintf(fid,'\n'); end %fprintf(fid2,'%g\n',x_rho'); %fprintf(fid2,'%g\n',y_rho'); %fprintf(fid2,'%12.6e\n',x_rho'); %fprintf(fid2,'%12.6e\n',y_rho'); fclose(fid2); %Print the u grid coordinates to the grid file fid3 = fopen(ugfn,'w'); for index = 1:mu; for index2 = 1:nu; fprintf(fid3,'%12.6e\n',x_u(index,index2)); end end for index = 1:mu; for index2 = 1:nu; fprintf(fid3,'%12.6e\n',y_u(index,index2)); end end fclose(fid3); %Print the u grid coordinates to the grid file fid4 = fopen(vgfn,'w'); for index = 1:mv; for index2 = 1:nv; fprintf(fid4,'%12.6e\n',x_v(index,index2)); end end for index = 1:mv; for index2 = 1:nv; fprintf(fid4,'%12.6e\n',y_v(index,index2)); end end fclose(fid4); fprintf(1,'grid_coord.grd and roms_bathy.bot created by roms2swan_grid.m\n'); fprintf(1,'also created ugrid_coord.grd and v_grid_cooord.grd\n'); fprintf(1,'Suggested SWAN input commands:\n') fprintf(1,'CGRID CURV %d %d CIRCLE 35 .05 .4 20\n',n-1,m-1) fprintf(1,'READ COORD 1.0 ''%s'' %d 0 0 FREE\n',gfn,idla); if(any(land_values)), fprintf(1,'INP BOT CURV 0 0 %d %d EXCEPTION %g\n',n-1,m-1,exc_val) else fprintf(1,'INP BOT CURV 0 0 %d %d\n',n-1,m-1) end fprintf(1,'READINP BOTTOM 1.0 ''%s'' %d\n\n',hfn,idla) fprintf(1,'INP VX CURV 0 0 %d %d\n',nu-1,mu-1); fprintf(1,'INP VY CURV 0 0 %d %d\n',nv-1,mv-1);