diff --git a/RoccarasoFlight/postprocessing/RPS/cleanData/ROC2/engineFlightData.mat b/RoccarasoFlight/postprocessing/RPS/cleanData/ROC2/engineFlightData.mat index aef81bab5ef6ee0f4df703b96c10110556d95a46..580fd2205e9eaad10b14e2b4a6085a66b9a27bdc 100644 Binary files a/RoccarasoFlight/postprocessing/RPS/cleanData/ROC2/engineFlightData.mat and b/RoccarasoFlight/postprocessing/RPS/cleanData/ROC2/engineFlightData.mat differ diff --git a/RoccarasoFlight/postprocessing/RPS/configDataAnalyzer.m b/RoccarasoFlight/postprocessing/RPS/configDataAnalyzer.m index 441dcc97598c2c3f464aa411ec2b11bf716684e7..d8ff216dafbd62b3d4b5de2232a2d0ad686884f6 100644 --- a/RoccarasoFlight/postprocessing/RPS/configDataAnalyzer.m +++ b/RoccarasoFlight/postprocessing/RPS/configDataAnalyzer.m @@ -22,6 +22,7 @@ clear CEA_db %% SIMULATION SETTINGS settings.interpMthd = 1; +settings.saveResults = 1; %% CONSTANTS settings.g0 = 9.806; % [m/s2] Acceleration of Gravity, constant diff --git a/RoccarasoFlight/postprocessing/RPS/dataAnalyzer.m b/RoccarasoFlight/postprocessing/RPS/dataAnalyzer.m index ca73d482882adb77bf26974dfaa359276ef2373b..081f1fdd1e5451b9665d1ced8464a8e4c3c9ef40 100644 --- a/RoccarasoFlight/postprocessing/RPS/dataAnalyzer.m +++ b/RoccarasoFlight/postprocessing/RPS/dataAnalyzer.m @@ -36,7 +36,7 @@ engine = tankEvacuation(engine); % Simulating the engine engineSim = combustionSimulation(engine, settings); -% Computing actual performance +% Computing actual performances engineFly = performanceReconstruction(engine, engineSim); %% PLOTTING @@ -44,6 +44,16 @@ fprintf('DATA ANALYSIS CONCLUDED: \n\n') fprintf('\t - Total Impulse simulated: %.2f\n', engineSim.performances.Itot) fprintf('\t - Total Impulse computed: %.2f\n', engineFly.Itot) +if settings.saveResults + msaEngineData.Mp = engineSim.mass.Mp; + msaEngineData.Mox = engineSim.mass.Mox; + msaEngineData.Mfu = engineSim.mass.Mfu; + msaEngineData.mp = engineSim.mfr.mp; + msaEngineData.time = engineSim.time; + msaEngineData.Thrust = engineSim.performances.T; + save('msaEngineData', 'msaEngineData'); +end + if settings.plots f1 = figure; yyaxis left diff --git a/RoccarasoFlight/postprocessing/RPS/engineData/engines/CEA_db.mat b/RoccarasoFlight/postprocessing/RPS/engineData/engines/CEA_db.mat index 92de427b9ecb77f7f42a48eb7eda47fdef275435..e1e3861b8edc88853c5be0794f2974b912720d30 100644 Binary files a/RoccarasoFlight/postprocessing/RPS/engineData/engines/CEA_db.mat and b/RoccarasoFlight/postprocessing/RPS/engineData/engines/CEA_db.mat differ diff --git a/RoccarasoFlight/postprocessing/RPS/engineData/engines/Furia/Furia.m b/RoccarasoFlight/postprocessing/RPS/engineData/engines/Furia/Furia.m index 7190b74c04cf1b46d10ba6f40da6562379955075..343a6d76c4a146f4025f6851f0575307881f0054 100644 --- a/RoccarasoFlight/postprocessing/RPS/engineData/engines/Furia/Furia.m +++ b/RoccarasoFlight/postprocessing/RPS/engineData/engines/Furia/Furia.m @@ -58,7 +58,7 @@ engine.data.lambda = 0.985; % [-] Loss due to nozzle divergence engine.data.Rc_CM = 0.5; engine.data.R_pre = 1.15; % [-] Ratio between pre-chamber length and port radius engine.data.R_post = 2.35; % [-] ratio between post-chamber length and port radius -engine.data.Pc0 = 10; % [bar] Initial pressure value +engine.data.Pc0 = 2; % [bar] Initial pressure value %%% PRE CC engine.data.Dpre = 66e-3; @@ -74,3 +74,8 @@ engine.data.Vpost = pi/4*engine.data.Dpost^2*engine.data.Lpost; engine.data.zopt = 0; % [m] Altitude of optimal expansion engine.data.RAO_Lratio = 0.8; % [-] Rao length ratio + +%% ENGINE TEST PARAMETERS +engine.postFire.Mox = 0.4445; % [kg] Oxidizer residual mass @ X = 1 +engine.postFire.Mfu = 0.7799; % [kg] Fuel residual mass + diff --git a/RoccarasoFlight/postprocessing/RPS/msaEngineData.mat b/RoccarasoFlight/postprocessing/RPS/msaEngineData.mat new file mode 100644 index 0000000000000000000000000000000000000000..1603214baff3dd313ed2ff0b4e98cc1f8bbf7a99 Binary files /dev/null and b/RoccarasoFlight/postprocessing/RPS/msaEngineData.mat differ diff --git a/RoccarasoFlight/postprocessing/RPS/src/combustionSimulation.m b/RoccarasoFlight/postprocessing/RPS/src/combustionSimulation.m index 19cad597d0dd54d74ed290e02fa2abc746045092..bdacbf726dbde03c0ea8d8ea92a7cf194c9893e7 100644 --- a/RoccarasoFlight/postprocessing/RPS/src/combustionSimulation.m +++ b/RoccarasoFlight/postprocessing/RPS/src/combustionSimulation.m @@ -83,8 +83,11 @@ OF = engineSim.mfr.mox./engineSim.mfr.mf; OF(1) = OF(2); engineSim.performances.OF = OF; +ii = find(OF < 2); +OF(ii) = 2; + % Integration of mass balance equation to retrieve pressure -[solution] = ode45(@(t, Pc) massBalance(t, Pc, engine, engineSim, settings, interpFun), tSpan, Pc0); +[solution] = ode23s(@(t, Pc) massBalance(t, Pc, engine, engineSim, settings, interpFun), tSpan, Pc0); % Evaluating solution derivative [Pc, ~] = deval(tSpan, solution); @@ -108,7 +111,7 @@ for ii = 1:length(Pc) end % Turning the array -Pe = Pe'; +Pe = real(Pe'); % Thrust coefficient cT = sqrt(2*y.^2./(y - 1).*(2./(y + 1)).^((y + 1)./(y - 1))).*sqrt(1 - (Pe./Pc).^((y - 1)./y)) * lambda + (Pe - Pamb)./Pc.*epsilon; @@ -122,6 +125,19 @@ Isp = T./engineSim.mfr.mox/g0; % Total impulse Itot = trapz(engineSim.time, T); +% Computing the oxidizer mass evolution +Mox = @(t, y) interp1(engineSim.time, engineSim.mfr.mox, t); +[~, Mox] = ode45(Mox, engineSim.time, engine.postFire.Mox); +Mox = flip(Mox); + +% Computing the fuel mass evolution +Mfu = @(t, y) interp1(engineSim.time, engineSim.mfr.mf, t); +[~, Mfu] = ode45(Mfu, engineSim.time, engine.postFire.Mfu); +Mfu = flip(Mfu); + +% Computing the propellant mass evolution +Mp = Mfu + Mox; + %% OUTPUT engineSim.cc.dr = dr; @@ -132,5 +148,8 @@ engineSim.performances.cT = cT; engineSim.performances.Isp = Isp; engineSim.performances.Itot = Itot; engineSim.mfr.mp = engineSim.mfr.mox + engineSim.mfr.mf; +engineSim.mass.Mox = Mox; +engineSim.mass.Mfu = Mfu; +engineSim.mass.Mp = Mp; diff --git a/RoccarasoFlight/postprocessing/RPS/src/dataLoader.m b/RoccarasoFlight/postprocessing/RPS/src/dataLoader.m index 253274bc6057b1794967114771f7c2cc552b8f9e..e84abd52a4b7f233f30f1a538ef4b17990015490 100644 --- a/RoccarasoFlight/postprocessing/RPS/src/dataLoader.m +++ b/RoccarasoFlight/postprocessing/RPS/src/dataLoader.m @@ -52,8 +52,8 @@ if strcmp(settings.testName, 'ROC1') flightData.srvVent = rawData.srvVent(is:js); elseif strcmp(settings.testName, 'ROC2') - % Defining the burning time - tb = 4.0; + % Defining the burning time - without ending transitory + tb = 3.5; % Defining the first index ip = 8481 * settings.frPT; @@ -78,8 +78,8 @@ elseif strcmp(settings.testName, 'ROC2') % Defining manual cutting indeces - [~, ic] = min(abs(0.980 - flightData.timePTop)); - [~, jc] = min(abs(0.980 + tb - flightData.timePTop)); + [~, ic] = min(abs(1.3 - flightData.timePTop)); + [~, jc] = min(abs(1.3 + tb - flightData.timePTop)); flightData.cutData.timePTop = flightData.timePTop(ic:jc); flightData.cutData.timePEng = flightData.timePEng(ic:jc); diff --git a/RoccarasoFlight/postprocessing/RPS/src/massBalance.m b/RoccarasoFlight/postprocessing/RPS/src/massBalance.m index cccae0b178926426dd03cfc3d989501114729b20..d5cd381a54c737dc82d0bb0db54e8f7f8678873d 100644 --- a/RoccarasoFlight/postprocessing/RPS/src/massBalance.m +++ b/RoccarasoFlight/postprocessing/RPS/src/massBalance.m @@ -21,8 +21,8 @@ mf = eval(strcat(interpFun, '(engineSim.time, engineSim.mfr.mf, t)')); dAp = eval(strcat(interpFun, '(engineSim.time, engineSim.cc.dAp, t)')); Ap = eval(strcat(interpFun, '(engineSim.time, engineSim.cc.Ap, t)')); -if t == 0 - OF = engineSim.performances.OF(2); +if mox/mf < 2 || isnan(mox/mf) + OF = 2; else OF = mox/mf; end diff --git a/RoccarasoFlight/postprocessing/RPS/src/tankEvacuation.m b/RoccarasoFlight/postprocessing/RPS/src/tankEvacuation.m index 89e9769dacf413a1737cc0b58d072067c8a0c694..ff911f16855c7160d2f54a11064c65605452b6bb 100644 --- a/RoccarasoFlight/postprocessing/RPS/src/tankEvacuation.m +++ b/RoccarasoFlight/postprocessing/RPS/src/tankEvacuation.m @@ -63,6 +63,14 @@ for i = 1 : length(p1) v(i + 1) = mox(i)./rho1(i)/(pi*d_pipe^2/4); end +% Adding transitory to injection mox +% tTrans = 0.1; +% [~, j] = min(abs(engine.acquisition.cutData.timePTop - engine.acquisition.cutData.timePTop(1) - tTrans)); +% moxTrans = linspace(mox(1), mox(2), j)'; +% mox = [moxTrans ; mox(3:end)]; +% time = [linspace(0, engine.acquisition.cutData.timePTop(j) - engine.acquisition.cutData.timePTop(1), j)' ; engine.acquisition.cutData.timePTop(3:end) - 2*engine.acquisition.cutData.timePTop(1) + engine.acquisition.cutData.timePTop(j)]; +% mox = interp1(time, mox(1:end-1), engine.acquisition.cutData.timePTop - engine.acquisition.cutData.timePTop(1)); + %% OUTPUT % ozydizer mass flow rate