From 53d5e2a233bcaacb88fb9feee22e5f219f7f89df Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 12 Feb 2025 21:22:34 +0100 Subject: [PATCH 1/8] [handle-value-conversion] replaced xCg with xcg --- aerodynamicsOptimization/mainOptimization.m | 2 +- aerodynamicsOptimization/src/OptimizationGA.m | 2 +- aerodynamicsOptimization/src/XCPcheck.m | 2 +- autoMatricesProtub/mainAutoMatProtub.m | 5 ++- common | 2 +- .../src/stochParameters/initParameter.m | 2 +- .../src/stochParameters/updateData.m | 2 +- stabilityAnalysis/mainStabilityAnalysis.m | 4 +-- utils/rocketpyData/exportRocketpy.m | 36 +++++++++---------- 9 files changed, 28 insertions(+), 29 deletions(-) diff --git a/aerodynamicsOptimization/mainOptimization.m b/aerodynamicsOptimization/mainOptimization.m index ad493fb4..c541bc76 100644 --- a/aerodynamicsOptimization/mainOptimization.m +++ b/aerodynamicsOptimization/mainOptimization.m @@ -141,7 +141,7 @@ vars.mach = 0.1:0.2:0.9; vars.alpha = [-20 -15 -10 -5 -2.5 -1 -0.1 0 0.1 1 2.5 5 10 15 20]; vars.beta = [-20 -15 -10 -5 -2.5 -1 -0.1 0 0.1 1 2.5 5 10 15 20]; vars.alt = environment.z0 + (0:1000:4000); -vars.xcg = rocket.xCg; +vars.xcg = rocket.xcg; vars.hprot = []; % vars.hprot = rocket.airbrakes.height; diff --git a/aerodynamicsOptimization/src/OptimizationGA.m b/aerodynamicsOptimization/src/OptimizationGA.m index 69a43fd8..ffd59390 100644 --- a/aerodynamicsOptimization/src/OptimizationGA.m +++ b/aerodynamicsOptimization/src/OptimizationGA.m @@ -49,7 +49,7 @@ input.fltcon.NALPHA = length(input.fltcon.ALPHA); % [-] Number of alphas input.fltcon.NMACH = length(input.fltcon.MACH); %%% aerodynmics coefficient - full -input.refq.XCG = rocket.xCg([1, length(rocket.xCg)]); +input.refq.XCG = rocket.xcg([1, length(rocket.xcg)]); % state.xcgTime = state.xcgTime([1, end]); input.flagXCP = false; [coeff] = dissileMatcom(input); diff --git a/aerodynamicsOptimization/src/XCPcheck.m b/aerodynamicsOptimization/src/XCPcheck.m index a07bb62d..da16982b 100644 --- a/aerodynamicsOptimization/src/XCPcheck.m +++ b/aerodynamicsOptimization/src/XCPcheck.m @@ -106,7 +106,7 @@ nCases = length(launchpad.indexAlpha); %%% both lateral and longitudinal XCP involved % the launchpad dynamics is used to write the aerodynamics states -xcg = rocket.xCg; +xcg = rocket.xcg; %%% aerodynamics coefficient @launchpad exit only diff --git a/autoMatricesProtub/mainAutoMatProtub.m b/autoMatricesProtub/mainAutoMatProtub.m index ad85f773..ba18176b 100644 --- a/autoMatricesProtub/mainAutoMatProtub.m +++ b/autoMatricesProtub/mainAutoMatProtub.m @@ -36,8 +36,7 @@ end %% CHOICE OF NUMBER OF XCG timeXcgTotal = rocket.motor.time; -xcgTotal = rocket.xCg; -nXcg = autoMatSettings.vars.Nxcg; +xcgTotal = rocket.xcg; if nXcg == 1 chosenXcg = xcgTotal(1); @@ -76,7 +75,7 @@ end tic %% COMPUTE HIGH AOA AERODYNAMIC COEFFICIENTS -autoMatSettings.varsHighAOA.xcg = rocket.xCg(end); +autoMatSettings.varsHighAOA.xcg = rocket.xcg(end); if length(autoMatSettings.varsHighAOA.alpha) > 20 || ... length(autoMatSettings.varsHighAOA.mach) > 20 error("automatrices with Dissile and alpha/mach" + ... diff --git a/common b/common index 7589b269..bc61b5b9 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 7589b2690bf66066247dd1236f27eb2ee7c52cbd +Subproject commit bc61b5b9265bde0f30dfc53db0bf5820e3c69b04 diff --git a/sensitivityAnalysis/src/stochParameters/initParameter.m b/sensitivityAnalysis/src/stochParameters/initParameter.m index 1d9db0ad..f0066753 100644 --- a/sensitivityAnalysis/src/stochParameters/initParameter.m +++ b/sensitivityAnalysis/src/stochParameters/initParameter.m @@ -86,7 +86,7 @@ for i = 1:length(parameters) parameters(i).value = rocket.lengthCenter; parameters(i).udm = 'm'; case 'centerOfMass' - parameters(i).value = rocket.xCg; + parameters(i).value = rocket.xcg; parameters(i).udm = 'm'; case 'finsRootChord' parameters(i).value = rocket.rear.finsRootChord; diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index e6e858eb..f36cefd6 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -83,7 +83,7 @@ for i = 1:length(parameters) case 'rocketLCenter' rocket.lengthCenter = value; case 'centerOfMass' - rocket.xCg = value; + rocket.xcg = value; case 'finsRootChord' rocket.rear.finsRootChord = value; case 'finsFreeChord' diff --git a/stabilityAnalysis/mainStabilityAnalysis.m b/stabilityAnalysis/mainStabilityAnalysis.m index 28208bb1..1fc32daa 100644 --- a/stabilityAnalysis/mainStabilityAnalysis.m +++ b/stabilityAnalysis/mainStabilityAnalysis.m @@ -50,7 +50,7 @@ if isempty(settings), settings = Settings('stabilityAnalysis', 'ode'); end % Settings.read(settings, options, 'stability'); settings.stability.dissile.alt = environment.z0; -settings.stability.dissile.xcg = rocket.xCg(1); +settings.stability.dissile.xcg = rocket.xcg(1); %% LAUNCHPAD DYNAMICS % states to compute the exit pad velocity @@ -73,7 +73,7 @@ solution = ode113(@ballistic, [0, 10], Y0, options, ... vExit = solution.y(4, end); machExit = vExit/a; settings.stability.dissile.fltcon.MACH = machExit; % Mach @launchpad -settings.stability.dissile.refq.XCG = interpLinear(rocket.motor.time, rocket.xCg, solution.x(end)); +settings.stability.dissile.refq.XCG = interpLinear(rocket.motor.time, rocket.xcg, solution.x(end)); settings.stability.dissile.fltcon.ALT = environment.z0; % Altitude @launchpad diff --git a/utils/rocketpyData/exportRocketpy.m b/utils/rocketpyData/exportRocketpy.m index 14af13de..c7dc066a 100644 --- a/utils/rocketpyData/exportRocketpy.m +++ b/utils/rocketpyData/exportRocketpy.m @@ -35,34 +35,34 @@ CA_3 = squeeze(cat(3, rocket.coefficients.total(1, alpha0, 1:iOpen, beta0, 1, 3, rocket.coefficients.total(1, alpha0, iOpen+1:end, beta0, 1, 1, 1))); %% bays details -total_center_of_mass = rocket.xCg(end); +total_center_of_mass = rocket.xcg(end); rocket_mass = rocket.massNoMotor; rocket_center_of_mass = rocket.xCgNoMotor; booster_mass = rocket.stagesMass(1); payload_mass = rocket.stagesMass(2); -booster_center_of_mass = ((rocket.parafoil.noseLength + rocket.xCg(end))*rocket.mass(end) ... - - rocket.parafoil.xCg*rocket.parafoil.mass)/rocket.stagesMass(1) - rocket.parafoil.length; -payload_center_of_mass = rocket.parafoil.xCg; +booster_center_of_mass = ((rocket.parafoil.noseLength + rocket.xcg(end))*rocket.mass(end) ... + - rocket.parafoil.xcg*rocket.parafoil.mass)/rocket.stagesMass(1) - rocket.parafoil.length; +payload_center_of_mass = rocket.parafoil.xcg; % parafoil mPld = rocket.parafoil.mass; lPld = rocket.parafoil.length; -xcgPld = rocket.parafoil.xCg; +xcgPld = rocket.parafoil.xcg; % recovery mRcs = rocket.recovery.mass; lRcs = rocket.recovery.length; -xcgRcs = rocket.recovery.xCg; +xcgRcs = rocket.recovery.xcg; % electronics mElc = rocket.electronics.mass; lElc = rocket.electronics.length; -xcgElc = rocket.electronics.xCg; +xcgElc = rocket.electronics.xcg; % airbrakes mArb = rocket.airbrakes.mass; lArb = rocket.airbrakes.length; -xcgArb = rocket.airbrakes.xCg; +xcgArb = rocket.airbrakes.xcg; % motor propMass = rocket.motor.propellantMass; @@ -70,7 +70,7 @@ usedPropMass = propMass - propMass(end); time = rocket.motor.time; propMassDot = diff(usedPropMass)./diff(time); propMassDot(end + 1) = propMassDot(end); -propCG = (rocket.xCg.*(usedPropMass + total_center_of_mass) - total_center_of_mass*total_center_of_mass)./usedPropMass; +propCG = (rocket.xcg.*(usedPropMass + total_center_of_mass) - total_center_of_mass*total_center_of_mass)./usedPropMass; propCG(end) = propCG(end - 1); propCG = propCG - rocket.absolutePositions("motor"); burn_time = time(end); @@ -78,15 +78,15 @@ thrust = rocket.motor.thrust; motor_dry_mass = rocket.motor.structureMass; lMot = rocket.motor.length; -xcgMotWet = rocket.motor.xCg; +xcgMotWet = rocket.motor.xcg; motor_center_of_dry_mass = 1/rocket.motor.structureMass *... - (rocket.motor.xCg(1) * (rocket.motor.structureMass + rocket.motor.propellantMass(1)) - ... + (rocket.motor.xcg(1) * (rocket.motor.structureMass + rocket.motor.propellantMass(1)) - ... rocket.motor.propellantMass(1) * propCG(1)); % rear (fins + fincan + boat, it overlaps with motor) mRear = rocket.rear.mass; lRear = rocket.rear.length; -xcgRear = rocket.rear.xCg; +xcgRear = rocket.rear.xcg; %% inertia details % inertia without motor @@ -96,9 +96,9 @@ rocket_I_33 = rocket.inertiaNoMotor(1); % propellant inertia prop_I_11 = (rocket.inertia(2, :) - rocket.inertia(2, end)) - ... - usedPropMass .* (rocket.xCg - (rocket.absolutePositions("motor") + propCG)).^2; + usedPropMass .* (rocket.xcg - (rocket.absolutePositions("motor") + propCG)).^2; prop_I_22 = (rocket.inertia(3, :) - rocket.inertia(3, end)) - ... - usedPropMass .* (rocket.xCg - (rocket.absolutePositions("motor") + propCG)).^2; + usedPropMass .* (rocket.xcg - (rocket.absolutePositions("motor") + propCG)).^2; prop_I_33 = (rocket.inertia(1, :) - rocket.inertia(1, end)); % motor inertia @@ -114,10 +114,10 @@ motor_I_33_dry = motor_I_33(1) - prop_I_33(1); % booster inertia deltaDistance = rocket.absolutePositions("parafoil") + rocket.parafoil.length; -booster_I_11 = rocket.inertia(2, end) + rocket.mass(end) * (rocket.xCg(end) - deltaDistance - booster_center_of_mass)^2 - ... - (rocket.parafoil.inertia(2, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xCg + booster_center_of_mass)^2); -booster_I_22 = rocket.inertia(3, end) + rocket.mass(end) * (rocket.xCg(end) - deltaDistance - booster_center_of_mass)^2 - ... - (rocket.parafoil.inertia(3, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xCg + booster_center_of_mass)^2); +booster_I_11 = rocket.inertia(2, end) + rocket.mass(end) * (rocket.xcg(end) - deltaDistance - booster_center_of_mass)^2 - ... + (rocket.parafoil.inertia(2, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xcg + booster_center_of_mass)^2); +booster_I_22 = rocket.inertia(3, end) + rocket.mass(end) * (rocket.xcg(end) - deltaDistance - booster_center_of_mass)^2 - ... + (rocket.parafoil.inertia(3, end) + rocket.parafoil.mass * (rocket.parafoil.length - rocket.parafoil.xcg + booster_center_of_mass)^2); booster_I_33 = rocket.inertia(1, end) - rocket.parafoil.inertia(1, end); % parafoil inertia -- GitLab From f3e83e8df6cb1be20cd63dcb0ede9f465cb37f4a Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 12 Feb 2025 22:43:13 +0100 Subject: [PATCH 2/8] [handle-value-conversion][Wind] Replaced WindCustom with Wind --- aerodynamicsOptimization/mainOptimization.m | 4 ++-- aerodynamicsOptimization/src/OptimizationGA.m | 2 +- apogeeAnalysis/mainApogeeAnalysis.m | 2 +- apogeeAnalysis/src/engineCutApogee.m | 2 +- apogeeAnalysis/src/standardApogee.m | 2 +- caAnalysis/mainCaAnalysis.m | 4 ++-- caAnalysis/src/initCaAnalysis.m | 2 +- sensitivityAnalysis/mainSensitivity.m | 4 ++-- sensitivityAnalysis/src/sensitivityStochRun.m | 2 +- sensitivityAnalysis/src/stochParameters/updateData.m | 2 +- simulator/mainSimulator.m | 4 ++-- stabilityAnalysis/mainStabilityAnalysis.m | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aerodynamicsOptimization/mainOptimization.m b/aerodynamicsOptimization/mainOptimization.m index c541bc76..ecb35c11 100644 --- a/aerodynamicsOptimization/mainOptimization.m +++ b/aerodynamicsOptimization/mainOptimization.m @@ -1,7 +1,7 @@ function mainOptimization(rocket, wind, environment, settings, options) arguments rocket Rocket = Rocket.empty - wind WindCustom = WindCustom.empty + wind Wind = Wind.empty environment Environment = Environment.empty settings Settings = Settings.empty @@ -53,7 +53,7 @@ if ~contains(path, dissilePath), addpath(genpath(dissilePath)); end mission = Mission(true); if isempty(rocket), rocket = Rocket(mission); end if isempty(environment), environment = Environment(mission, rocket.motor); end -if isempty(wind), wind = WindCustom(mission); end +if isempty(wind), wind = Wind(mission); end if isempty(settings), settings = Settings('ode', 'optimization'); end Settings.read(settings, options, 'optimization'); diff --git a/aerodynamicsOptimization/src/OptimizationGA.m b/aerodynamicsOptimization/src/OptimizationGA.m index ffd59390..77f02f20 100644 --- a/aerodynamicsOptimization/src/OptimizationGA.m +++ b/aerodynamicsOptimization/src/OptimizationGA.m @@ -4,7 +4,7 @@ arguments input struct rocket Rocket environment Environment - wind WindCustom + wind Wind settings Settings wrapper DataWrapper end diff --git a/apogeeAnalysis/mainApogeeAnalysis.m b/apogeeAnalysis/mainApogeeAnalysis.m index 8cd0d052..49485729 100644 --- a/apogeeAnalysis/mainApogeeAnalysis.m +++ b/apogeeAnalysis/mainApogeeAnalysis.m @@ -46,7 +46,7 @@ end %% PREPARE DATA FOR SIMULATION % Winds -winds = [WindCustom(); WindCustom()]; +winds = [Wind(); Wind()]; winds(1).altitudes = settings.cases(1).wind.altitudes; winds(1).magnitudeDistribution = "u"; winds(1).azimuthDistribution = "u"; diff --git a/apogeeAnalysis/src/engineCutApogee.m b/apogeeAnalysis/src/engineCutApogee.m index cbb5dc74..1321e849 100644 --- a/apogeeAnalysis/src/engineCutApogee.m +++ b/apogeeAnalysis/src/engineCutApogee.m @@ -5,7 +5,7 @@ arguments mission Mission selectedMotors (:, 1) struct environments (2, 1) Environment - winds (2, 1) WindCustom + winds (2, 1) Wind airbrakes (2, 1) Airbrakes end % diff --git a/apogeeAnalysis/src/standardApogee.m b/apogeeAnalysis/src/standardApogee.m index fb089e62..ec3da7a9 100644 --- a/apogeeAnalysis/src/standardApogee.m +++ b/apogeeAnalysis/src/standardApogee.m @@ -5,7 +5,7 @@ arguments mission Mission selectedMotors (:, 1) struct environments (2, 1) Environment - winds (2, 1) WindCustom + winds (2, 1) Wind airbrakes (2, 1) Airbrakes end % diff --git a/caAnalysis/mainCaAnalysis.m b/caAnalysis/mainCaAnalysis.m index 7b6421cf..cabaf984 100644 --- a/caAnalysis/mainCaAnalysis.m +++ b/caAnalysis/mainCaAnalysis.m @@ -1,7 +1,7 @@ function [dHdCA] = mainCaAnalysis(rocket, wind, environment, cfdData) arguments rocket = [] % Rocket = Rocket.empty - wind = [] % WindCustom = WindCustom.empty + wind = [] % Wind = Wind.empty environment = [] % Environment = Environment.empty cfdData (2, :) double = [] end @@ -22,7 +22,7 @@ if isDissileMissing, addpath(genpath(dissilePath)); end mission = Mission(true); if isempty(rocket), rocket = Rocket(mission); end if isempty(environment), environment = Environment(mission, rocket.motor); end -if isempty(wind), wind = WindCustom(mission); end +if isempty(wind), wind = Wind(mission); end settings = Settings('ode'); settings.addprop('simulator'); diff --git a/caAnalysis/src/initCaAnalysis.m b/caAnalysis/src/initCaAnalysis.m index 33a3e6cb..b4803e25 100644 --- a/caAnalysis/src/initCaAnalysis.m +++ b/caAnalysis/src/initCaAnalysis.m @@ -1,7 +1,7 @@ function [defaultCa, modCa] = initCaAnalysis(rocket, wind, settings, cfd) arguments rocket Rocket - wind WindCustom + wind Wind settings Settings cfd (2, :) double = [] end diff --git a/sensitivityAnalysis/mainSensitivity.m b/sensitivityAnalysis/mainSensitivity.m index eee5d0ba..56ac7b8a 100644 --- a/sensitivityAnalysis/mainSensitivity.m +++ b/sensitivityAnalysis/mainSensitivity.m @@ -2,7 +2,7 @@ function [postProcess, parameters] = ... mainSensitivity(rocket, wind, environment, settings, plots) arguments rocket = [] % Rocket = Rocket.empty - wind = [] % WindCustom = WindCustom.empty + wind = [] % Wind = Wind.empty environment = [] % Environment = Environment.empty settings = [] % Settings = Settings.empty @@ -47,7 +47,7 @@ if isDissileMissing, addpath(genpath(dissilePath)); end mission = Mission(true); if isempty(rocket), rocket = Rocket(mission); end if isempty(environment), environment = Environment(mission, rocket.motor); end -if isempty(wind), wind = WindCustom(mission); end +if isempty(wind), wind = Wind(mission); end if isempty(settings), settings = Settings('ode', 'sensitivity'); end Settings.read(settings, plots, 'sensitivity', 'plots'); diff --git a/sensitivityAnalysis/src/sensitivityStochRun.m b/sensitivityAnalysis/src/sensitivityStochRun.m index e4ecac83..155ec703 100644 --- a/sensitivityAnalysis/src/sensitivityStochRun.m +++ b/sensitivityAnalysis/src/sensitivityStochRun.m @@ -3,7 +3,7 @@ function [ascent, descentPara, descentBall, stability] = ... arguments rocketRef Rocket envRef Environment - wind WindCustom {mustBeA(wind, {'WindCustom', 'WindMatlab'})} + wind Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} parameters struct settings Settings wrapper DataWrapper diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index f36cefd6..363be07e 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -2,7 +2,7 @@ function updateData(rocket, env, wind, parameters, k) arguments rocket Rocket env Environment - wind WindCustom + wind Wind parameters struct k double end diff --git a/simulator/mainSimulator.m b/simulator/mainSimulator.m index 3d374e55..5a14012e 100644 --- a/simulator/mainSimulator.m +++ b/simulator/mainSimulator.m @@ -1,7 +1,7 @@ function [ascent, descent] = mainSimulator(rocket, wind, environment, settings, options) arguments rocket = [] % Rocket = Rocket.empty - wind = [] % WindCustom = WindCustom.empty + wind = [] % Wind = Wind.empty environment = [] % Environment = Environment.empty settings = [] % Settings = Settings.empty @@ -45,7 +45,7 @@ if isCommonMissing, addpath(genpath(commonPath)); end mission = Mission(true); if isempty(rocket), rocket = Rocket(mission); end if isempty(environment), environment = Environment(mission, rocket.motor); end -if isempty(wind), wind = WindCustom(mission); end +if isempty(wind), wind = Wind(mission); end if isempty(settings), settings = Settings('ode', 'simulator'); end Settings.read(settings, options, 'simulator'); diff --git a/stabilityAnalysis/mainStabilityAnalysis.m b/stabilityAnalysis/mainStabilityAnalysis.m index 1fc32daa..b4ae30af 100644 --- a/stabilityAnalysis/mainStabilityAnalysis.m +++ b/stabilityAnalysis/mainStabilityAnalysis.m @@ -44,7 +44,7 @@ addpath(genpath(dissilePath)); mission = Mission(true); if isempty(rocket), rocket = Rocket(mission); end if isempty(environment), environment = Environment(mission, rocket.motor); end -if isempty(wind), wind = WindCustom(mission); end +if isempty(wind), wind = Wind(mission); end if isempty(settings), settings = Settings('stabilityAnalysis', 'ode'); end % Settings.read(settings, options, 'stability'); -- GitLab From 13640ce9c3240f07b328b2f0070e25243d776292 Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Mon, 17 Feb 2025 08:27:05 +0100 Subject: [PATCH 3/8] [handle-value-conversion] Converted parachutes to cell array --- .../src/stochParameters/initParameter.m | 16 ++++++++-------- .../src/stochParameters/updateData.m | 16 ++++++++-------- simulator/mainSimulator.m | 2 +- simulator/src/stdPlots.m | 6 +++--- utils/rocketpyData/exportRocketpy.m | 16 ++++++++-------- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/sensitivityAnalysis/src/stochParameters/initParameter.m b/sensitivityAnalysis/src/stochParameters/initParameter.m index f0066753..621446fb 100644 --- a/sensitivityAnalysis/src/stochParameters/initParameter.m +++ b/sensitivityAnalysis/src/stochParameters/initParameter.m @@ -55,28 +55,28 @@ for i = 1:length(parameters) parameters(i).value = rocket.inertia(3, :); parameters(i).udm = 'kg*m^4'; case 'drogueSurface' - parameters(i).value = rocket.parachutes(1, 1).surface; + parameters(i).value = rocket.parachutes{1, 1}.surface; parameters(i).udm = 'm2'; case 'drogueMass' - parameters(i).value = rocket.parachutes(1, 1).mass; + parameters(i).value = rocket.parachutes{1, 1}.mass; parameters(i).udm = 'kg'; case 'drogueCl' - parameters(i).value = rocket.parachutes(1, 1).cl; + parameters(i).value = rocket.parachutes{1, 1}.cl; parameters(i).udm = '-'; case 'drogueCd' - parameters(i).value = rocket.parachutes(1, 1).cd; + parameters(i).value = rocket.parachutes{1, 1}.cd; parameters(i).udm = '-'; case 'mainSurface' - parameters(i).value = rocket.parachutes(2, 1).surface; + parameters(i).value = rocket.parachutes{2, 1}.surface; parameters(i).udm = 'm2'; case 'mainMass' - parameters(i).value = rocket.parachutes(2, 1).mass; + parameters(i).value = rocket.parachutes{2, 1}.mass; parameters(i).udm = 'kg'; case 'mainCl' - parameters(i).value = rocket.parachutes(2, 1).cl; + parameters(i).value = rocket.parachutes{2, 1}.cl; parameters(i).udm = '-'; case 'mainCd' - parameters(i).value = rocket.parachutes(2, 1).cd; + parameters(i).value = rocket.parachutes{2, 1}.cd; parameters(i).udm = '-'; % rocket geometry --- available with the stability run only case 'rocketDiameter' diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index 363be07e..6c1c26c8 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -62,21 +62,21 @@ for i = 1:length(parameters) case 'Izz' rocket.inertia(3, :) = value; case 'drogueSurface' - rocket.parachutes(1, 1).surface = value; + rocket.parachutes{1, 1}.surface = value; case 'drogueMass' - rocket.parachutes(1, 1).mass = value; + rocket.parachutes{1, 1}.mass = value; case 'drogueCl' - rocket.parachutes(1, 1).cl = value; + rocket.parachutes{1, 1}.cl = value; case 'drogueCd' - rocket.parachutes(1, 1).cd = value; + rocket.parachutes{1, 1}.cd = value; case 'mainSurface' - rocket.parachutes(2, 1).surface = value; + rocket.parachutes{2, 1}.surface = value; case 'mainMass' - rocket.parachutes(2, 1).mass = value; + rocket.parachutes{2, 1}.mass = value; case 'mainCl' - rocket.parachutes(2, 1).cl = value; + rocket.parachutes{2, 1}.cl = value; case 'mainCd' - rocket.parachutes(2, 1).cd = value; + rocket.parachutes{2, 1}.cd = value; % rocket geometry --- available with the stability run only case 'rocketDiameter' rocket.diameter = value; diff --git a/simulator/mainSimulator.m b/simulator/mainSimulator.m index 5a14012e..b9ec8978 100644 --- a/simulator/mainSimulator.m +++ b/simulator/mainSimulator.m @@ -51,7 +51,7 @@ if isempty(settings), settings = Settings('ode', 'simulator'); end Settings.read(settings, options, 'simulator'); %% CHECKS -if settings.simulator.ballistic && rocket.parachutes(end, 1).finalAltitude ~= 0 +if settings.simulator.ballistic && rocket.parachutes{end, 1}.finalAltitude ~= 0 error('The landing will be not achived, check the final altitude of the last parachute in config.m') end if settings.simulator.ballistic && settings.simulator.parafoil diff --git a/simulator/src/stdPlots.m b/simulator/src/stdPlots.m index df42c8de..6ef6d686 100644 --- a/simulator/src/stdPlots.m +++ b/simulator/src/stdPlots.m @@ -182,7 +182,7 @@ if ~settings.simulator.ballistic plots(iPlot) = plot3(xM, yM, zM, 'o',... 'MarkerSize', 10, 'MarkerFaceColor', colorMarker(:, iMarker) , 'MarkerEdgeColor', 'none'); - labels(iPlot) = strcat("Stage: ", num2str(j), " ", rocket.parachutes(i,j).name ," opening"); + labels(iPlot) = strcat("Stage: ", num2str(j), " ", rocket.parachutes{i,j}.name ," opening"); iPlot = iPlot + 1; iMarker = iMarker + 1; end @@ -301,7 +301,7 @@ if ~settings.simulator.ballistic subplot(3, 1, 3); plots(iPlot) = plot(tDescent, vzDescent); - legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes(i, j).name , " trajectory" ); + legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes{i, j}.name , " trajectory" ); iPlot = iPlot + 1; end end @@ -470,7 +470,7 @@ if ~settings.simulator.ballistic subplot(1, 3, 3); plots(iPlot) = plot(yDescent, zDescent); - legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes(i, j).name , " trajectory" ); + legends(iPlot) = strcat( "Stage ", num2str(j), ": ", rocket.parachutes{i, j}.name , " trajectory" ); iPlot = iPlot + 1; end end diff --git a/utils/rocketpyData/exportRocketpy.m b/utils/rocketpyData/exportRocketpy.m index c7dc066a..9c56cb15 100644 --- a/utils/rocketpyData/exportRocketpy.m +++ b/utils/rocketpyData/exportRocketpy.m @@ -146,16 +146,16 @@ fins_position = rocket.lengthCenter - rocket.rear.finsAxialDistance - root_chord boat_position = rocket.lengthCenter; %% parachutes -booster_drogue_cd_s = rocket.parachutes(1, 1).surface * rocket.parachutes(1, 1).cd; -booster_drogue_opening_delay = rocket.parachutes(1,1).openingTime; +booster_drogue_cd_s = rocket.parachutes{1, 1}.surface * rocket.parachutes{1, 1}.cd; +booster_drogue_opening_delay = rocket.parachutes{1,1}.openingTime; -booster_main_cd_s = rocket.parachutes(2, 1).surface * rocket.parachutes(2, 1).cd; -booster_main_opening_delay = rocket.parachutes(2,1).openingTime; -booster_main_opening_altitude = rocket.parachutes(1, 1).finalAltitude + environment.z0; +booster_main_cd_s = rocket.parachutes{2, 1}.surface * rocket.parachutes{2, 1}.cd; +booster_main_opening_delay = rocket.parachutes{2,1}.openingTime; +booster_main_opening_altitude = rocket.parachutes{1, 1}.finalAltitude + environment.z0; -payload_drogue_cd_s = rocket.parachutes(1, 2).surface * rocket.parachutes(1, 2).cd; -payload_drogue_opening_delay = rocket.parachutes(1, 2).openingTime; -parafoil_opening_altitude = rocket.parachutes(1, 2).finalAltitude + environment.z0; +payload_drogue_cd_s = rocket.parachutes{1, 2}.surface * rocket.parachutes{1, 2}.cd; +payload_drogue_opening_delay = rocket.parachutes{1, 2}.openingTime; +parafoil_opening_altitude = rocket.parachutes{1, 2}.finalAltitude + environment.z0; %% launchpad and environment details latitude = environment.lat0; -- GitLab From 541015a88936529e07948eb3b473cd9e0ac4e7ee Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Tue, 25 Feb 2025 21:27:02 +0100 Subject: [PATCH 4/8] [handle-value-conversion][autoMatrices] Changed isHRE to motor.type --- autoMatricesProtub/mainAutoMatProtub.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoMatricesProtub/mainAutoMatProtub.m b/autoMatricesProtub/mainAutoMatProtub.m index ba18176b..5dcd6e0d 100644 --- a/autoMatricesProtub/mainAutoMatProtub.m +++ b/autoMatricesProtub/mainAutoMatProtub.m @@ -29,7 +29,7 @@ autoMatSettings.vars.hprot = rocket.airbrakes.height; autoMatSettings.varsHighAOA.hprot = []; % overriding xcg number if the motor is solid -if ~rocket.motor.isHRE && autoMatSettings.vars.Nxcg ~= 2 +if rocket.motor.type == MotorType.Solid && autoMatSettings.vars.Nxcg ~= 2 warning('Overwriting xCg to 2 for solid rocket motors.') autoMatSettings.vars.Nxcg = 2; end -- GitLab From d180e07836ff48a3a0956319a9aeaa57ea3c3c59 Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 26 Mar 2025 21:53:17 +0100 Subject: [PATCH 5/8] [handle-value-conversion] Removed externalUpdaters and adapted apogeeAnalysis --- aerodynamicsOptimization/src/OptimizationGA.m | 4 ---- apogeeAnalysis/mainApogeeAnalysis.m | 10 ++++------ apogeeAnalysis/src/engineCutApogee.m | 1 - apogeeAnalysis/src/plotApogeeAnalysis.m | 4 ++-- apogeeAnalysis/src/standardApogee.m | 2 +- caAnalysis/src/initCaAnalysis.m | 1 - sensitivityAnalysis/sensitivityConfig.m | 2 +- sensitivityAnalysis/src/sensitivityStochRun.m | 6 +++--- sensitivityAnalysis/src/stochParameters/updateData.m | 4 ---- 9 files changed, 11 insertions(+), 23 deletions(-) diff --git a/aerodynamicsOptimization/src/OptimizationGA.m b/aerodynamicsOptimization/src/OptimizationGA.m index 77f02f20..9e7a828e 100644 --- a/aerodynamicsOptimization/src/OptimizationGA.m +++ b/aerodynamicsOptimization/src/OptimizationGA.m @@ -67,7 +67,6 @@ azCase = (360)*pi/180; wind.magnitudeParameters = ones(2,2).*magCase; wind.azimuthParameters = ones(2,2).*azCase; -wind.updateAll(); apogee1 = quickApogeeOnly(rocket, environment, wind, settings, wrapper); @@ -76,7 +75,6 @@ azCase = (180)*pi/180; wind.magnitudeParameters = ones(2,2).*magCase; wind.azimuthParameters = ones(2,2).*azCase; -wind.updateAll(); apogee2 = quickApogeeOnly(rocket, environment, wind, settings, wrapper); @@ -86,7 +84,6 @@ azCase = (360)*pi/180; wind.magnitudeParameters = ones(2,2).*magCase; wind.azimuthParameters = ones(2,2).*azCase; -wind.updateAll(); apogee3 = quickApogeeOnly(rocket, environment, wind, settings, wrapper); @@ -95,7 +92,6 @@ azCase = (180)*pi/180; wind.magnitudeParameters = ones(2,2).*magCase; wind.azimuthParameters = ones(2,2).*azCase; -wind.updateAll(); apogee4 = quickApogeeOnly(rocket, environment, wind, settings, wrapper); diff --git a/apogeeAnalysis/mainApogeeAnalysis.m b/apogeeAnalysis/mainApogeeAnalysis.m index 49485729..8fba1605 100644 --- a/apogeeAnalysis/mainApogeeAnalysis.m +++ b/apogeeAnalysis/mainApogeeAnalysis.m @@ -52,14 +52,12 @@ winds(1).magnitudeDistribution = "u"; winds(1).azimuthDistribution = "u"; winds(1).magnitudeParameters = settings.cases(1).wind.magVec * ones(2, 1); winds(1).azimuthParameters = settings.cases(1).wind.azVec * ones(2, 1); -winds(1).updateAll; winds(2).altitudes = settings.cases(2).wind.altitudes; winds(2).magnitudeDistribution = "u"; winds(2).azimuthDistribution = "u"; winds(2).magnitudeParameters = settings.cases(2).wind.magVec * ones(2, 1); winds(2).azimuthParameters = settings.cases(2).wind.azVec * ones(2, 1); -winds(2).updateAll; % Environments environments = [Environment(mission, rocket.motor); Environment(mission, rocket.motor)]; @@ -70,7 +68,7 @@ environments(2).omega = settings.cases(2).omega; environments(2).phi = settings.cases(2).phi; % Airbrakes -airbrakes = [Airbrakes(mission, rocket.motor); Airbrakes(mission, rocket.motor)]; +airbrakes = [Airbrakes(mission); Airbrakes(mission)]; airbrakes(1).enabled = settings.cases(1).airbrakes.enabled; airbrakes(1).extension = settings.cases(1).airbrakes.extension; airbrakes(1).deltaTime = settings.cases(1).airbrakes.deltaTime; @@ -80,7 +78,7 @@ airbrakes(2).extension = settings.cases(2).airbrakes.extension; airbrakes(2).deltaTime = settings.cases(2).airbrakes.deltaTime; %% MOTORS SELECTION -if settings.analysis.isEngineCut && ~(rocket.motor.isHRE) +if settings.analysis.isEngineCut && rocket.motor.type ~= MotorType.Hybrid msg="The Engine Cut Analysis can be used for HRE motors only"; error(msg) end @@ -105,8 +103,8 @@ if isempty(settings.selection.motorName) for i=1:size(motors, 1) if (motors(i).Itot > settings.selection.totalImpulseRange(1) && motors(i).Itot < settings.selection.totalImpulseRange(2) ... && any(strcmp(motors(i).producer, settings.selection.producer)) ... - && ( (rocket.motor.isHRE == false) || (motors(i).ODfus == rocket.diameter) ) ... - && ( (rocket.motor.isHRE == false) || ((settings.selection.transient == 2) || ... + && ( (rocket.motor.type ~= MotorType.Hybrid) || (motors(i).ODfus == rocket.diameter) ) ... + && ( (rocket.motor.type ~= MotorType.Hybrid) || ((settings.selection.transient == 2) || ... (settings.selection.transient == motors(i).transientFlag)))) selectedMotors(j) = motors(i); j = j + 1; diff --git a/apogeeAnalysis/src/engineCutApogee.m b/apogeeAnalysis/src/engineCutApogee.m index 1321e849..41c24000 100644 --- a/apogeeAnalysis/src/engineCutApogee.m +++ b/apogeeAnalysis/src/engineCutApogee.m @@ -63,7 +63,6 @@ for i = 1:2 % highest and lowest apogee cases for l = 1:nCutOffTime rocket.motor.cutoffTime = timeEngineCutVect(l); - rocket.updateAll; rocket.coefficients.state.xcgTime = linspace(0, rocket.motor.cutoffTime, ... length(rocket.coefficients.state.xcgTime)); % Apogee diff --git a/apogeeAnalysis/src/plotApogeeAnalysis.m b/apogeeAnalysis/src/plotApogeeAnalysis.m index f0bf990a..be61a386 100644 --- a/apogeeAnalysis/src/plotApogeeAnalysis.m +++ b/apogeeAnalysis/src/plotApogeeAnalysis.m @@ -120,12 +120,12 @@ for i = 1:2 % green rectangle below the target line if delta(1) > 0 rectangle('Position', [xGridMin minApo (xGridMax-xGridMin) delta(1)], ... - 'FaceColor', [0 1 0 0.1], 'Linestyle', 'none'); + 'FaceColor', [0 1 0 0.1], 'Linestyle', 'none', 'FaceAlpha', 0.3); end else % green rectangle over the target line rectangle('Position', [xGridMin settings.plots.targetApogee (xGridMax-xGridMin) delta(2)], ... - 'FaceColor', [0 1 0 0.1], 'Linestyle', 'none'); + 'FaceColor', [0 1 0 0.1], 'Linestyle', 'none', 'FaceAlpha', 0.3); end plotApogee.XLim = [xGridMin-margin, xGridMax+margin]; diff --git a/apogeeAnalysis/src/standardApogee.m b/apogeeAnalysis/src/standardApogee.m index ec3da7a9..efd81950 100644 --- a/apogeeAnalysis/src/standardApogee.m +++ b/apogeeAnalysis/src/standardApogee.m @@ -48,8 +48,8 @@ for i = 1:2 % highest and lowest apogee cases for k = 1:nMotors tempMotor.name = selectedMotors(k).MotorName; + rocket.mass = []; % Disables any ovverrides rocket.motor = tempMotor; - rocket.updateAll; rocket.coefficients.state.xcgTime = linspace(0, tempMotor.cutoffTime, ... length(rocket.coefficients.state.xcgTime)); rocket.motor.thrust = rocket.motor.thrust * ... diff --git a/caAnalysis/src/initCaAnalysis.m b/caAnalysis/src/initCaAnalysis.m index b4803e25..b61d5bf9 100644 --- a/caAnalysis/src/initCaAnalysis.m +++ b/caAnalysis/src/initCaAnalysis.m @@ -52,5 +52,4 @@ wind.magnitudeParameters = [0; 0]; wind.azimuthDistribution = 'u'; wind.azimuthParameters = [0; 0]; -wind.updateAll(); end \ No newline at end of file diff --git a/sensitivityAnalysis/sensitivityConfig.m b/sensitivityAnalysis/sensitivityConfig.m index a7d713ff..7653b39f 100644 --- a/sensitivityAnalysis/sensitivityConfig.m +++ b/sensitivityAnalysis/sensitivityConfig.m @@ -13,7 +13,7 @@ % SPDX-License-Identifier: GPL-3.0-or-later %% SIMULATION PARAMETERS -sensitivity.n = 2000; % Number of cases +sensitivity.n = 100; % Number of cases sensitivity.type = 4; % Simulation type: % 1-apogee only diff --git a/sensitivityAnalysis/src/sensitivityStochRun.m b/sensitivityAnalysis/src/sensitivityStochRun.m index 155ec703..ca0cbc1b 100644 --- a/sensitivityAnalysis/src/sensitivityStochRun.m +++ b/sensitivityAnalysis/src/sensitivityStochRun.m @@ -102,10 +102,10 @@ if stabFlag stability(1, n) = stability; end -parfor i = 1:n +for i = 1:n ascentSol = []; - rocket = copy(rocketRef); - env = copy(envRef); + rocket = rocketRef; + env = envRef; uncertanty = struct(); updateData(rocket, env, wind, parameters, i); diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index 6c1c26c8..1360c7bc 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -102,9 +102,5 @@ for i = 1:length(parameters) error(strcat('Parameter: <', parameters(i).name ,'> not known')); end end - -rocket.updateAll(); -env.updateAllExcetpG0(); -wind.updateAll(); end -- GitLab From b56736ecc57fe0ae04118044a674df6be135f8fb Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 26 Mar 2025 22:45:04 +0100 Subject: [PATCH 6/8] [handle-value-conversion] Changed updateData to support value classes --- sensitivityAnalysis/src/sensitivityStochRun.m | 2 +- sensitivityAnalysis/src/stochParameters/updateData.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sensitivityAnalysis/src/sensitivityStochRun.m b/sensitivityAnalysis/src/sensitivityStochRun.m index ca0cbc1b..6893fba0 100644 --- a/sensitivityAnalysis/src/sensitivityStochRun.m +++ b/sensitivityAnalysis/src/sensitivityStochRun.m @@ -107,7 +107,7 @@ for i = 1:n rocket = rocketRef; env = envRef; uncertanty = struct(); - updateData(rocket, env, wind, parameters, i); + [rocket, env, wind] = updateData(rocket, env, wind, parameters, i); if ascentFlag [ascentSol, ascent(i)] = stdAscent(rocket, env, wind, settings, wrapper); diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index 1360c7bc..1fd7a723 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -1,4 +1,4 @@ -function updateData(rocket, env, wind, parameters, k) +function [rocket, env, wind] = updateData(rocket, env, wind, parameters, k) arguments rocket Rocket env Environment -- GitLab From 4e8b6b01ea7f374afa586714e142f18a25ba8abb Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Wed, 26 Mar 2025 22:54:11 +0100 Subject: [PATCH 7/8] [handle-value-conversion] Added wind updater to updateData --- sensitivityAnalysis/src/sensitivityStochRun.m | 9 +++++---- sensitivityAnalysis/src/stochParameters/updateData.m | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sensitivityAnalysis/src/sensitivityStochRun.m b/sensitivityAnalysis/src/sensitivityStochRun.m index 6893fba0..b8921df0 100644 --- a/sensitivityAnalysis/src/sensitivityStochRun.m +++ b/sensitivityAnalysis/src/sensitivityStochRun.m @@ -1,9 +1,9 @@ function [ascent, descentPara, descentBall, stability] = ... - sensitivityStochRun(rocketRef, envRef, wind, parameters, settings, wrapper) + sensitivityStochRun(rocketRef, envRef, windRef, parameters, settings, wrapper) arguments rocketRef Rocket envRef Environment - wind Wind {mustBeA(wind, {'Wind', 'WindMatlab'})} + windRef Wind {mustBeA(windRef, {'Wind', 'WindMatlab'})} parameters struct settings Settings wrapper DataWrapper @@ -97,15 +97,16 @@ if ballFlag end if stabFlag - stability = stdStability(rocketRef, envRef, wind, settings, wrapper); + stability = stdStability(rocketRef, envRef, windRef, settings, wrapper); wrapper.reset(); stability(1, n) = stability; end -for i = 1:n +parfor i = 1:n ascentSol = []; rocket = rocketRef; env = envRef; + wind = windRef; uncertanty = struct(); [rocket, env, wind] = updateData(rocket, env, wind, parameters, i); diff --git a/sensitivityAnalysis/src/stochParameters/updateData.m b/sensitivityAnalysis/src/stochParameters/updateData.m index 1fd7a723..7035709c 100644 --- a/sensitivityAnalysis/src/stochParameters/updateData.m +++ b/sensitivityAnalysis/src/stochParameters/updateData.m @@ -36,6 +36,8 @@ end coefficients = {'CA','CYB','CY0','CNA','CN0','Cl','Clp', ... 'Cma','Cm0','Cmad','Cmq','Cnb','Cn0','Cnr','Cnp'}; +wind = wind.updateAll(); + for i = 1:length(parameters) value = applyModFactor(parameters(i), k); -- GitLab From 160506db5e26d6547e8d21285d6cc2c334aca63c Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Thu, 27 Mar 2025 10:42:27 +0100 Subject: [PATCH 8/8] [handle-value-conversion][stability] Fixed a bug where wind distribution would not be set --- stabilityAnalysis/src/computeStability.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stabilityAnalysis/src/computeStability.m b/stabilityAnalysis/src/computeStability.m index bdf24a9e..976090cd 100644 --- a/stabilityAnalysis/src/computeStability.m +++ b/stabilityAnalysis/src/computeStability.m @@ -115,6 +115,10 @@ for i = 1:nCall azVec = windMesh(2, ind); nInd = length(ind); + % Set uniform wind distribution + wind.magnitudeDistribution = 'u'; + wind.azimuthDistribution = 'u'; + %%% Launchpad exit flight condition for j = 1:nInd index = (nFC * (i-1)) + j; -- GitLab