From 52f9a25a33de60e29698f2b7e594f1dd02840a83 Mon Sep 17 00:00:00 2001
From: "Pier Francesco A. Bachini" <pierfrancesco.bachini@skywarder.eu>
Date: Sat, 26 Apr 2025 02:24:31 +0200
Subject: [PATCH] Update submodule and apply all necessary changes

---
 common                                        |   2 +-
 .../miscellaneous/settingsEngineCut.m         |   3 -
 .../odeFunctions/descentParachute_OLD.m       | 219 ++++++++++++++++++
 .../config2023_Gemini_Portugal_October.m      |   4 +-
 .../config2024_Lyra_Portugal_October.m        |   4 +-
 .../config2024_Lyra_Roccaraso_September.m     |   4 +-
 .../config2025_Orion_Portugal_October.m       |   4 +-
 .../config2025_Orion_Roccaraso_September.m    |   4 +-
 simulator/configs/configControl.m             |   2 +-
 simulator/configs/configMontecarlo.m          |  14 +-
 simulator/configs/configPayload.m             |  14 +-
 simulator/configs/configSimulator.m           |   2 +-
 simulator/mainMontecarlo.m                    |  17 +-
 simulator/src/export_HILdataADA.m             |   2 +-
 simulator/src/export_HILdataPRF.m             |   4 +-
 simulator/src/std_run.m                       |   9 +-
 .../src/std_run_parts/std_setInitialParams.m  |   3 +-
 simulator/src/std_run_parts/std_subsystems.m  |   2 +-
 .../mainTrajectoryGeneration.m                |   2 +-
 19 files changed, 269 insertions(+), 46 deletions(-)
 create mode 100644 commonFunctions/odeFunctions/descentParachute_OLD.m

diff --git a/common b/common
index 45b95b54..83b0ff15 160000
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 45b95b54c58ffea5323c11d5a64cecc797a1ffb7
+Subproject commit 83b0ff154c229c9be30c2b7f98b11c3822a5f6ef
diff --git a/commonFunctions/miscellaneous/settingsEngineCut.m b/commonFunctions/miscellaneous/settingsEngineCut.m
index 69e54697..7be838a4 100644
--- a/commonFunctions/miscellaneous/settingsEngineCut.m
+++ b/commonFunctions/miscellaneous/settingsEngineCut.m
@@ -41,7 +41,6 @@ function [settings, rocket] = settingsEngineCut(settings, engineT0, rocket)
         end
         
         rocket.motor.cutoffTime = rocket.motor.cutoffTime + rocket.motor.cutoffTransient;
-        rocket.updateCutoff;
         
     elseif rocket.motor.cutoffTime >= (rocket.motor.time(end) - rocket.motor.cutoffTransient)
     
@@ -50,7 +49,5 @@ function [settings, rocket] = settingsEngineCut(settings, engineT0, rocket)
     elseif rocket.motor.cutoffTime <= 0
         error('rocket.motor.cutoffTime must be grater than zero');
     end
-    
-    rocket.updateCutoff;
 
 end
\ No newline at end of file
diff --git a/commonFunctions/odeFunctions/descentParachute_OLD.m b/commonFunctions/odeFunctions/descentParachute_OLD.m
new file mode 100644
index 00000000..0ac4ecff
--- /dev/null
+++ b/commonFunctions/odeFunctions/descentParachute_OLD.m
@@ -0,0 +1,219 @@
+function [dY,parout] = descentParachute_OLD(t, Y, settings, uw, vw, ww, para, Q ,uncert)
+%{ 
+
+descentParachute - ode function of the 3DOF Rigid Rocket-Paraachute Model
+
+INPUTS:      
+            - t, integration time;
+            - Y, state vector, [ x y z | u v w ]:
+
+                                * (x y z), NED{north, east, down} horizontal frame; 
+                                * (u v w), horizontal frame velocities.
+
+            - settings, rocket data structure;
+            - uw, wind component along x;
+            - vw, wind component along y;
+            - ww, wind component along z;
+            - uncert, wind uncertanties;
+            - Hour, hour of the day of the needed simulation;
+            - Day, day of the month of the needed simulation;
+
+OUTPUTS:    
+            - dY, state derivatives;
+
+Author: Ruben Di Battista
+Skyward Experimental Rocketry | CRD Dept | crd@skywarder.eu
+email: ruben.dibattista@skywarder.eu
+April 2014; Last revision: 31.XII.2014
+
+Author: Francesco Colombi
+Skyward Experimental Rocketry | CRD Dept | crd@skywarder.eu
+email: francesco.colombi@skywarder.eu
+Release date: 16/04/2016
+
+Author: Adriano Filippo Inno
+Skyward Experimental Rocketry | AFD Dept | crd@skywarder.eu
+email: adriano.filippo.inno@skywarder.eu
+Release date: 13/01/2018
+
+%}
+
+% recalling the state
+% x = Y(1);
+% y = Y(2);
+z = Y(3);
+u = Y(4);
+v = Y(5);
+w = Y(6);
+
+
+local = settings.Local;
+%% CONSTANTS
+S = settings.para(para).S;                                               % [m^2]   Surface
+CD = settings.para(para).CD;                                             % [/] Parachute Drag Coefficient
+CL = settings.para(para).CL;                                             % [/] Parachute Lift Coefficient
+if para == 1
+    pmass = 0 ;                                                          % [kg] detached mass
+else
+    pmass = sum(settings.para(1:para-1).mass) + settings.mnc;
+end
+
+                                                           % [N/kg] magnitude of the gravitational field at zero
+
+m = settings.ms - pmass;                                                 % [kg] descend mass
+g = settings.g0/(1 + (-z*1e-3/6371))^2;                                         % [N/kg]  module of gravitational field
+
+%% ADDING WIND (supposed to be added in NED axes);
+
+% if settings.wind.model
+%     
+%     if settings.stoch.N > 1
+%         [uw, vw, ww] = windMatlabGenerator(settings, z, t, Hour, Day);
+%     else
+%         [uw, vw, ww] = windMatlabGenerator(settings, z, t);
+%     end
+%     
+% elseif settings.wind.input
+%     [uw, vw, ww] = windInputGenerator(settings, z, uncert);
+% 
+% elseif settings.wind.variable
+%     [uw, vw, ww] = windVariableGenerator(z, settings.stoch);
+% end
+
+switch settings.windModel
+
+    case "atmospherical"
+    [uw, vw, ww] = windMatlabGenerator(settings, z, t);
+    
+    case "multiplicative"
+    uncert = settings.wind.inputUncertainty;
+    [uw, vw, ww] = windInputGenerator(settings, z, uncert);
+
+    case "constant"
+    uw = settings.constWind(1); vw = settings.constWind(2); ww = settings.constWind(3);
+end
+
+
+wind =[uw; vw; ww]; % body
+Vels = [u; v; w];
+
+% Relative velocities (plus wind);
+ur = u - wind(1);
+vr = v - wind(2);
+wr = w - wind(3);
+
+V_norm = norm([ur vr wr]);
+
+
+%% ATMOSPHERE DATA
+if -z < 0        % z is directed as the gravity vector
+    z = 0;
+end
+
+absoluteAltitude = -z + environment.z0;
+[~, ~, P, rho] = atmosphereData(absoluteAltitude, g, local);
+
+%% REFERENCE FRAME
+% The parachutes are approximated as rectangular surfaces with the normal
+% vector perpendicular to the relative velocity
+
+t_vect = [ur vr wr];                     % Tangenzial vector
+h_vect = [vr -ur 0];                     % horizontal vector    
+
+if all(abs(h_vect) < 1e-8)
+    h_vect = [vw -uw 0];
+end
+
+n_vect = cross(t_vect, h_vect);          % Normal vector
+
+if norm(t_vect) < 1e-8
+    t_vers = [0 0 0];
+else
+    t_vers = t_vect/norm(t_vect);            % Tangenzial versor
+end
+
+if norm(n_vect) < 1e-8
+    n_vers = [0 0 0]; 
+else
+    n_vers = n_vect/norm(n_vect);           % normal versor
+end
+
+if (n_vers(3) > 0)                          % If the normal vector is downward directed
+    n_vers = -n_vers;
+end
+
+
+
+%% FORCES
+D = -0.5*rho*V_norm^2*S*CD*t_vers';       % [N] Drag vector
+L = 0.5*rho*V_norm^2*S*CL*n_vers';       % [N] Lift vector
+Fg = m*g*[0 0 1]';                       % [N] Gravitational Force vector
+F = L + Fg + D;                          % [N] total forces vector
+
+F_acc = F-Fg;                               % [N] accelerometer felt forces
+
+%% STATE DERIVATIVES
+% velocity
+acc = F/m;
+
+
+%% FINAL DERIVATIVE STATE ASSEMBLING
+dY(1:3) = Vels; % ned
+dY(4:6) = acc;
+
+
+dY = dY';
+
+%% SAVING THE QUANTITIES FOR THE PLOTS
+
+if nargout == 2
+%     parout.integration.t = t;
+%     
+%     parout.interp.M = M_value;
+%     parout.interp.alpha = alpha_value;
+%     parout.interp.beta = beta_value;
+%     parout.interp.alt = -z;
+    parout.interp.mass = m;
+%     
+    parout.wind.NED_wind = [uw, vw, ww];
+    parout.wind.body_wind = wind;
+
+%     
+%     parout.rotations.dcm = dcm;
+%     
+%     parout.velocities = Vels;
+%     
+%     parout.forces.AeroDyn_Forces = [X, Y, Z];
+%     parout.forces.T = T;
+%     
+    parout.air.rho = rho;
+    parout.air.P = P;
+%     
+    parout.accelerations.body_acc = acc;
+%     parout.accelerations.ang_acc = [dp, dq, dr];
+    parout.accelerometer.body_acc = (F_acc/m)';
+
+%     parout.coeff.CA = CA;
+%     parout.coeff.CYB = CYB;
+%     parout.coeff.CNA = CNA;
+%     parout.coeff.Cl = Cl;
+%     parout.coeff.Clp = Clp;
+%     %--------------------------------------------
+%     %parout.coeff.Clb = Clb;
+%     %--------------------------------------------
+%     parout.coeff.Cma = Cma;
+%     parout.coeff.Cmad = Cmad;
+%     parout.coeff.Cmq = Cmq;
+%     parout.coeff.Cnb = Cnb;
+%     parout.coeff.Cnr = Cnr;
+%     parout.coeff.Cnp = Cnp;
+%     parout.coeff.XCPlon = XCPlon;
+%     parout.coeff.XCPlat = XCPlat;
+%         
+%     sgn = sign(dot(cross(Myz, Fyz), [1 0 0])); 
+%     XCPtot = (sgn * norm(Myz)/norm(Fyz));
+%     err = 100*abs((acosd(dot(Fyz/norm(Fyz), Myz/norm(Myz))) - 90)/90);
+%     XCPtot = XCPtot - polyval(settings.regPoli, err); 
+%     parout.coeff.XCPtot = XCPtot; 
+
+end
\ No newline at end of file
diff --git a/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m b/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m
index c1e41f33..b5a72dd1 100644
--- a/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m
+++ b/data/2023_Gemini_Portugal_October/config2023_Gemini_Portugal_October.m
@@ -155,9 +155,9 @@ settings.ada.flag_apo    =   false;                                         % Tr
 settings.ada.shadowmode = 18;
 
 if ~settings.parafoil
-    settings.ada.para.z_cut  = rocket.parachutes(1,1).finalAltitude;
+    settings.ada.para.z_cut  = rocket.parachutes{1,1}.finalAltitude;
 else
-    settings.ada.para.z_cut  = rocket.parachutes(1,2).finalAltitude;
+    settings.ada.para.z_cut  = rocket.parachutes{1,2}.finalAltitude;
 end
 %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS
 % motor model for kalman filter prediction/correction scheme
diff --git a/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m b/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m
index 0f658f06..c01a13e2 100644
--- a/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m
+++ b/data/2024_Lyra_Portugal_October/config2024_Lyra_Portugal_October.m
@@ -161,9 +161,9 @@ settings.ada.flag_apo    =   false;                                         % Tr
 settings.ada.shadowmode = 18;
 
 if ~settings.parafoil
-    settings.ada.para.z_cut  = rocket.parachutes(1,1).finalAltitude;
+    settings.ada.para.z_cut  = rocket.parachutes{1,1}.finalAltitude;
 else
-    settings.ada.para.z_cut  = rocket.parachutes(1,2).finalAltitude;
+    settings.ada.para.z_cut  = rocket.parachutes{1,2}.finalAltitude;
 end
 
 %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS
diff --git a/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m b/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m
index c25bb3a3..24846125 100644
--- a/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m
+++ b/data/2024_Lyra_Roccaraso_September/config2024_Lyra_Roccaraso_September.m
@@ -157,9 +157,9 @@ settings.ada.altitude_confidence_thr = 5;                                   % If
 settings.ada.shadowmode = 10;
 
 if ~settings.parafoil
-    settings.ada.z_cut  = rocket.parachutes(1,1).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,1}.finalAltitude;
 else
-    settings.ada.z_cut  = rocket.parachutes(1,2).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,2}.finalAltitude;
 end
 
 
diff --git a/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m b/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m
index 06324f98..34ef9882 100644
--- a/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m
+++ b/data/2025_Orion_Portugal_October/config2025_Orion_Portugal_October.m
@@ -158,9 +158,9 @@ settings.ada.altitude_confidence_thr = 5;                                   % If
 settings.ada.shadowmode = 18;
 
 if ~settings.parafoil
-    settings.ada.z_cut  = rocket.parachutes(1,1).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,1}.finalAltitude;
 else
-    settings.ada.z_cut  = rocket.parachutes(1,2).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,2}.finalAltitude;
 end
 
 %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS
diff --git a/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m b/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m
index 2ca52bb3..f6127a3b 100644
--- a/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m
+++ b/data/2025_Orion_Roccaraso_September/config2025_Orion_Roccaraso_September.m
@@ -158,9 +158,9 @@ settings.ada.altitude_confidence_thr = 5;                                   % If
 settings.ada.shadowmode = 10;
 
 if ~settings.parafoil
-    settings.ada.z_cut  = rocket.parachutes(1,1).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,1}.finalAltitude;
 else
-    settings.ada.z_cut  = rocket.parachutes(1,2).finalAltitude;
+    settings.ada.z_cut  = rocket.parachutes{1,2}.finalAltitude;
 end
 
 %% MEA TUNING PARAMETERS / MOTOR SHUT DOWN TUNING PARAMETERS
diff --git a/simulator/configs/configControl.m b/simulator/configs/configControl.m
index 5ae96e56..c33919e8 100644
--- a/simulator/configs/configControl.m
+++ b/simulator/configs/configControl.m
@@ -138,4 +138,4 @@ contSettings.N_prediction_threshold = 5;
 
 %% Identification settings for algorithms
 rocket.airbrakes.identification = settings.identification;
-rocket.parachutes(2,2).controlParams.identification = settings.identification;
\ No newline at end of file
+rocket.parachutes{2,2}.controlParams.identification = settings.identification;
\ No newline at end of file
diff --git a/simulator/configs/configMontecarlo.m b/simulator/configs/configMontecarlo.m
index 33148454..79c56850 100644
--- a/simulator/configs/configMontecarlo.m
+++ b/simulator/configs/configMontecarlo.m
@@ -73,8 +73,13 @@ if settings.montecarlo
             end
 
             %%%
-            for i =1:N_sim
-                stoch.State.xcgTime(:,i) =  rocket.coefficients.state.xcgTime/rocket.motor.time(end) .* stoch.expTime(i,end);  % Xcg time
+            % xcgTime must be updated ONLY if rocket.dynamicDerivatives is
+            % enabled, otherwise the coefficients do not depend on xcg, and
+            % it can be handled directly by the Rocket class
+            if rocket.dynamicDerivatives
+                for i =1:N_sim
+                    stoch.State.xcgTime(:,i) =  rocket.coefficients.state.xcgTime/rocket.motor.time(end) .* stoch.expTime(i,end);  % Xcg time
+                end
             end
 
             %%% Aero coefficients uncertainty
@@ -84,7 +89,7 @@ if settings.montecarlo
             stoch.aer_percentage = normrnd(mu_aer,sigma_aer,N_sim,1);
 
             %%% wind parameters
-            wind = WindCustom(mission);
+            wind = Wind(mission);
             stoch.wind_params.altitudes = [0 140 500 1000 1500 2000 2500 3000 3500 4000];
             wind.altitudes = stoch.wind_params.altitudes;
 
@@ -136,7 +141,6 @@ if settings.montecarlo
                     wind.elevationParameters = [stoch.wind_params.ElMean; stoch.wind_params.ElStd];
             end
 
-            wind.updateAll();
             stoch.wind = wind;
 
             %%% mass offset distribution
@@ -177,7 +181,7 @@ if settings.montecarlo
 
             N_sim = length(Az);
 
-            wind = WindCustom(mission);
+            wind = Wind(mission);
             wind.altitudes = 0;
             wind.magnitudeDistribution = "u";
             wind.azimuthDistribution = "u";
diff --git a/simulator/configs/configPayload.m b/simulator/configs/configPayload.m
index 6fdf999d..42f60bea 100644
--- a/simulator/configs/configPayload.m
+++ b/simulator/configs/configPayload.m
@@ -37,13 +37,13 @@ payload.simParam.incControl = true;
 % payload.simParam.WES0 = environment.wind; % Windspeed considered in the subtraction
 
 % P and PI controller
-rocket.parachutes(2,2).controlParams.Kp = 0.4;
-rocket.parachutes(2,2).controlParams.Ki = 0.08;
-rocket.parachutes(2,2).controlParams.uMax = 0.1;
-rocket.parachutes(2,2).controlParams.uMin = -0.1;
-rocket.parachutes(2,2).controlParams.deltaA_tau = 0.4; % [s], absolutely arbitrary value
-rocket.parachutes(2,2).controlParams.deltaA_delay = 0; % [s], absolutely arbitrary value
-rocket.parachutes(2,2).controlParams.deltaA_maxSpeed = deg2rad(300);
+rocket.parachutes{2,2}.controlParams.Kp = 0.4;
+rocket.parachutes{2,2}.controlParams.Ki = 0.08;
+rocket.parachutes{2,2}.controlParams.uMax = 0.1;
+rocket.parachutes{2,2}.controlParams.uMin = -0.1;
+rocket.parachutes{2,2}.controlParams.deltaA_tau = 0.4; % [s], absolutely arbitrary value
+rocket.parachutes{2,2}.controlParams.deltaA_delay = 0; % [s], absolutely arbitrary value
+rocket.parachutes{2,2}.controlParams.deltaA_maxSpeed = deg2rad(300);
 
 %% Guidance algorithm
 % Algorithm selection: choose from "closed loop", "t-approach"
diff --git a/simulator/configs/configSimulator.m b/simulator/configs/configSimulator.m
index a1433d26..b30ca5be 100644
--- a/simulator/configs/configSimulator.m
+++ b/simulator/configs/configSimulator.m
@@ -20,7 +20,7 @@ configFlags;
 
 
 %% Mission parameters
-mission = Mission(true);
+mission = Mission(true, 'changeMatlabPath', true);
 rocket = Rocket(mission);
 environment = Environment(mission, rocket.motor);
 
diff --git a/simulator/mainMontecarlo.m b/simulator/mainMontecarlo.m
index d66be516..594c2851 100644
--- a/simulator/mainMontecarlo.m
+++ b/simulator/mainMontecarlo.m
@@ -115,19 +115,21 @@ for alg_index = 4
     motor_K = settings.motor.K;
 
     parfor i = 1:N_sim
-        rocket_vec{i} = copy(rocket);
+        rocket_vec{i} = rocket;
         settings_mont = settings_mont_init;
         settings_mont.motor.expThrust = stoch.thrust(i,:);                      % initialize the thrust vector of the current simulation (parfor purposes)
         settings_mont.motor.expTime = stoch.expTime(i,:);                     % initialize the time vector for thrust of the current simulation (parfor purposes)
         settings_mont.motor.K = stoch.Kt(i,:);                  % 
-        settings_mont.State.xcgTime = stoch.State.xcgTime(:,i);                 % initialize the baricenter position time vector
         settings_mont.mass_offset = stoch.mass_offset(i);
         settings_mont.OMEGA = stoch.OMEGA_rail(i);
         settings_mont.PHI = stoch.PHI_rail(i);
 
+        if isfield(stoch, 'State')
+            settings_mont.State.xcgTime = stoch.State.xcgTime(:,i);                 % initialize the baricenter position time vector
+        end
+
         if isempty(wind_vec{i})
-            wind_vec{i} = copy(stoch.wind);
-            wind_vec{i}.updateAll();
+            wind_vec{i} = stoch.wind.updateAll();
         end
         
         settings_mont.wind = wind_vec{i};
@@ -314,8 +316,7 @@ for alg_index = 4
     p_50 = normcdf([settings.z_final-50, settings.z_final+50],apogee.altitude_mean,apogee.altitude_std);
     apogee.accuracy_gaussian_50 =( p_50(2) - p_50(1) )*100;
 
-    %% 
-    clc
+    %%     
     for ii = 1:N_sim
         if sum(save_thrust{ii}.sensors.ada.apo_times == -1) > 1
             disp("Problems with ADA " + num2str(ii));
@@ -467,8 +468,8 @@ for alg_index = 4
             if (settings.scenario == "descent" || settings.scenario == "full flight") && settings.parafoil
                 fprintf(fid,'PARAFOIL \n\n');
                 fprintf(fid,'Guidance approach %s \n',contSettings.payload.guidance_alg);
-                fprintf(fid,'PID proportional gain %s \n',rocket.parachutes(2,2).controlParams.Kp);
-                fprintf(fid,'PID integral gain %s \n',rocket.parachutes(2,2).controlParams.Ki);
+                fprintf(fid,'PID proportional gain %s \n',rocket.parachutes{2,2}.controlParams.Kp);
+                fprintf(fid,'PID integral gain %s \n',rocket.parachutes{2,2}.controlParams.Ki);
                 fprintf(fid,'Opening altitude %s \n', num2str(settings.ada.para.z_cut));
             end
             fprintf(fid,'MASS: \n\n');
diff --git a/simulator/src/export_HILdataADA.m b/simulator/src/export_HILdataADA.m
index 8004c43d..4c3d4e19 100644
--- a/simulator/src/export_HILdataADA.m
+++ b/simulator/src/export_HILdataADA.m
@@ -12,7 +12,7 @@ export configuration files for ADA algorithm (for our friends of software develo
         configValues = [settings.frequencies.ADAFrequency,settings.ada.shadowmode, ...
             settings.ada.v_thr+2.5,settings.ada.count_thr,settings.ada.Q(1,1), ...
             settings.ada.Q(2,2),settings.ada.Q(3,3),settings.ada.R,101250,288.15,...
-            settings.ada.P0(1,1),rocket.parachutes(1,1).finalAltitude];
+            settings.ada.P0(1,1),rocket.parachutes{1,1}.finalAltitude];
         configADAvarNames = {'ADA_FREQUENCY','ADA_SHADOWMODE',...
             'ADA_VELOCITY_THRESHOLD','ADA_COUNTER_THRESHOLD','ADA_Q_11',...
             'ADA_Q_22','ADA_Q_33','ADA_R','mslPressure','mslTemperature','P0',...
diff --git a/simulator/src/export_HILdataPRF.m b/simulator/src/export_HILdataPRF.m
index 523c2a6c..40e1cc3e 100644
--- a/simulator/src/export_HILdataPRF.m
+++ b/simulator/src/export_HILdataPRF.m
@@ -54,8 +54,8 @@
             settings.payload.target(2),environment.z0,environment.lat0,...
             environment.lon0,environment.z0,wgs84Ellipsoid);
         configValues = [target_LAT, target_LON, contSettings.payload.mult_EMC,...
-            contSettings.payload.d, rocket.parachutes(2,2).controlParams.Kp,...
-            rocket.parachutes(2,2).controlParams.Ki];
+            contSettings.payload.d, rocket.parachutes{2,2}.controlParams.Kp,...
+            rocket.parachutes{2,2}.controlParams.Ki];
         configPRFvarNames = {'TARGET_LAT','TARGET_LON','MULT_EMC','D_EMTP','Kp', 'Ki'};
         for i = 1:size(configValues,2)
             configPRF_export_table(1,i) = table(configValues(1,i));
diff --git a/simulator/src/std_run.m b/simulator/src/std_run.m
index b1685d21..c18e077c 100644
--- a/simulator/src/std_run.m
+++ b/simulator/src/std_run.m
@@ -51,14 +51,16 @@ if nargin > 5
     rocket.coefficients.total = settings_mont.Coeffs;
     wind = settings_mont.wind;
 
-    rocket.coefficients.state.xcgTime = settings_mont.State.xcgTime;
+    if isfield(settings_mont, 'State')
+        rocket.coefficients.state.xcgTime = settings_mont.State.xcgTime;
+    end
     environment.omega = settings_mont.OMEGA;
     environment.phi = settings_mont.PHI;
 end
 
 if ~exist("wind", "var")
     % If the wind was not already defined, generate new one
-    wind = WindCustom(mission);
+    wind = Wind(mission);
 end
 
 if settings.electronics % global variables slow down a bit the comunication over thread, we don't need these for montecarlo analysis
@@ -114,7 +116,6 @@ end
 std_setInitialParams;
 
 rocket.massNoMotor = rocket.massNoMotor + settings.mass_offset;
-rocket.updateMass;
 
 %% SENSORS INIT
 run(strcat('initSensors', mission.name));
@@ -529,7 +530,7 @@ while settings.flagStopIntegration && n_old < nmax                          % St
         t_change_ref_ABK = t1 + settings.servo.delay;
     end
     if t1-t_last_prf_control >= 1/settings.frequencies.prfFrequency - 1e-6
-        t_change_ref_PRF = t1 + rocket.parachutes(2,2).controlParams.deltaA_delay;
+        t_change_ref_PRF = t1 + rocket.parachutes{2,2}.controlParams.deltaA_delay;
     end
     % assemble total state
     [n, ~] = size(Yf);
diff --git a/simulator/src/std_run_parts/std_setInitialParams.m b/simulator/src/std_run_parts/std_setInitialParams.m
index f7bda1ae..1b505d8a 100644
--- a/simulator/src/std_run_parts/std_setInitialParams.m
+++ b/simulator/src/std_run_parts/std_setInitialParams.m
@@ -18,6 +18,7 @@ end
 %% ADA Initialization
 
 settings.ada.t_ada       =   -1;                    % Apogee detection timestamp
+settings.ada.t_para      =   -1;                    % Apogee detection timestamp
 settings.ada.flag_apo    =   false;                 % True when the apogee is detected
 settings.ada.flagOpenPara =  false;                 % True when the main parachute should be opened
 
@@ -86,7 +87,7 @@ deltaA_ref_new = 0;
 deltaA_ref_old = 0;
 deltaA_ref = [deltaA_ref_old,deltaA_ref_new];
 % servo motor time delay - in ode it needs to be set to change reference value
-t_change_ref_PRF =      t0 + rocket.parachutes(2,2).controlParams.deltaA_delay;
+t_change_ref_PRF =      t0 + rocket.parachutes{2,2}.controlParams.deltaA_delay;
 t_last_prf_control = 0;
 
 
diff --git a/simulator/src/std_run_parts/std_subsystems.m b/simulator/src/std_run_parts/std_subsystems.m
index 1cd97027..99cece5c 100644
--- a/simulator/src/std_run_parts/std_subsystems.m
+++ b/simulator/src/std_run_parts/std_subsystems.m
@@ -143,7 +143,7 @@ if ~settings.flagAscent && settings.parafoil
             pos_est(3) = -pos_est(3)-environment.z0;
 
             [deltaA_ref_new,contSettings] = run_parafoilGuidance(pos_est, sensorData.nas.states(end,4:5), wind_est, ...
-                settings.payload.target, contSettings, rocket.parachutes(2,2).controlParams);
+                settings.payload.target, contSettings, rocket.parachutes{2,2}.controlParams);
         end
 
     end
diff --git a/trajectoryGeneration/mainTrajectoryGeneration.m b/trajectoryGeneration/mainTrajectoryGeneration.m
index 1fb42f04..548a073a 100644
--- a/trajectoryGeneration/mainTrajectoryGeneration.m
+++ b/trajectoryGeneration/mainTrajectoryGeneration.m
@@ -88,7 +88,7 @@ V0 = [0 0 0]';
 W0 = [0 0 0]';
 
 %%% wind initialization
-wind = WindCustom(mission);
+wind = Wind(mission);
 [uw, vw, ww] = wind.getVels(0);
 settings.constWind = [uw, vw, ww];
 
-- 
GitLab