Home > fvcom_prepro > example_FVCOM_tsobc.m

example_FVCOM_tsobc

PURPOSE ^

example file for dumping a file to force temperature and salinity at the open b.

SYNOPSIS ^

function example_FVCOM_tsobc(basename,time,nSiglay)

DESCRIPTION ^

 example file for dumping a file to force temperature and salinity at the open b.

 function example_FVCOM_tsobc()

 DESCRIPTION:
    Setup a sample FVCOM hydrographic open boundary forcing file

 INPUT
    Model case name
    Time
    Number of sigma layers
    Number of sigma levels

 OUTPUT:
    FVCOM hydrographic open boundary file

 Author(s):  
    Geoff Cowles (University of Massachusetts Dartmouth)
    Pierre Cazenave (Plymouth Marine Laboratory)
 
 Revision history
    2012-06-15 Added support for native MATLAB NetCDF routines. Requires
    MATLAB 2010a or higher.
    2012-07-16 Removed hard-coded nSiglay and nSiglev and instead moved to
    arguments list.
 
==============================================================================

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function example_FVCOM_tsobc(basename,time,nSiglay)
0002 % example file for dumping a file to force temperature and salinity at the open b.
0003 %
0004 % function example_FVCOM_tsobc()
0005 %
0006 % DESCRIPTION:
0007 %    Setup a sample FVCOM hydrographic open boundary forcing file
0008 %
0009 % INPUT
0010 %    Model case name
0011 %    Time
0012 %    Number of sigma layers
0013 %    Number of sigma levels
0014 %
0015 % OUTPUT:
0016 %    FVCOM hydrographic open boundary file
0017 %
0018 % Author(s):
0019 %    Geoff Cowles (University of Massachusetts Dartmouth)
0020 %    Pierre Cazenave (Plymouth Marine Laboratory)
0021 %
0022 % Revision history
0023 %    2012-06-15 Added support for native MATLAB NetCDF routines. Requires
0024 %    MATLAB 2010a or higher.
0025 %    2012-07-16 Removed hard-coded nSiglay and nSiglev and instead moved to
0026 %    arguments list.
0027 %
0028 %==============================================================================
0029 
0030 %warning off;
0031 
0032 
0033 subname = 'example_FVCOM_tsobc';
0034 global ftbverbose;
0035 if(ftbverbose);
0036   fprintf('\n')
0037   fprintf(['begin : ' subname '\n'])
0038 end;
0039 
0040 fvcom_bathy = [basename, '_dep.dat'];
0041 fvcom_obc   = [basename, '_obc.dat'];
0042 tsOBCFile = [basename, '_tsobc.nc'];
0043 
0044 %------------------------------------------------------------------------------
0045 % read in the FVCOM open boundary node data (need node numbers and dimension)
0046 %------------------------------------------------------------------------------
0047 fid = fopen(fvcom_obc,'r');
0048 if(fid  < 0)
0049   error(['file: ' fvcom_obc ' does not exist']);
0050 end;
0051 C = textscan(fid, '%s %s %s %s %d', 1);
0052 nObc = C{5};
0053 obc_nodes = zeros(nObc,1);
0054 if(ftbverbose); fprintf('reading obc file\n'); end;
0055 if(ftbverbose); fprintf('# nodes %d\n',nObc); end;
0056 for i=1:nObc
0057   C = textscan(fid, '%d %d %d', 1);
0058   obc_nodes(i) = C{2};
0059 end;
0060 
0061 if(ftbverbose); fprintf('obc reading complete\n');end;
0062 
0063 %------------------------------------------------------------------------------
0064 % read in the FVCOM bathymetry data (need bathymetry on open boundary nodes)
0065 %------------------------------------------------------------------------------
0066 fid = fopen(fvcom_bathy,'r');
0067 if(fid  < 0)
0068   error(['file: ' fvcom_bathy ' does not exist']);
0069 end;
0070 C = textscan(fid, '%s %s %s %d', 1);
0071 Nverts = C{4};
0072 h = zeros(Nverts,1);
0073 if(ftbverbose); fprintf('reading bathymetry file\n');end;
0074 if(ftbverbose); fprintf('# nodes %d\n',Nverts);end;
0075 for i=1:Nverts
0076   C = textscan(fid, '%f %f %f', 1);
0077   h(i) = C{3};
0078 end;
0079 if(ftbverbose); fprintf('min depth %f max depth %f\n',min(h),max(h));end;
0080 if(ftbverbose); fprintf('bathymetry reading complete\n');end;
0081 fclose(fid);
0082 
0083 %--------------------------------------------------------------
0084 % set variables for NetCDF file
0085 %--------------------------------------------------------------
0086 
0087 % extract bathymetry at open boundary nodes
0088 obc_h = h(obc_nodes);
0089 
0090 % time
0091 % time = 0:1:31.;
0092 nTimes = numel(time);
0093 
0094 % set siglev/siglay
0095 % nSiglay = 10;
0096 % nSiglev = 11;
0097 nSiglev = nSiglay + 1;
0098 inc = 1./real(nSiglay);
0099 siglev = 0:-inc:-1;
0100 for i=1:nSiglay
0101     siglay(i) = mean(siglev(i:i+1));
0102 end;
0103 
0104 
0105 % initialize temperature/salinity arrays
0106 temp = zeros(nObc,nSiglay,nTimes);
0107 salt = zeros(nObc,nSiglay,nTimes);
0108 
0109 % set variable temperature and salinity
0110 % for i=1:nTimes
0111 %     obc_temp(i) = 18. + 2.*real(i-1)/nTimes;
0112 %     obc_salt(i) = 30. - 5.*real(i-1)/nTimes;
0113 % end
0114 
0115 % set a constant temperature and salinity
0116 obc_temp = ones(1,nTimes)*13;
0117 obc_salt = ones(1,nTimes)*35;
0118 
0119 %--------------------------------------------------------------
0120 % dump to netcdf file
0121 %--------------------------------------------------------------
0122 
0123 % open boundary forcing
0124 nc = netcdf.create(tsOBCFile, 'clobber');
0125 
0126 % define global attributes
0127 netcdf.putAtt(nc,netcdf.getConstant('NC_GLOBAL'),'type','FVCOM RIVER FORCING FILE')
0128 netcdf.putAtt(nc,netcdf.getConstant('NC_GLOBAL'),'title','simple open boundary hydrography test')
0129 netcdf.putAtt(nc,netcdf.getConstant('NC_GLOBAL'),'type','FVCOM TIME SERIES OBC TS FILE')
0130 netcdf.putAtt(nc,netcdf.getConstant('NC_GLOBAL'),'history','File generated using example_FVCOM_tsobc.m from the MATLAB fvcom-toolbox')
0131 
0132 
0133 % define dimensions
0134 nobc_dimid=netcdf.defDim(nc,'nobc',nObc);
0135 datestrlen_dimid=netcdf.defDim(nc,'Datestrln',26);
0136 time_dimid=netcdf.defDim(nc,'time',netcdf.getConstant('NC_UNLIMITED'));
0137 siglay_dimid=netcdf.defDim(nc,'siglay',nSiglay);
0138 siglev_dimid=netcdf.defDim(nc,'siglev',nSiglev);
0139 
0140 % variables
0141 % nc{'river_names'} = ncchar('rivers', 'namelen');
0142 
0143 time_varid=netcdf.defVar(nc,'time','NC_FLOAT',time_dimid);
0144 netcdf.putAtt(nc,time_varid,'long_name','time');
0145 netcdf.putAtt(nc,time_varid,'units','days since 0.0');
0146 netcdf.putAtt(nc,time_varid,'time_zone','none');
0147 
0148 itime_varid=netcdf.defVar(nc,'Itime','NC_INT',time_dimid);
0149 netcdf.putAtt(nc,itime_varid,'units','days since 0.0');
0150 netcdf.putAtt(nc,itime_varid,'time_zone','none');
0151 
0152 itime2_varid=netcdf.defVar(nc,'Itime2','NC_INT',time_dimid);
0153 netcdf.putAtt(nc,itime2_varid,'units','msec since 00:00:00');
0154 netcdf.putAtt(nc,itime2_varid,'time_zone','none');
0155 
0156 nobc_varid=netcdf.defVar(nc,'obc_nodes','NC_INT',nobc_dimid);
0157 netcdf.putAtt(nc,nobc_varid,'long_name','Open Boundary Node Number');
0158 netcdf.putAtt(nc,nobc_varid,'grid','obc_grid');
0159 
0160 obc_h_varid=netcdf.defVar(nc,'obc_h','NC_FLOAT',nobc_dimid);
0161 netcdf.putAtt(nc,obc_h_varid,'long_name','ocean boundary depth');
0162 netcdf.putAtt(nc,obc_h_varid,'units','m');
0163 netcdf.putAtt(nc,obc_h_varid,'grid','obc_grid');
0164 
0165 obc_siglev_varid=netcdf.defVar(nc,'siglev','NC_FLOAT',siglev_dimid);
0166 netcdf.putAtt(nc,obc_siglev_varid,'long_name','ocean_sigma/general_coordinate');
0167 netcdf.putAtt(nc,obc_siglev_varid,'grid','obc_grid');
0168 
0169 obc_siglay_varid=netcdf.defVar(nc,'siglay','NC_FLOAT',siglay_dimid);
0170 netcdf.putAtt(nc,obc_siglay_varid,'long_name','ocean_sigma/general_coordinate');
0171 netcdf.putAtt(nc,obc_siglay_varid,'grid','obc_grid');
0172 
0173 obc_temp_varid=netcdf.defVar(nc,'obc_temp','NC_FLOAT',[nobc_dimid,siglay_dimid,time_dimid]);
0174 netcdf.putAtt(nc,obc_temp_varid,'long_name','sea_water_temperature');
0175 netcdf.putAtt(nc,obc_temp_varid,'units','Celcius');
0176 netcdf.putAtt(nc,obc_temp_varid,'grid','obc_grid');
0177 
0178 obc_salinity_varid=netcdf.defVar(nc,'obc_salinity','NC_FLOAT',[nobc_dimid,siglay_dimid,time_dimid]);
0179 netcdf.putAtt(nc,obc_salinity_varid,'long_name','sea_water_salinity');
0180 netcdf.putAtt(nc,obc_salinity_varid,'units','PSU');
0181 netcdf.putAtt(nc,obc_salinity_varid,'grid','obc_grid');
0182 
0183 % end definitions
0184 netcdf.endDef(nc);
0185 
0186 % write data
0187 netcdf.putVar(nc,nobc_varid,obc_nodes);
0188 netcdf.putVar(nc,obc_h_varid,obc_h);
0189 netcdf.putVar(nc,obc_siglev_varid,siglev);
0190 netcdf.putVar(nc,obc_siglay_varid,siglay);
0191 netcdf.putVar(nc,time_varid,0,numel(time),time);
0192 netcdf.putVar(nc,itime_varid,floor(time));
0193 netcdf.putVar(nc,itime2_varid,0,numel(time),mod(time,1)*24*3600*1000);
0194 
0195 % Create 3D array from three 1D arrays
0196 for i=1:nObc
0197     for j=1:nSiglay
0198         temp(i,j,:) = obc_temp;
0199         salt(i,j,:) = obc_salt;
0200     end
0201 end
0202 netcdf.putVar(nc,obc_temp_varid,temp);
0203 netcdf.putVar(nc,obc_salinity_varid,salt);
0204 
0205 % close file
0206 netcdf.close(nc);
0207 
0208 if(ftbverbose); fprintf(['end   : ' subname '\n']);end;

Generated on Thu 19-Mar-2015 12:20:56 by m2html © 2005