0001 function write_FVCOM_river(RiverFile,RiverName,nRivnodes,time,flux,temp,salt,RiverInfo1,RiverInfo2)
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
0034
0035
0036 warning off;
0037
0038 global ftbverbose;
0039 if(ftbverbose);
0040 subname = 'write_FVCOM_river';
0041 fprintf('\n')
0042 fprintf(['begin : ' subname '\n'])
0043 end;
0044
0045
0046 if(ftbverbose);
0047 fprintf('creating river NetCDF file %s for River %s\n',RiverFile,RiverName);
0048 end;
0049
0050
0051 nTimes = prod(size(flux));
0052 if(ftbverbose);
0053 fprintf('# of river nodes: %d\n',nRivnodes);
0054 fprintf('# of time frames: %d\n',nTimes);
0055 end;
0056
0057 [year,month,day,hour,mint,sec] = mjulian2greg(time(1));
0058 if(ftbverbose); fprintf('river begins at: %d %d %d\n',year,month,day); end;
0059 [year,month,day,hour,mint,sec] = mjulian2greg(time(end));
0060 if(ftbverbose); fprintf('river ends at: %d %d %d\n',year,month,day); end;
0061
0062
0063 if(ftbverbose); fprintf('dividing flux into %d points\n',nRivnodes); end;
0064 river_flux = zeros(nTimes,nRivnodes);
0065 for i=1:nTimes
0066 river_flux(i,1:nRivnodes) = flux(i)/real(nRivnodes);
0067 end;
0068
0069
0070 for i=1:nTimes
0071 river_salt(i,1:nRivnodes) = salt(i);
0072 river_temp(i,1:nRivnodes) = temp(i);
0073 end;
0074
0075
0076 coarse_sand = 15*ones(nTimes,nRivnodes);
0077 medium_sand = 45*ones(nTimes,nRivnodes);
0078 fine_sand = 30*ones(nTimes,nRivnodes);
0079
0080
0081
0082
0083
0084
0085
0086 nc = netcdf(RiverFile, 'clobber');
0087
0088 nc.type = 'FVCOM RIVER FORCING FILE' ;
0089 nc.title = RiverInfo1;
0090 nc.info = RiverInfo2;
0091 nc.history = 'FILE CREATED using write_river_file.m' ;
0092
0093
0094 nc('rivers') = nRivnodes;
0095 nc('namelen') = 26;
0096 nc('time') = 0;
0097
0098
0099 nc{'river_names'} = ncchar('rivers', 'namelen');
0100
0101 nc{'time'} = ncfloat('time');
0102 nc{'time'}.long_name = 'time';
0103 nc{'time'}.units = 'days since 0.0';
0104 nc{'time'}.time_zone = 'none';
0105
0106 nc{'Itime'} = ncint('time');
0107 nc{'Itime'}.units = 'days since 0.0';
0108 nc{'Itime'}.time_zone = 'none';
0109
0110 nc{'Itime2'} = ncint('time');
0111 nc{'Itime2'}.units = 'msec since 00:00:00';
0112 nc{'Itime2'}.time_zone = 'none';
0113
0114 nc{'river_flux'} = ncfloat('time','rivers');
0115 nc{'river_flux'}.long_name = 'river runoff volume flux';
0116 nc{'river_flux'}.units = 'm^3s^-1';
0117
0118 nc{'river_temp'} = ncfloat('time','rivers');
0119 nc{'river_temp'}.long_name = 'river runoff temperature';
0120 nc{'river_temp'}.units = 'Celsius';
0121
0122 nc{'river_salt'} = ncfloat('time','rivers');
0123 nc{'river_salt'}.long_name = 'river runoff salinity';
0124 nc{'river_salt'}.units = 'PSU';
0125
0126
0127 for i=1:nRivnodes
0128 fname = [RiverName int2str(i)];
0129 temp = ' ';
0130 temp(1:length(fname)) = fname;
0131 nc{'river_names'}(i,:) = temp;
0132 end;
0133
0134
0135 for i=1:nTimes
0136 nc{'time'}(i) = time(i);
0137 nc{'Itime'}(i) = floor(time(i));
0138 nc{'Itime2'}(i) = mod(time(i),1)*24*3600*1000.;
0139 nc{'river_flux'}(i,1:nRivnodes) = river_flux(i,1:nRivnodes);
0140 nc{'river_temp'}(i,1:nRivnodes) = river_temp(i,1:nRivnodes);
0141 nc{'river_salt'}(i,1:nRivnodes) = river_salt(i,1:nRivnodes);
0142 nc{'coarse_sand'}(i,1:nRivnodes) = coarse_sand(i,1:nRivnodes);
0143 nc{'medium_sand'}(i,1:nRivnodes) = medium_sand(i,1:nRivnodes);
0144 nc{'fine_sand'}(i,1:nRivnodes) = fine_sand(i,1:nRivnodes);
0145 end;
0146
0147 nc = close(nc);
0148
0149
0150 if(ftbverbose);
0151 fprintf(['end : ' subname '\n'])
0152 end;
0153