0001 function [V,log_text] = VMT_Rozovskii(V,A)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 log_text = {' Performing Rozovskii analysis...'};
0021
0022
0023 dy=mean(diff(V.mcsDist(1,:)));
0024 dz=mean(diff(V.mcsDepth(:,1)));
0025
0026
0027
0028 u = V.u; v = V.v;
0029 idx = isnan(u) | isnan(v);
0030 u(idx) = 0; v(idx) = 0;
0031
0032
0033 d = V.mcsDepth;
0034
0035
0036 b = V.mcsBed;
0037
0038
0039 for i = 1:size(u,2)
0040
0041 [~, array_position(i)]...
0042 = min(abs(d(:,i) - b(i)));
0043 for j = 1:array_position(i)
0044 if j == 1
0045
0046
0047 du_i(j,i) = u(j,i)*(d(j+1,i)-d(j,i))...
0048 + u(j,i)*(d(j,i)-dz/2-0);
0049 dv_i(j,i) = v(j,i)*(d(j+1,i)-d(j,i))...
0050 + v(j,i)*(d(j,i)-dz/2-0);
0051 elseif j < array_position(i)
0052 du_i(j,i) = u(j,i)*(d(j+1,i)-d(j-1,i))/2;
0053 dv_i(j,i) = v(j,i)*(d(j+1,i)-d(j-1,i))/2;
0054 elseif j == array_position(i)
0055 indx = find(u(:,i) ~= 0);
0056 if isempty(indx)
0057 du_i(:,i) = NaN;
0058 dv_i(:,i) = NaN;
0059 else
0060 l = indx(end);
0061 k = j - l;
0062
0063
0064
0065 du_i(j-k+2:size(u,2),i) = NaN;
0066 dv_i(j-k+2:size(u,2),i) = NaN;
0067 end
0068 end
0069 end
0070
0071
0072 U(i) = nansum(du_i(:,i))/d(array_position(i),i);
0073 V1(i) = nansum(dv_i(:,i))/d(array_position(i),i);
0074 U_mag(i) = sqrt(U(i)^2+V1(i)^2);
0075
0076
0077
0078 phi(i) = atan(V1(i)/U(i));
0079 phi_deg(i) = phi(i).*180/pi;
0080
0081
0082 for j = 1:array_position(i)
0083 uu(j,i) = sqrt(u(j,i)^2+v(j,i)^2);
0084 if (u(j,i) < 0) && (v(j,i) < 0)
0085 theta(j,i) = atan(v(j,i)/u(j,i)) - pi();
0086 elseif (u(j,i) < 0) && (v(j,i) > 0)
0087 theta(j,i) = atan(v(j,i)/u(j,i)) + pi();
0088 else
0089 theta(j,i) = atan(v(j,i)/u(j,i));
0090 end
0091 theta_deg(j,i) = theta(j,i).*180/pi;
0092 up(j,i) = uu(j,i)*cos(theta(j,i)-phi(i));
0093 us(j,i) = uu(j,i)*sin(theta(j,i)-phi(i));
0094 upy(j,i) = up(j,i)*sin(phi(i));
0095 upx(j,i) = up(j,i)*cos(phi(i));
0096 usy(j,i) = us(j,i)*cos(phi(i));
0097 usx(j,i) = us(j,i)*sin(phi(i));
0098 depths(j,i) = d(j,i);
0099
0100
0101 if j == 1
0102 dus_i(j,i) = us(j,i)*(d(j+1,i)-d(j,i))...
0103 + us(j,i)*(d(j,i)-dz/2-0);
0104 elseif j < array_position(i)
0105 dus_i(j,i) = us(j,i)*(d(j+1,i)-d(j-1,i))/2;
0106 end
0107
0108 q_us(i) = nansum(dus_i(:,i));
0109 end
0110
0111
0112 uu(j+1:size(u,1),i) = NaN;
0113 theta(j+1:size(u,1),i) = NaN;
0114 theta_deg(j+1:size(u,1),i) = NaN;
0115 up(j+1:size(u,1),i) = NaN;
0116 us(j+1:size(u,1),i) = NaN;
0117 upy(j+1:size(u,1),i) = NaN;
0118 usy(j+1:size(u,1),i) = NaN;
0119 upx(j+1:size(u,1),i) = NaN;
0120 usx(j+1:size(u,1),i) = NaN;
0121 depths(j+1:size(u,1),i) = NaN;
0122 dus_i(j+1:size(u,1),i) = NaN;
0123 end
0124
0125
0126
0127 if q_us > 1e-4
0128
0129 log_text = vertcat(log_text,...
0130 ' Warning: Rozovskii secondary velocities',...
0131 ' not satisfying continuity!');
0132 else
0133
0134 log_text = vertcat(log_text,...
0135 ' Computation successfull: Rozovskii',...
0136 ' secondary velocities',...
0137 ' satisfy continuity.');
0138 end
0139
0140
0141
0142
0143 XStheta = atan((V.mcsY(1,end)-V.mcsY(1,1))/(V.mcsX(1,end)-V.mcsX(1,1)));
0144 XSalpha = XStheta - pi/2;
0145 [ux, uy, uz] = vrotation(V.u,V.v,V.w,XSalpha);
0146
0147
0148
0149 V.Roz.U = U;
0150 V.Roz.V = V1;
0151 V.Roz.U_mag = U_mag;
0152 V.Roz.phi = phi;
0153 V.Roz.phi_deg = phi_deg;
0154 V.Roz.u = V.u;
0155 V.Roz.v = V.v;
0156 V.Roz.u_mag = u;
0157 V.Roz.depth = depths;
0158 V.Roz.theta = theta;
0159 V.Roz.theta_deg = theta_deg;
0160 V.Roz.up = up;
0161 V.Roz.us = us;
0162 V.Roz.upy = upy;
0163 V.Roz.usy = usy;
0164 V.Roz.upx = upx;
0165 V.Roz.usx = usx;
0166 V.Roz.ux = ux;
0167 V.Roz.uy = uy;
0168 V.Roz.uz = uz;
0169 V.Roz.alpha = XSalpha;
0170
0171
0172 log_text = vertcat(log_text, ' Rozovskii analysis complete.');
0173
0174
0175