diff --git a/classes/@Rocket/Rocket.m b/classes/@Rocket/Rocket.m index 7e39e879fb8a463b4548fcc69f138efdb8c08da4..b904ff43fb486dffea4585a0cfe4097d1b946563 100644 --- a/classes/@Rocket/Rocket.m +++ b/classes/@Rocket/Rocket.m @@ -153,12 +153,18 @@ classdef Rocket < Config coeffName); answer = ''; + if isempty(obj.coefficients.static) || isempty(obj.coefficientsHighAOA.static) answer = questdlg(['Coefficient matrices not found. ' ... 'Do you want to create new matrices?']); - elseif options.checkGeometry && ~all(obj.checkGeometry()) - answer = questdlg(['Coefficient matrices differ from rocket geometry. ' ... - 'Do you want to create new matrices?']); + elseif options.checkGeometry + [check, summary] = obj.checkGeometry(); + + if ~all(check) + disp(summary); + answer = questdlg(['Coefficient matrices differ from rocket geometry. ' ... + 'Do you want to create new matrices?']); + end end switch answer @@ -184,7 +190,7 @@ classdef Rocket < Config methods [coeffsValues, angle0] = interpCoeffs(obj, t, alpha, mach, beta, alt, c) - checks = checkGeometry(obj) + [checks, summary] = checkGeometry(obj) img = plot(obj) end diff --git a/classes/@Rocket/checkGeometry.m b/classes/@Rocket/checkGeometry.m index e61422f40605ed733434a8ef1bc5dbd9ff23c935..6608a6d88e94e0d213cf9eab3eb05862dea02cf6 100644 --- a/classes/@Rocket/checkGeometry.m +++ b/classes/@Rocket/checkGeometry.m @@ -1,11 +1,16 @@ -function checks = checkGeometry(obj) +function [checks, summary] = checkGeometry(obj) % checkGeometry - This methods checks if the rocket geometry % is consistent with the geometry of the % aerodynamic matrices % % OUTPUTS: % - checks (n fields of geometry, 1): boolean value of the geometry checks - + + names = ["Initial xcg"; "Final xcg"; "Ogive type"; "Diameter"; "Nose Length"; + "Nose p Mod"; "Nose c Mod"; "Center Length"; "Fins root chord"; + "Fins free chord"; "Fins height"; "Fins XLE"; "Fins number"; + "Boat Length"; "Boat final diameter"; "Boat type"]; + xCgRocket = round([ ... obj.xcg(1); ... obj.xcg(end) ... @@ -15,69 +20,78 @@ function checks = checkGeometry(obj) obj.coefficients.geometry.xcg(1); obj.coefficients.geometry.xcg(end); ], 3); + + noseTypeCheck = strcmp(obj.coefficients.geometry.ogType, obj.parafoil.noseType); + + geometryRocket = round([ + obj.diameter; + obj.parafoil.noseLength; + 0; 0; % Placeholders for nose p and c mod + obj.lengthCenter; + obj.rear.finsRootChord; + obj.rear.finsFreeChord; + obj.rear.finsHeight; + obj.rear.finsDeltaXFreeChord; + obj.rear.nPanel; + obj.rear.boatLength; + obj.rear.boatFinalDiameter; + ], 3); - if (obj.parafoil.noseCMod & obj.parafoil.nosePMod) == 0 % KARMAN ogive case, no modified p and c coefficients - geometryRocket = round([ - obj.diameter; - obj.parafoil.noseLength; - obj.lengthCenter; - obj.rear.finsRootChord; - obj.rear.finsFreeChord; - obj.rear.finsHeight; - obj.rear.finsDeltaXFreeChord; - obj.rear.nPanel; - obj.rear.boatLength; - obj.rear.boatFinalDiameter; - ], 3); - - geometryTest = round([ - obj.coefficients.geometry.diameter; - obj.coefficients.geometry.lNose; - obj.coefficients.geometry.lCenter; - obj.coefficients.geometry.chord1; - obj.coefficients.geometry.chord2; - obj.coefficients.geometry.height; - obj.coefficients.geometry.deltaXLE; - obj.coefficients.geometry.nPanel; - obj.coefficients.geometry.boatL; - obj.coefficients.geometry.boatD; - ], 3); - else % MHAAK ogive case, modified p and c coefficients - geometryRocket = round([ - obj.diameter; - obj.parafoil.noseLength; - obj.lengthCenter; + geometryTest = round([ + obj.coefficients.geometry.diameter; + obj.coefficients.geometry.lNose; + 0; 0; % Placeholders for nose p and c mod + obj.coefficients.geometry.lCenter; + obj.coefficients.geometry.chord1; + obj.coefficients.geometry.chord2; + obj.coefficients.geometry.height; + obj.coefficients.geometry.deltaXLE; + obj.coefficients.geometry.nPanel; + obj.coefficients.geometry.boatL; + obj.coefficients.geometry.boatD; + ], 3); + + if (obj.parafoil.noseCMod && obj.parafoil.nosePMod) + geometryRocket([3, 4]) = round([ ... obj.parafoil.noseCMod; - obj.parafoil.nosePMod; - obj.rear.finsRootChord; - obj.rear.finsFreeChord; - obj.rear.finsHeight; - obj.rear.finsDeltaXFreeChord; - obj.rear.nPanel; - obj.rear.boatLength; - obj.rear.boatFinalDiameter; - ], 3); - - geometryTest = round([ - obj.coefficients.geometry.diameter; - obj.coefficients.geometry.lNose; - obj.coefficients.geometry.lCenter; - obj.coefficients.geometry.cMod; - obj.coefficients.geometry.pMod; - obj.coefficients.geometry.chord1; - obj.coefficients.geometry.chord2; - obj.coefficients.geometry.height; - obj.coefficients.geometry.deltaXLE; - obj.coefficients.geometry.nPanel; - obj.coefficients.geometry.boatL; - obj.coefficients.geometry.boatD; - ], 3); + obj.parafoil.nosePMod;], 4); + + geometryTest([3, 4]) = round([ ... + obj.parafoil.noseCMod; + obj.parafoil.nosePMod;], 4); end - + + boatTypeCheck = strcmp(obj.coefficients.geometry.boatType, obj.rear.boatType); + checks = [ - xCgRocket == xCgTest; - strcmp(obj.coefficients.geometry.ogType, obj.parafoil.noseType); + ~obj.dynamicDerivatives | (xCgRocket == xCgTest); + noseTypeCheck; geometryRocket == geometryTest; - strcmp(obj.coefficients.geometry.boatType, obj.rear.boatType) + boatTypeCheck; ]; + + if nargout == 2 + % Summarize data and leave placeholders + ogiveType = ["CONE", "OGIVE", "POWER", "HAACK", "KARMAN", "MHAACK"]; + boatType = ["CONE", "OGIVE"]; + + % Convert text to DATCOM standard. !TODO: Si farebbe meglio con un + % enum + boatRocket = find(strcmp(obj.rear.boatType, boatType), 1, 'first') - 1; + boatTest = find(strcmp(obj.coefficients.geometry.boatType, boatType), 1, 'first') - 1; + + ogRocket = find(strcmp(obj.parafoil.noseType, ogiveType), 1, 'first') - 1; + ogTest = find(strcmp(obj.coefficients.geometry.ogType, ogiveType), 1, 'first') - 1; + + rocketData = [xCgRocket; ogRocket; geometryRocket; boatRocket]; + testData = [xCgTest; ogTest; geometryTest; boatTest]; + checkNames = names(~checks); + + if isempty(checkNames) + summary = table; + else + summary = table(rocketData(~checks), testData(~checks), ... + 'RowNames', checkNames, 'VariableNames', ["Rocket", "Coefficients"]); + end + end end \ No newline at end of file