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