0001 function example_FVCOM_tsobc(basename,time,nSiglay)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
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
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
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
0085
0086
0087
0088 obc_h = h(obc_nodes);
0089
0090
0091
0092 nTimes = numel(time);
0093
0094
0095
0096
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
0106 temp = zeros(nObc,nSiglay,nTimes);
0107 salt = zeros(nObc,nSiglay,nTimes);
0108
0109
0110
0111
0112
0113
0114
0115
0116 obc_temp = ones(1,nTimes)*13;
0117 obc_salt = ones(1,nTimes)*35;
0118
0119
0120
0121
0122
0123
0124 nc = netcdf.create(tsOBCFile, 'clobber');
0125
0126
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
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
0141
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
0184 netcdf.endDef(nc);
0185
0186
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
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
0206 netcdf.close(nc);
0207
0208 if(ftbverbose); fprintf(['end : ' subname '\n']);end;