Skip to content
Snippets Groups Projects
Commit 42e92627 authored by Thomas Lambert's avatar Thomas Lambert :helicopter:
Browse files

Merge branch 'coax_LR_new' into 'main'

Add upstream velocities

See merge request rotare/rotare!3
parents 02fc3a2b 204b1295
No related branches found
No related tags found
No related merge requests found
...@@ -57,6 +57,8 @@ classdef ElemPerf < handle ...@@ -57,6 +57,8 @@ classdef ElemPerf < handle
Op (1, 1) Oper % Handle of the Operating point linked to this specific ElemPerf instance Op (1, 1) Oper % Handle of the Operating point linked to this specific ElemPerf instance
reynolds (1, :) double % Reynolds number, [-] reynolds (1, :) double % Reynolds number, [-]
upstreamVelAx (1, :) double % Upstream axial velocity above rotor disk, [m/s]
upstreamVelTg (1, :) double % Upstream tangential velocity above rotor disk, [m/s]
tgSpeed (1, :) double % Tangential speed, [m/s] tgSpeed (1, :) double % Tangential speed, [m/s]
pitch (1, :) double % Pitch (twist + collective), [rad] pitch (1, :) double % Pitch (twist + collective), [rad]
...@@ -117,6 +119,12 @@ classdef ElemPerf < handle ...@@ -117,6 +119,12 @@ classdef ElemPerf < handle
% Blade pitch % Blade pitch
self.pitch = Rot.Bl.twist + Op.coll; self.pitch = Rot.Bl.twist + Op.coll;
% Upstream axial velocity
self.upstreamVelAx = ones(size(self.pitch)) * Op.speed;
% Upstream tangential velocity
self.upstreamVelTg = zeros(size(self.pitch));
% In-plane velocities % In-plane velocities
self.tgSpeed = Op.omega .* Rot.Bl.y; self.tgSpeed = Op.omega .* Rot.Bl.y;
......
...@@ -38,7 +38,7 @@ function calcforces(self) ...@@ -38,7 +38,7 @@ function calcforces(self)
if ~isempty(self.cl) if ~isempty(self.cl)
axVel = self.Op.speed + self.indVelAx; axVel = self.upstreamVelAx + self.indVelAx;
tgVel = self.tgSpeed - self.indVelTg; tgVel = self.tgSpeed - self.indVelTg;
relVel = sqrt(axVel.^2 + tgVel.^2); relVel = sqrt(axVel.^2 + tgVel.^2);
......
...@@ -67,13 +67,13 @@ function plotveltriangles(self, nTriangles, varargin) ...@@ -67,13 +67,13 @@ function plotveltriangles(self, nTriangles, varargin)
% Velocity triangles % Velocity triangles
% FIXME: Needs adaptation for coaxial % FIXME: Needs adaptation for coaxial
vAx_up = ones(size(self.tgSpeed)) * self.Op.speed; vAx_up = ones(size(self.tgSpeed)) .* self.upstreamVelAx;
vTg_up = self.tgSpeed; vTg_up = self.tgSpeed;
vAx_rot = self.Op.speed + self.indVelAx; vAx_rot = self.upstreamVelAx + self.indVelAx;
vTg_rot = self.tgSpeed - self.indVelTg; vTg_rot = self.tgSpeed - self.indVelTg;
vAx_down = self.Op.speed + 2 * self.indVelAx; vAx_down = self.upstreamVelAx + 2 * self.indVelAx;
vTg_down = self.tgSpeed - 2 * self.indVelTg; vTg_down = self.tgSpeed - 2 * self.indVelTg;
% Determine sections to be plotted % Determine sections to be plotted
......
...@@ -100,7 +100,7 @@ classdef OperRotor < handle ...@@ -100,7 +100,7 @@ classdef OperRotor < handle
end end
function relSpeed = get.relTipSpeed(self) function relSpeed = get.relTipSpeed(self)
relSpeed = sqrt(self.tgTipSpeed^2 + self.Op.speed^2); relSpeed = sqrt(self.tgTipSpeed.^2 + self.upstreamVelAx.^2);
end end
function advRat = get.advanceRatio(self) function advRat = get.advanceRatio(self)
......
...@@ -49,7 +49,7 @@ function indvel(OpRot, Mod) ...@@ -49,7 +49,7 @@ function indvel(OpRot, Mod)
% FSOLVE_OPTS = optimoptions('fsolve', 'Display', 'none'); % FSOLVE_OPTS = optimoptions('fsolve', 'Display', 'none');
% DEFAULTS AND CONSTANTS % DEFAULTS AND CONSTANTS
vw = ones(1, OpRot.Rot.Bl.nElem) * OpRot.Op.speed + 1; % Axial vel in the slipstream vw = OpRot.ElPerf.upstreamVelAx + 1; % Axial vel in the slipstream
uw = zeros(size(vw)); % Tangential vel in the slipstream uw = zeros(size(vw)); % Tangential vel in the slipstream
% Solve iteratively % Solve iteratively
...@@ -62,7 +62,7 @@ function indvel(OpRot, Mod) ...@@ -62,7 +62,7 @@ function indvel(OpRot, Mod)
uw_old = uw; uw_old = uw;
% Compute the velocity components at the propeller disk % Compute the velocity components at the propeller disk
v = (OpRot.Op.speed + vw) / 2; v = (OpRot.ElPerf.upstreamVelAx + vw) / 2;
u = OpRot.ElPerf.tgSpeed - uw / 2; u = OpRot.ElPerf.tgSpeed - uw / 2;
% Local mass flow rate % Local mass flow rate
...@@ -93,7 +93,7 @@ function indvel(OpRot, Mod) ...@@ -93,7 +93,7 @@ function indvel(OpRot, Mod)
dFu = OpRot.Rot.nBlades * (dL .* sin(phi) + dD .* cos(phi)); dFu = OpRot.Rot.nBlades * (dL .* sin(phi) + dD .* cos(phi));
% Final system to solve for v and u % Final system to solve for v and u
vw = OpRot.Op.speed + dFa ./ dmdot ./ K_T; vw = OpRot.ElPerf.upstreamVelAx + dFa ./ dmdot ./ K_T;
uw = dFu ./ dmdot ./ K_P; uw = dFu ./ dmdot ./ K_P;
% Use relaxation to faciliate convergence of nonlinear system % Use relaxation to faciliate convergence of nonlinear system
...@@ -116,7 +116,7 @@ function indvel(OpRot, Mod) ...@@ -116,7 +116,7 @@ function indvel(OpRot, Mod)
% Update values in ElemPerf % Update values in ElemPerf
OpRot.ElPerf.inflAngle = phi; OpRot.ElPerf.inflAngle = phi;
OpRot.ElPerf.alpha = alpha; OpRot.ElPerf.alpha = alpha;
OpRot.ElPerf.indVelAx = v - OpRot.Op.speed; OpRot.ElPerf.indVelAx = v - OpRot.ElPerf.upstreamVelAx;
OpRot.ElPerf.indVelTg = uw / 2; OpRot.ElPerf.indVelTg = uw / 2;
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment