Skip to content
Snippets Groups Projects
Select Git revision
  • 350c07abfd3d9025483e01571a38e6838cc85ac2
  • master default protected
  • v4.0
  • v3.0
  • STLE
  • v2.0
  • v1.1
7 results

possibleMethods.m

Blame
  • 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