Select Git revision
possibleMethods.m
Forked from an inaccessible project.
possibleMethods.m 5.27 KiB
classdef possibleMethods
% Gibt Auskunft über mögliche Berechnungsmethoden der einzelnen
% Berechnungsabschnitte (T, R, G, B, H, C) und enthält eine Funktion zum
% überprüfen des Methodenstructs
% pmd Berechnungstool Lagerimpedanz
% Autor: Steffen Puchtler, Julius van der Kuip
methods (Static) % Diese Klasse enthält ausschließlich statische Methoden, sodass kein Objekt initialisiert werden muss
function s = T
s = {'linear','Vogel'};
end
function s = R
s = {};
end
function s = G
s = {};
end
function s = B
s = {'static','dynamic'};
end
function s = H
s = {'Hamrock/Dowson','Moes'};
end
function s = C
s.unloadedRE = { 'neglect','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
s.outsideArea = {'k-factor','neglect','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
end
function s = Default
% Gibt ein Rechenmethoden-Struct mit den Default-Methoden aus
s.T = 'Vogel';
s.B = 'static';
s.H = 'Hamrock/Dowson';
s.C.unloadedRE = 'semianalytisch3D';
s.C.outsideArea = 'semianalytisch3D';
end
function method = addDefault(method)
% Ergänzt ein unvollständiges Rechenmethoden-Struct mit den
% Default-Werten
arguments
method (1,1) struct
end
defaultMethod = possibleMethods.Default;
for ii = fields(defaultMethod)'
if ~isfield(method,ii{1}) % Falls Feld ii nicht besetzt,
method.(ii{1}) = defaultMethod.(ii{1}); % überschreibe mit default
elseif isstruct(defaultMethod.(ii{1})) % falls zweite Ebene existiert
for jj = fields(defaultMethod.(ii{1}))'
if ~isfield(method.(ii{1}),jj{1}) % Falls Feld ii in jj nicht besetzt
method.(ii{1}).(jj{1}) = defaultMethod.(ii{1}).(jj{1});
end
end
end
end
end
function success = check(method,throwError)
% prüft, ob das Struct method ausschließlich valide Feld- und Methodennamen enthält
% optional: throwError = true gibt error-Meldungen aus
arguments
method (1,1) struct
throwError (1,1) logical = false
end
success = true;
for ii = fields(method)'
if ~any(strcmp(ii,methods(possibleMethods)')) % Prüft Feldname in erster Ebene
success = false;
if throwError
error(['%s ist kein gültiger Feldname im Methoden-Struct\n',...
'Möglich an dieser Stelle: %s'],...
ii{1}, strjoin(methods(possibleMethods)') )
end
break
end
if isstruct(method.(ii{1})) % falls zweite Ebene existiert
for jj = fields(method.(ii{1}))'
if ~any(strcmp(jj,fields(possibleMethods.(ii{1}))')) % Prüft Feldname in zweiter Ebene
success = false;
if throwError
error(['%s is kein gültiger Feldname für den Berechnungsabschnitt %s\n',...
'Möglich an dieser Stelle: %s'],...
jj{1},ii{1},strjoin(fields(possibleMethods.(ii{1}))') )
end
break
end
if ~any(strcmp(method.(ii{1}).(jj{1}),possibleMethods.(ii{1}).(jj{1}))) % Prüft Methodenname in zweiter Ebene
success = false;
if throwError
error(['%s ist kein gültiger Methodenname zur Berechnung von %s im Berechnungsabschnitt %s\n',...
'Möglich an dieser Stelle: %s'],...
method.(ii{1}).(jj{1}), jj{1}, ii{1}, strjoin(possibleMethods.(ii{1}).(jj{1})) )
end
break
end
end
else
if ~any(strcmp(method.(ii{1}),possibleMethods.(ii{1}))) % Prüft Methodenname in erster Ebene
success = false;
if throwError
error(['%s ist kein gültiger Methodenname für den Berechnungsabschnitt %s\n',...
'Möglich an dieser Stelle: %s'],...
method.(ii{1}), ii{1}, strjoin(possibleMethods.(ii{1})) )
end
break
end
end
end
end
end
end