From 5876a34bb31fd3099bb4bfeaeb038f5eb0ddd88d Mon Sep 17 00:00:00 2001 From: Thomas Lambert <t.lambert@uliege.be> Date: Tue, 30 May 2023 22:57:06 +0200 Subject: [PATCH] feat(Result): add support all perf in plot --- src/classes/@Result/plotperf.m | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/classes/@Result/plotperf.m b/src/classes/@Result/plotperf.m index 7378db2..ea09648 100644 --- a/src/classes/@Result/plotperf.m +++ b/src/classes/@Result/plotperf.m @@ -44,7 +44,7 @@ function plotperf(self, varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Defaults and constants - DEF.ALLOWED_PROPERTIES = {'cT', 'cQ', 'cP'}; + DEF.ALLOWED_PROPERTIES = {'thrust', 'torque', 'power', 'eff', 'cT', 'cQ', 'cP'}; DEF.allowed_oper = self.operPts.Properties.VariableNames; DEF.ALLOWED_SOLVERS = {'leishman', 'indfact', 'indvel', 'stahlhut'}; @@ -56,14 +56,15 @@ function plotperf(self, varargin) figure('Name', 'Rotor performance'); end - filtered = filtertable(self.summarize, ... - operPt.altitude, operPt.speed, ... - operPt.rpm, operPt.collective); + [filtered, idx] = self.filter(operPt.altitude, operPt.speed, operPt.rpm, operPt.collective); for iSolv = 1:length(solvers) - perfSolv = sprintf('%s_%s', perf, solvers{iSolv}); - plot(filtered.(oper), filtered.(perfSolv), 'DisplayName', solvers{iSolv}); - if iSolv == 1 + thissolv = solvers{iSolv}; + + if ~isempty(self.(thissolv)) + dataVect = vectorize(filtered.(thissolv), perf); + + plot(self.operPts(idx, :).(oper), dataVect, 'DisplayName', solvers{iSolv}); hold on; end end @@ -84,7 +85,7 @@ function [perf, oper, solvers, operPt, newFig] = parseinputs(DEF, varargin) addRequired(p, 'speed', valData); addRequired(p, 'rpm', valData); addRequired(p, 'collective', valData); - addParameter(p, 'solvers', {'leishman', 'indfact', 'indvel', 'stahlhut'}); + addParameter(p, 'solvers', DEF.ALLOWED_SOLVERS); addParameter(p, 'newFig', false, valLogi); parse(p, varargin{:}); @@ -100,18 +101,13 @@ function [perf, oper, solvers, operPt, newFig] = parseinputs(DEF, varargin) newFig = p.Results.newFig; end -function filtered = filtertable(inputTable, alt, speed, rpm, coll) - % FILTERTABLE Filter the data with corresponding alt, coll, rpm and speed from the summary table - - iAlt = getidx('altitude', alt); - iSpeed = getidx('speed', speed); - iRpm = getidx('rpm', rpm); - iColl = getidx('collective', coll); +function vect = vectorize(struct, prop) + % VECTORIZE Transform struct array into a vector - filtered = inputTable(iAlt & iColl & iRpm & iSpeed, :); + vect = zeros(1, length(struct)); - function idx = getidx(type, val) - idx = inputTable.(type) == val | isnan(val); + for i = 1:length(struct) + vect(i) = struct(i).(prop); end end -- GitLab