diff --git a/functions/config/addParameter.m b/functions/config/addParameter.m new file mode 100644 index 0000000000000000000000000000000000000000..4738ffa4137c1d1b42fab4961644ee0e7c05068a --- /dev/null +++ b/functions/config/addParameter.m @@ -0,0 +1,260 @@ +function parameters = addParameter(name, distr, type, A, B, varargin) +% createParameter - create the struct containing the attributes to compute +% the uncertanties in a given parameter +% +% it is assumed that the input data contains the field to be modified +% +% INPUTS: +% name, string: parameter name +% distr, int: input format and distribution type +% - 1: uniform, A [min]; B [max] +% val > A; val < B +% +% - 2: uniform, A [% min]; B [% max] +% val > A*v0 ; val < B*v0 (v0: nominal value) +% +% - 3: uniform, A [delta Min]; B [delta Max] +% val > v0 + A; val < v0 + B +% +% - 4: uniform, A [delta% min]; B [delta% max] +% val > (1 + A)*v0; val < (1 + B)*v0 +% +% - 5: gaussian, A [average]; B [standard deviation] +% mu = A; STD = B; +% val = randn +% +% - 6: gaussian, A [delta% avg]; B [standard deviation] +% mu = A; STD = B; +% val = (1 + randn)*v0 +% +% type, int: uncertanty type (meaningfull only if the uncertanty is +% applied to and array like the Thrust or the CA) +% - 1: the same uncertanty value is applied to each element +% - 2: the uncertanty is computed independently for each +% element +% +% A, double: A-parameter +% +% B, double: B-parameter +% +% parameters (optional), cell array: previous parameters +% (if present, the new parameter will be appended to the given cell array) +% +% OUTPUTS: +% par: struct, parameter struct + +if (nargin < 5 || nargin > 6), error('Wrong input arguments count: requires 5 or 6 arguments'), end +if mod(distr, 1) ~= 0, error('distr shall be integer'); end +if mod(type, 1) ~= 0, error('type shall be integer'); end +if distr < 1 || distr > 6, error('distr shall be an integer value between 1 and 6'); end +if type < 1 || type > 2, error('B shall be an integer value between 1 and 2'); end + +%% Loading data +switch name + case {'CA', 'CYB', 'CY0', 'CNA', 'CN0', 'Cl', 'Clp', 'Cma', 'Cm0', 'Cmad', 'Cmq', 'Cnb', 'Cn0', 'Cnr', 'Cnp'} + % load aerodynamics from data + case {'omega', 'phi'} + data = loadConfig('environmentConfig.m'); + case {'structMass', 'expMass'} + data = loadConfig('massConfig.m'); + case {'thrust'} + data = loadConfig('engineConfig.m'); + case {'Ixx', 'Iyy', 'Izz'} + data = loadConfig('inertiaConfig.m'); + case {'drogueS', 'drogueMass', 'drogueCL', 'drogueCD', 'paramainS', 'paramainMass', 'paramainCL', 'paramainCD'} + data = loadConfig('parachuteConfig.m'); + case {'rocketDiameter', 'rocketLCenter', 'centerOfMass', 'finRootChord', 'finFreeChord', 'finHeigth', 'finSemiThickness', 'ogiveLength', 'ogivePMod', 'ogiveCMod'} + data = loadConfig('geometryConfig.m'); + otherwise + error(strcat('Parameter: <', name,'> not known')); +end + +%% Creating parameters +if nargin == 5, len = 0; else + parameters = varargin{1}; + len = length(parameters); +end + +parameter = struct; +parameter.name = name; +parameter.distribution = distr; +parameter.type = type; +parameter.A = A; +parameter.B = B; +parameter.code = nan; + +switch name + % Aerodynamic coefficients ---- + case 'CA' + parameter.value = data.Coeffs(1, :, :, :, :, :, :); + parameter.code = 1; + parameter.UDM = '-'; + case 'CYB' + parameter.value = data.Coeffs(2, :, :, :, :, :, :); + parameter.code = 2; + parameter.UDM = '-'; + case 'CY0' + parameter.value = data.Coeffs(3, :, :, :, :, :, :); + parameter.code = 3; + parameter.UDM = '-'; + case 'CNA' + parameter.value = data.Coeffs(4, :, :, :, :, :, :); + parameter.code = 4; + parameter.UDM = '-'; + case 'CN0' + parameter.value = data.Coeffs(5, :, :, :, :, :, :); + parameter.code = 5; + parameter.UDM = '-'; + case 'Cl' + parameter.value = data.Coeffs(6, :, :, :, :, :, :); + parameter.code = 6; + parameter.UDM = '-'; + case 'Clp' + parameter.value = data.Coeffs(7, :, :, :, :, :, :); + parameter.code = 7; + parameter.UDM = '-'; + case 'Cma' + parameter.value = data.Coeffs(8, :, :, :, :, :, :); + parameter.code = 8; + parameter.UDM = '-'; + case 'Cm0' + parameter.value = data.Coeffs(9, :, :, :, :, :, :); + parameter.code = 9; + parameter.UDM = '-'; + case 'Cmad' + parameter.value = data.Coeffs(10, :, :, :, :, :, :); + parameter.code = 10; + parameter.UDM = '-'; + case 'Cmq' + parameter.value = data.Coeffs(11, :, :, :, :, :, :); + parameter.code = 11; + parameter.UDM = '-'; + case 'Cnb' + parameter.value = data.Coeffs(12, :, :, :, :, :, :); + parameter.code = 12; + parameter.UDM = '-'; + case 'Cn0' + parameter.value = data.Coeffs(13, :, :, :, :, :, :); + parameter.code = 13; + parameter.UDM = '-'; + case 'Cnr' + parameter.value = data.Coeffs(14, :, :, :, :, :, :); + parameter.code = 14; + parameter.UDM = '-'; + case 'Cnp' + parameter.value = data.Coeffs(15, :, :, :, :, :, :); + parameter.code = 15; + parameter.UDM = '-'; + % rocket/launch high level parameters ---- + case 'omega' + parameter.value = data.OMEGA; + parameter.code = 16; + parameter.UDM = 'rad'; + case 'phi' + parameter.value = data.PHI; + parameter.code = 17; + parameter.UDM = 'rad'; + case 'structMass' + parameter.value = data.structure; + parameter.code = 18; + parameter.UDM = 'kg'; + case 'expMass' + parameter.value = data.motor.expM; + parameter.code = 19; + parameter.UDM = 'kg'; + case 'thrust' + parameter.value = data.motor.expThrust; + parameter.code = 20; + parameter.UDM = 'N'; + case 'Ixx' + parameter.value = data.Ixx; + parameter.code = 21; + parameter.UDM = 'kg*m^4'; + case 'Iyy' + parameter.value = data.Iyy; + parameter.code = 22; + parameter.UDM = 'kg*m^4'; + case 'Izz' + parameter.value = data.Izz; + parameter.code = 23; + parameter.UDM = 'kg*m^4'; + case 'drogueS' + parameter.value = data.para(1, 1).S; + parameter.code = 24; + parameter.UDM = 'm2'; + case 'drogueMass' + parameter.value = data.para(1, 1).mass; + parameter.code = 25; + parameter.UDM = 'kg'; + case 'drogueCL' + parameter.value = data.para(1, 1).CL; + parameter.code = 26; + parameter.UDM = '-'; + case 'drogueCD' + parameter.value = data.para(1, 1).CD; + parameter.code = 27; + parameter.UDM = '-'; + case 'paramainS' + parameter.value = data.para(2, 1).S; + parameter.code = 28; + parameter.UDM = 'm2'; + case 'paramainMass' + parameter.value = data.para(2, 1).mass; + parameter.code = 29; + parameter.UDM = 'kg'; + case 'paramainCL' + parameter.value = data.para(2, 1).CL; + parameter.code = 30; + parameter.UDM = '-'; + case 'paramainCD' + parameter.value = data.para(2, 1).CD; + parameter.code = 31; + parameter.UDM = '-'; + % rocket geometry --- available with the stability run only + case 'rocketDiameter' + parameter.value = data.C; + parameter.code = 32; + parameter.UDM = 'm'; + case 'rocketLCenter' + parameter.value = data.Lcenter; + parameter.code = 33; + parameter.UDM = 'm'; + case 'centerOfMass' + parameter.value = data.xcg; + parameter.code = 34; + parameter.UDM = 'm'; + case 'finRootChord' + parameter.value = data.Chord1; + parameter.code = 35; + parameter.UDM = 'm'; + case 'finFreeChord' + parameter.value = data.Chord2; + parameter.code = 36; + parameter.UDM = 'm'; + case 'finHeigth' + parameter.value = data.Height; + parameter.code = 37; + parameter.UDM = 'm'; + case 'finSemiThickness' + parameter.value = data.zupRaw; + parameter.code = 38; + parameter.UDM = 'm'; + case 'ogiveLength' + parameter.value = data.Lnose; + parameter.code = 39; + parameter.UDM = 'm'; + case 'ogivePMod' + parameter.value = data.pMod; + parameter.code = 40; + parameter.UDM = '-'; + case 'ogiveCMod' + parameter.value = data.cMod; + parameter.code = 41; + parameter.UDM = '-'; + otherwise + error(strcat('Parameter: <', name,'> not known')); +end + +parameters{len+1} = parameter; +end + diff --git a/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m index 5c7990c060aa3e27bf31f31f56cf9aac388faf42..d22fbebb25fbf20ce0505079e8634f42061ad52f 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m @@ -5,21 +5,21 @@ %% Boat-tail % The boat-tail is simulated as a trunc of cone with the major diameter % equal to the rocket one (settings.C) -geometry.boatLength = 000; % [m] Boat-tail length -geometry.boatDiameter = 000; % [m] Boat-tail base diameter +geometry.boat.Length = 000; % [m] Boat-tail length +geometry.boat.Diameter = 000; % [m] Boat-tail base diameter %% Rocket ogive and central body -geometry.caliber = 000; % [m] Caliber (Fuselage Diameter) -geometry.crossSection = pi*geometry.C^2/4; % [m^2] Cross-sectional Surface -geometry.noseLength = 000; % [m] Nosecone Length -geometry.ogiveType = 'MHAACK'; % [-] Nosecone shape -geometry.nosePower = 000; %3/4; % [-] Nosecone power type parameter -geometry.noseP = 000; %1.250152e+00; % [-] P coefficient for modified nosecone shapes -geometry.noseC = 000; %1.799127e-01; % [-] C coefficient for modified nosecone shapes +geometry.center.length = 000; %1.517; % [m] Central body length +geometry.center.caliber = 000; % [m] Caliber (Fuselage Diameter) +geometry.center.crossSection = pi*geometry.C^2/4; % [m^2] Cross-sectional Surface -geometry.centerLength = 000; %1.517; % [m] Central body length -geometry.mNoMot = 000; %16.423; % [kg] Mass of everything above engine -geometry.xcgNoMot = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) +geometry.nose.length = 000; % [m] Nosecone Length +geometry.nose.ogiveType = 'MHAACK'; % [-] Nosecone shape +geometry.nose.power = 000; %3/4; % [-] Nosecone power type parameter +geometry.nose.p = 000; %1.250152e+00; % [-] P coefficient for modified nosecone shapes +geometry.nose.c = 000; %1.799127e-01; % [-] C coefficient for modified nosecone shapes +% geometry.mNoMot = 000; %16.423; % [kg] Mass of everything above engine +% geometry.xcgNoMot = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) %% Aerodynamics %%% Pitot tube diff --git a/missions/2024_Lyra_Roccaraso_September/config/massConfig.m b/missions/2024_Lyra_Roccaraso_September/config/massConfig.m index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9566315aa5126f226f7622859468af72a53abc20 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/massConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/massConfig.m @@ -0,0 +1,10 @@ +% CONFIG - This script contains all masses + + +mass.noseCone = 0; % [kg] Nosecone Mass +mass.structure = 0; % [kg] Total structural Mass +%mass.noEngine + mass.motor.structure + ... mass.noseCone; +mass.initial = 0; +%mass.structure + mass.motor.expM(1); % [kg] Total initial Mass +mass.mTotalTime = 0; +%mass.noEngine + mass.motor.mc + mass.noseCone + mass.motor.expected; % Total mass (in time)