0001
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
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 clear all;
0048 subname = 'create_HD_nest_bdy';
0049
0050 global ftbverbose;
0051 if(ftbverbose);
0052 fprintf('\n')
0053 fprintf(['begin : ' subname '\n'])
0054 end
0055
0056
0057
0058
0059
0060
0061 FVCOM_root = '\\hand-fs-01\maritime\Projects\Scottish Waters\Calcs\Models\WLLS\mesh10\nesting\';
0062 cd(FVCOM_root);
0063 workDir='\\hand-fs-01\maritime\Projects\Scottish Waters\Calcs\Models\WLLS\mesh10\nesting\';
0064 dataDir='\\hand-fs-01\maritime\Projects\Scottish Waters\Calcs\Models\WLLS\mesh10\mesh\';
0065
0066 AMMDir='\\uwa2v1th5j\Scottish_waters_mainbackup\Scottish_Waters\Scottish_Waters_AMM_2011\';
0067
0068
0069 disp('hard coded in time shift back 24.5 hours ');
0070 shift=-24.5/24;
0071
0072 nsiglay=10;
0073
0074 basename = 'WLLS_v3smth';
0075
0076 meshFile=[basename '_grd.dat'];
0077 bathFile=[basename '_dep.dat'];
0078 obcFile=[basename '_node_nest.dat'];
0079 bdyobcFile=[basename '_obc.dat'];
0080
0081
0082 HDFile = [basename '2011May_10fshift24p5hours_coldstart_node_nest.nc'];
0083 MyTitle=['WLLS model boundary conditions for mesh' meshFile];
0084
0085
0086
0087
0088
0089 weight_node1=0.75;
0090 weight_node2=0.25;
0091 weight_elem_val=0.5;
0092
0093 NEST_TYPE='TYPE3';
0094
0095
0096
0097
0098
0099 StartDate = [2011,05,01,1,0,0];
0100 EndDate = [2011,05,30,1,0,0];
0101
0102
0103
0104 smoothtime= 12.0;
0105 speed_init=0;
0106 salinity_init=35.0;
0107 temp_init=10.0;
0108 surfaceElevation_init=0.0;
0109
0110
0111
0112
0113
0114 meshFile = [dataDir meshFile];
0115 bathFile = [dataDir bathFile];
0116 obcFile = [workDir obcFile];
0117 bdyobcFile = [dataDir bdyobcFile];
0118 HDFile = [workDir HDFile];
0119
0120
0121
0122
0123
0124
0125 FV_Mesh = read_fvcom_mesh_lonlat(meshFile);
0126 FV_Mesh.have_bath = true;
0127 FV_Mesh.h = read_fvcom_bath(bathFile);
0128
0129
0130 FV_OBC = get_HD_nesting_nodes(obcFile);
0131 for i=1:FV_OBC.nVerts
0132 inode = FV_OBC.nnodesID(i);
0133 FV_OBC.lon(i) = FV_Mesh.lon(inode);
0134 FV_OBC.lat(i) = FV_Mesh.lat(inode);
0135 FV_OBC.h(i) = FV_Mesh.h(inode);
0136 end
0137 FV_OBC.x = FV_OBC.lon;
0138 FV_OBC.y = FV_OBC.lat;
0139 figure(1);
0140 scatter(FV_OBC.lon,FV_OBC.lat,5,FV_OBC.h);shading flat;caxis([0 100]);colorbar;
0141
0142
0143
0144
0145
0146 T = FV_Mesh.tri;
0147 X1 = FV_Mesh.lon;
0148 Y1 = FV_Mesh.lat;
0149 P = [X1,Y1];
0150 TR = triangulation(T,P);
0151 vi = FV_OBC.nnodesID;
0152 ti = vertexAttachments(TR,vi);
0153
0154 temp1 = [ti{:}]';
0155
0156 bdcell = unique(temp1,'stable');
0157 nCells = length(bdcell);
0158
0159
0160
0161 kElem = 0;
0162 for i=1:nCells
0163 ielem = bdcell(i);
0164 v(1) = FV_Mesh.tri(ielem,1);
0165 v(2) = FV_Mesh.tri(ielem,2);
0166 v(3) = FV_Mesh.tri(ielem,3);
0167 chk2 = ismember(v(1:3),vi);
0168 if(sum(chk2) == 3)
0169 kElem = kElem +1;
0170 bdElem(kElem,1) = ielem;
0171 end
0172 end
0173
0174
0175 disp('finished getting elements at boundary');
0176
0177
0178
0179
0180 nElems = length(bdElem);
0181 FV_OBC.nElems = nElems;
0182 FV_OBC.nElemID = bdElem;
0183
0184
0185 IC = incenter(TR,bdElem);
0186 lonc = IC(:,1)';
0187 latc = IC(:,2)';
0188 FV_OBC.lonc = lonc;
0189 FV_OBC.latc = latc;
0190 FV_OBC.xc = lonc;
0191 FV_OBC.yc = latc;
0192
0193
0194 nv = zeros(3,nElems);
0195 for i=1:nElems
0196 ielem = bdElem(i);
0197 nv(1,i) = FV_Mesh.tri(ielem,1);
0198 nv(2,i) = FV_Mesh.tri(ielem,2);
0199 nv(3,i) = FV_Mesh.tri(ielem,3);
0200 end
0201 FV_OBC.nv = nv;
0202 FV_OBC.tri=nv;
0203 disp('finished getting co-ordinates of element centres at boundary');
0204
0205
0206
0207
0208 FV_OBC.nsiglay=nsiglay;
0209 FV_OBC.nsiglev=nsiglay+1;
0210 inc = 1/real(nsiglay);
0211 siglev = 0:-inc:-1;
0212 siglay = nan(1, nsiglay);
0213 for i=1:nsiglay
0214 siglay(i) = mean(siglev(i:i+1));
0215 end
0216
0217 FV_OBC.siglay=siglay;
0218 FV_OBC.siglev=siglev;
0219
0220
0221
0222
0223
0224
0225
0226 FV_OBC = get_AMM_ZUV(FV_OBC,StartDate,EndDate,AMMDir);
0227
0228
0229
0230
0231
0232
0233
0234 if(0)
0235 figure(1);
0236 hold on;
0237 for j = 1:100
0238 clf;
0239 scatter(FV_OBC.lon,FV_OBC.lat,5,Hs(j,:)');
0240 pause;
0241 end
0242 end
0243
0244
0245 if(1)
0246
0247
0248
0249 timeinterval=((FV_OBC.time(2)-FV_OBC.time(1))*24.);
0250 numiters=ceil((smoothtime/timeinterval)+1);
0251 shiftiter=-1*ceil(shift.*24/timeinterval);
0252
0253 FV_OBC.daUvel(FV_OBC.daUvel==0.00)=0.00001;
0254 FV_OBC.daVvel(FV_OBC.daVvel==0.00)=0.00001;
0255 FV_OBC.u(FV_OBC.u==0.00)=0.00001;
0256 FV_OBC.v(FV_OBC.v==0.00)=0.00001;
0257 FV_OBC.surfaceElevation(FV_OBC.surfaceElevation==0.00)=0.00001;
0258 for ielem=1:FV_OBC.nElems
0259
0260 interpua=(speed_init:((FV_OBC.daUvel(ielem,numiters)-speed_init)/(numiters-1)):FV_OBC.daUvel(ielem,numiters));
0261 interpva=(speed_init:((FV_OBC.daVvel(ielem,numiters)-speed_init)/(numiters-1)):FV_OBC.daVvel(ielem,numiters));
0262
0263 FV_OBC.daUvel(ielem,1+shiftiter:numiters+shiftiter)=interpua;
0264 FV_OBC.daVvel(ielem,1+shiftiter:numiters+shiftiter)=interpva;
0265
0266 for ilay=1:FV_OBC.nsiglay
0267 interpu=(speed_init:((FV_OBC.u(ielem,ilay,numiters)-speed_init)/(numiters-1)):FV_OBC.u(ielem,ilay,numiters));
0268 interpv=(speed_init:((FV_OBC.v(ielem,ilay,numiters)-speed_init)/(numiters-1)):FV_OBC.v(ielem,ilay,numiters));
0269
0270 FV_OBC.u(ielem,ilay,1+shiftiter:numiters+shiftiter)=interpu;
0271 FV_OBC.v(ielem,ilay,1+shiftiter:numiters+shiftiter)=interpv;
0272 end
0273 end
0274
0275 for inode=1:FV_OBC.nVerts
0276
0277 interpsurfaceElevation=(surfaceElevation_init:((FV_OBC.surfaceElevation(inode,numiters)-surfaceElevation_init)/(numiters-1)):FV_OBC.surfaceElevation(inode,numiters));
0278 FV_OBC.surfaceElevation(inode,1+shiftiter:numiters+shiftiter)=interpsurfaceElevation;
0279
0280 for ilay=1:FV_OBC.nsiglay
0281 interpsalinity=(salinity_init:((FV_OBC.salinity(inode,ilay,numiters)-salinity_init)/(numiters-1)):FV_OBC.salinity(inode,ilay,numiters));
0282 interptemperature=(temp_init:((FV_OBC.temperature(inode,ilay,numiters)-temp_init)/(numiters-1)):FV_OBC.temperature(inode,ilay,numiters));
0283
0284 FV_OBC.salinity(inode,ilay,1+shiftiter:numiters+shiftiter)=interpsalinity;
0285 FV_OBC.temperature(inode,ilay,1+shiftiter:numiters+shiftiter)=interptemperature;
0286
0287
0288 end
0289 end
0290
0291 end
0292
0293
0294 figure(150);
0295 plot(squeeze(FV_OBC.surfaceElevation(23,:)));
0296 figure(151);
0297 plot(squeeze(FV_OBC.salinity(23,1,:)));
0298 figure(152);
0299 hold on;
0300 plot(squeeze(FV_OBC.daUvel(23,:)),'k-');
0301 plot(squeeze(FV_OBC.daVvel(23,:)),'r-');
0302
0303
0304 OBCnodes= get_HD_OBC(bdyobcFile);
0305 nodes_on_bdy=OBCnodes.nnodesID;
0306
0307 [I]=ismember(FV_OBC.nnodesID,nodes_on_bdy);
0308 [Jval, J]=setdiff(FV_OBC.nnodesID,nodes_on_bdy);
0309 weight_node_val=ones(FV_OBC.nVerts,1);
0310 weight_elem_val=weight_elem_val.*ones(FV_OBC.nElems,1);
0311
0312 weight_node_val(I)=weight_node_val(I).*weight_node1;
0313 weight_node_val(J)=weight_node_val(J).*weight_node2;
0314
0315 FV_OBC.weight_node_val=repmat(weight_node_val,1,numel(FV_OBC.time));
0316 FV_OBC.weight_elem_val=repmat(weight_elem_val,1,numel(FV_OBC.time));
0317
0318
0319
0320 FV_OBC.NEST_TYPE=NEST_TYPE;
0321
0322
0323
0324
0325
0326 write_nesting_bdy_file(FV_OBC, FV_OBC.time-datenum(1858,11,17,0,0,0)+shift, HDFile, MyTitle);
0327
0328 disp('net cdf wave file written');