From 6b93c9143105c4a4204824c60153a3d5aa04f868 Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 12 Feb 2025 22:43:02 +0100 Subject: [PATCH] [handle-value-conversion][Wind] Replaced WindCustom with Wind --- classes/@Rocket/Rocket.m | 10 ++- classes/bays/Airbrakes.m | 4 +- classes/misc/{WindCustom.m => Wind.m} | 20 +++--- classes/misc/WindMatlab.m | 62 ------------------- functions/miscellaneous/singleGArun.m | 2 +- functions/odeFunctions/ballistic.m | 10 +-- functions/odeFunctions/descentParachute.m | 4 +- functions/odeFunctions/descentParafoil.m | 2 +- functions/simulations/quickApogeeOnly.m | 2 +- functions/simulations/stdAscent.m | 2 +- functions/simulations/stdStability.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 2 +- .../config/windConfig.m | 16 ++--- .../config/windConfig.m | 2 +- 21 files changed, 46 insertions(+), 108 deletions(-) rename classes/misc/{WindCustom.m => Wind.m} (90%) delete mode 100644 classes/misc/WindMatlab.m diff --git a/classes/@Rocket/Rocket.m b/classes/@Rocket/Rocket.m index 0e4be4a..8da0e3c 100644 --- a/classes/@Rocket/Rocket.m +++ b/classes/@Rocket/Rocket.m @@ -177,11 +177,19 @@ classdef Rocket < Config function obj = set.parafoil(obj, value), obj = obj.updateBay('PARAFOIL', value); end function obj = set.recovery(obj, value), obj = obj.updateBay('RECOVERY', value); end function obj = set.electronics(obj, value), obj = obj.updateBay('ELECTRONICS', value); end - function obj = set.airbrakes(obj, value), obj = obj.updateBay('AIRBRAKES', value); end + function obj = set.airbrakes(obj, value) + obj = obj.updateBay('AIRBRAKES', value); + if ~isempty(obj.motor) + obj.AIRBRAKES.minTime = obj.motor.cutoffTime; + end + end function obj = set.motor(obj, value) obj = obj.updateBay('MOTOR', value); obj.time = value.time; obj.cutoffTime = value.cutoffTime; + if ~isempty(obj.airbrakes) + obj.AIRBRAKES.minTime = obj.motor.cutoffTime; + end end function obj = set.rear(obj, value), obj = obj.updateBay('REAR', value); end diff --git a/classes/bays/Airbrakes.m b/classes/bays/Airbrakes.m index 73495d5..b0e9823 100644 --- a/classes/bays/Airbrakes.m +++ b/classes/bays/Airbrakes.m @@ -39,7 +39,7 @@ classdef Airbrakes < Bay end properties(SetAccess = ?Rocket, GetAccess = private) - minTime % [s] Minimum time since engine fire at which airbrakes can open + minTime = 0 % [s] Minimum time since engine fire at which airbrakes can open end properties(SetAccess = private) @@ -63,7 +63,7 @@ classdef Airbrakes < Bay end function obj = updateTime(obj) - if isempty(obj.deltaTime) || isempty(obj.minTime), return; end + if isempty(obj.deltaTime), return; end obj.time = cumsum(obj.deltaTime) + obj.minTime; end end diff --git a/classes/misc/WindCustom.m b/classes/misc/Wind.m similarity index 90% rename from classes/misc/WindCustom.m rename to classes/misc/Wind.m index 9c927d0..109e646 100644 --- a/classes/misc/WindCustom.m +++ b/classes/misc/Wind.m @@ -1,8 +1,8 @@ -classdef WindCustom < Component -% WindCustom: Represents Skyward's custom wind model. +classdef Wind < Config +% Wind: Represents Skyward's custom wind model. % % Constructor: -% - WindCustom: Creates an instance of the WindCustom class. +% - Wind: Creates an instance of the Wind class. % Loaded config: windConfig.m > windCustom % Loaded data: - % Arguments: @@ -29,25 +29,23 @@ classdef WindCustom < Component magnitude end - properties(Access = protected) + properties(Constant, Access = protected) configName = 'windConfig.m' variableName = 'windCustom' - mission Mission end methods - function obj = WindCustom(mission, varIn) + function obj = Wind(mission, varIn) arguments(Input) mission Mission = Mission() varIn = [] end - obj@Component(mission, varIn); - obj.updateAll(); + obj@Config(mission, varIn); + obj = obj.updateAll(); end function [uw, vw, ww] = getVels(obj, z) - s = length(obj.altitudes); % reference vectors length - if s==1 + if isscalar(obj.altitudes) uw = round( - obj.magnitude * cos(obj.azimuth) * cos(obj.elevation), 6); vw = round( - obj.magnitude * sin(obj.azimuth) * cos(obj.elevation), 6); ww = round( - obj.magnitude * (-sin(obj.elevation)), 6); @@ -62,7 +60,7 @@ classdef WindCustom < Component end end - function updateAll(obj) + function obj = updateAll(obj) obj = obj.checkElevation(); s = length(obj.altitudes); diff --git a/classes/misc/WindMatlab.m b/classes/misc/WindMatlab.m deleted file mode 100644 index 393a034..0000000 --- a/classes/misc/WindMatlab.m +++ /dev/null @@ -1,62 +0,0 @@ -classdef WindMatlab < Config -% WindMatlab: Represents matlab wind variables. -% -% Constructor: -% - WindMatlab: Creates an instance of the WindMatlab class. -% Loaded config: windConfig.m > windMatlab -% Loaded data: - -% Arguments: -% - mission: Mission, mission object -% - environment: Environment, used to get launch coordinates -% - varIn: (optional) config source. Alternative to config.m -% file - - properties - DayMin % [d] Minimum Day of the launch - DayMax % [d] Maximum Day of the launch - HourMin % [h] Minimum Hour of the day - HourMax % [h] Maximum Hour of the day - ww % [m/s] Vertical wind speed - end - - properties(Access = protected) - configName = 'windConfig.m' - variableName = 'windMatlab' - mission Mission - environment Environment - end - - methods - function obj = WindMatlab(mission, environment, varIn) - arguments(Input) - mission Mission = Mission() - environment Environment = Environment() - varIn = [] - end - if nargin > 0 && nargin < 2, error('MATLAB:narginchk:notEnoughInputs', ... - 'Not enough input arguments.'); end - obj@Component(mission, varIn); - obj.environment = environment; - end - - function [uw, vw, ww] = getVels(obj, z, t, Hour, Day) - h = z + obj.environment.z0; - if h < 0 - h = 0; - end - - if nargin == 3 - if obj.HourMin == obj.HourMax - Day = obj.DayMin; - Hour = obj.HourMin; - end - end - - Seconds = Hour*3600; - % horizontal wind - [uw,vw] = atmoshwm(obj.environment.lat0, obj.environment.lon0,h,'day',Day,... - 'seconds',Seconds+t,'model','quiet','version','14'); % NED reference - ww = obj.ww; - end - end -end diff --git a/functions/miscellaneous/singleGArun.m b/functions/miscellaneous/singleGArun.m index f30e478..e2ca504 100644 --- a/functions/miscellaneous/singleGArun.m +++ b/functions/miscellaneous/singleGArun.m @@ -6,7 +6,7 @@ arguments data_opt struct rocket Rocket environment Environment - wind WindCustom + wind Wind settings Settings wrapper DataWrapper end diff --git a/functions/odeFunctions/ballistic.m b/functions/odeFunctions/ballistic.m index cce9648..0e16abd 100644 --- a/functions/odeFunctions/ballistic.m +++ b/functions/odeFunctions/ballistic.m @@ -4,7 +4,7 @@ arguments Y rocket Rocket environment Environment - wind % WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind Wind control struct = [] t0 double = 0 wrapper = [] %DataWrapper = DataWrapper.empty @@ -72,13 +72,7 @@ Q = [qw qx qy qz]; Q = Q/norm(Q); %% ADDING WIND (supposed to be added in NED axes); -switch class(wind) - case 'WindMatlab' - [uw, vw, ww] = wind.getVels(altitude, theta); - case 'WindCustom' - [uw, vw, ww] = wind.getVels(altitude); -end - +[uw, vw, ww] = wind.getVels(altitude); dcm = quatToDcm(Q); windVels = dcm*[uw; vw; ww]; diff --git a/functions/odeFunctions/descentParachute.m b/functions/odeFunctions/descentParachute.m index 6e3e77d..bbca96a 100644 --- a/functions/odeFunctions/descentParachute.m +++ b/functions/odeFunctions/descentParachute.m @@ -4,7 +4,7 @@ arguments Y rocket Rocket environment Environment - wind % WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind % Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} descentData struct wrapper = [] %DataWrapper = DataWrapper.empty Q = [1 0 0 0] @@ -61,7 +61,7 @@ local = [environment.z0, environment.temperature, ... % vector containing inpu switch class(wind) case 'WindMatlab' [uw, vw, ww] = wind.getVels(altitude, theta); - case 'WindCustom' + case 'Wind' [uw, vw, ww] = wind.getVels(altitude); end diff --git a/functions/odeFunctions/descentParafoil.m b/functions/odeFunctions/descentParafoil.m index 9deb592..ec73f32 100644 --- a/functions/odeFunctions/descentParafoil.m +++ b/functions/odeFunctions/descentParafoil.m @@ -4,7 +4,7 @@ arguments Y rocket Rocket environment Environment - wind % WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind % Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} descentData struct control struct = [] t0 double = 0 diff --git a/functions/simulations/quickApogeeOnly.m b/functions/simulations/quickApogeeOnly.m index 7978ed8..f1bd167 100644 --- a/functions/simulations/quickApogeeOnly.m +++ b/functions/simulations/quickApogeeOnly.m @@ -2,7 +2,7 @@ function [apogee, maxAccel] = quickApogeeOnly(rocket, environment, wind, setting arguments rocket Rocket environment Environment - wind WindCustom + wind Wind settings Settings wrapper = []; % DataWrapper (empty by default) end diff --git a/functions/simulations/stdAscent.m b/functions/simulations/stdAscent.m index cd89849..f0ef8d5 100644 --- a/functions/simulations/stdAscent.m +++ b/functions/simulations/stdAscent.m @@ -2,7 +2,7 @@ function [solution, ascent] = stdAscent(rocket, env, wind, settings, wrapper) arguments rocket Rocket env Environment - wind WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} settings Settings wrapper DataWrapper end diff --git a/functions/simulations/stdStability.m b/functions/simulations/stdStability.m index 7898fa5..bf03c01 100644 --- a/functions/simulations/stdStability.m +++ b/functions/simulations/stdStability.m @@ -2,7 +2,7 @@ function stabilityOut = stdStability(rocket, env, wind, settings, wrapper) arguments rocket Rocket env Environment - wind WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} settings Settings wrapper DataWrapper end diff --git a/missions/2021_Lynx_Portugal_October/config/windConfig.m b/missions/2021_Lynx_Portugal_October/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2021_Lynx_Portugal_October/config/windConfig.m +++ b/missions/2021_Lynx_Portugal_October/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2021_Lynx_Roccaraso_September/config/windConfig.m b/missions/2021_Lynx_Roccaraso_September/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2021_Lynx_Roccaraso_September/config/windConfig.m +++ b/missions/2021_Lynx_Roccaraso_September/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2022_Pyxis_Portugal_October/config/windConfig.m b/missions/2022_Pyxis_Portugal_October/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2022_Pyxis_Portugal_October/config/windConfig.m +++ b/missions/2022_Pyxis_Portugal_October/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2022_Pyxis_Roccaraso_September/config/windConfig.m b/missions/2022_Pyxis_Roccaraso_September/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2022_Pyxis_Roccaraso_September/config/windConfig.m +++ b/missions/2022_Pyxis_Roccaraso_September/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2023_Gemini_Portugal_October/config/windConfig.m b/missions/2023_Gemini_Portugal_October/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2023_Gemini_Portugal_October/config/windConfig.m +++ b/missions/2023_Gemini_Portugal_October/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2023_Gemini_Roccaraso_September/config/windConfig.m b/missions/2023_Gemini_Roccaraso_September/config/windConfig.m index bba16a9..a2b384c 100644 --- a/missions/2023_Gemini_Roccaraso_September/config/windConfig.m +++ b/missions/2023_Gemini_Roccaraso_September/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2024_Lyra_Portugal_October/config/windConfig.m b/missions/2024_Lyra_Portugal_October/config/windConfig.m index 48fd0be..28c8077 100644 --- a/missions/2024_Lyra_Portugal_October/config/windConfig.m +++ b/missions/2024_Lyra_Portugal_October/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 10 150 500 1000 1500 2000 2500 3000 3500 4000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u","g", "g", "g", "g", "g", "g", "g", "g", "g", "g"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2024_Lyra_Roccaraso_September/config/windConfig.m b/missions/2024_Lyra_Roccaraso_September/config/windConfig.m index 0f889ba..5e91be3 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/windConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 10 500 900 1200]; windCustom.magnitudeDistribution = ["u", "g", "g", "g", "g"]; % [-] Distribution type: "u" - uniform, "g" - gaussian diff --git a/missions/2025_Orion_Portugal_October/config/windConfig.m b/missions/2025_Orion_Portugal_October/config/windConfig.m index 32bd11e..ec6df23 100644 --- a/missions/2025_Orion_Portugal_October/config/windConfig.m +++ b/missions/2025_Orion_Portugal_October/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 140 500 1000 1500 2000 2500 3000 3500 4000]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["u", "g", "g", "g", "g", "g", "g", "g", "g", "g"]; % [-] Distribution type: "u" - uniform, "g" - gaussian @@ -26,10 +26,10 @@ windCustom.azimuthParameters = [270 270 270 280 270 260 260 240 240 240; % windCustom.azimuthParameters = [0 0; 359 359]; %% MATLAB WIND MODEL -windMatlab = WindMatlab(); - -windMatlab.DayMin = 105; % [d] Minimum Day of the launch -windMatlab.DayMax = 105; % [d] Maximum Day of the launch -windMatlab.HourMin = 4; % [h] Minimum Hour of the day -windMatlab.HourMax = 4; % [h] Maximum Hour of the day -windMatlab.ww = 0; % [m/s] Vertical wind speed \ No newline at end of file +% windMatlab = WindMatlab(); +% +% windMatlab.DayMin = 105; % [d] Minimum Day of the launch +% windMatlab.DayMax = 105; % [d] Maximum Day of the launch +% windMatlab.HourMin = 4; % [h] Minimum Hour of the day +% windMatlab.HourMax = 4; % [h] Maximum Hour of the day +% windMatlab.ww = 0; % [m/s] Vertical wind speed \ No newline at end of file diff --git a/missions/2025_Orion_Roccaraso_September/config/windConfig.m b/missions/2025_Orion_Roccaraso_September/config/windConfig.m index cd274da..31748d9 100644 --- a/missions/2025_Orion_Roccaraso_September/config/windConfig.m +++ b/missions/2025_Orion_Roccaraso_September/config/windConfig.m @@ -9,7 +9,7 @@ %% CUSTOM WIND MODEL -windCustom = WindCustom(); +windCustom = Wind(); windCustom.altitudes = [0 500 900 1200]; % [m] Altitudes at which a distribution change occurs windCustom.magnitudeDistribution = ["g", "g", "g", "g"]; % [-] Distribution type: "u" - uniform, "g" - gaussian -- GitLab