diff --git a/classes/misc/Wind.m b/classes/misc/Wind.m index 7fae578553a6ad526da4700dfd5832d65c8be826..3adff25a56a8656c1b1a2b99a066460b71c502d9 100644 --- a/classes/misc/Wind.m +++ b/classes/misc/Wind.m @@ -11,29 +11,17 @@ classdef Wind < Config % file properties altitudes (1, :) - end - - properties(Dependent) + magnitudeDistribution (1, :) ... - {mustBeMember(magnitudeDistribution, {'u', 'g'})} % [-] Magnitude distrubution: uniform, gaussian + {mustBeMember(magnitudeDistribution, {'u', 'g'})} = 'u' % [-] Magnitude distrubution: uniform, gaussian azimuthDistribution (1, :) ... - {mustBeMember(azimuthDistribution, {'u', 'g'})} % [-] Azimuth distrubution: uniform, gaussian + {mustBeMember(azimuthDistribution, {'u', 'g'})} = 'u' % [-] Azimuth distrubution: uniform, gaussian elevationDistribution (1, :) ... - {mustBeMember(elevationDistribution, {'u', 'g'})} % [-] Elevation distrubution: uniform, gaussian + {mustBeMember(elevationDistribution, {'u', 'g'})} = 'u' % [-] Elevation distrubution: uniform, gaussian magnitudeParameters (2, :) % [m/s] Distribution parameters: [min; max], [mu; sigma] azimuthParameters (2, :) % [deg] Distribution parameters: [min; max], [mu; sigma] elevationParameters (2, :) % [deg] Distribution parameters: [min; max], [mu; sigma] end - - properties(Access = private) - MAGNITUDE_DISTRIBUTION = 'u' - AZIMUTH_DISTRIBUTION = 'u' - ELEVATION_DISTRIBUTION = 'u' - - MAGNITUDE_PARAMETERS - AZIMUTH_PARAMETERS - ELEVATION_PARAMETERS - end properties(SetAccess = private) azimuth @@ -45,85 +33,6 @@ classdef Wind < Config configName = 'windConfig.m' variableName = 'windCustom' end - - - methods - function value = get.magnitudeDistribution(obj) - value = obj.MAGNITUDE_DISTRIBUTION; - end - - function value = get.azimuthDistribution(obj) - value = obj.AZIMUTH_DISTRIBUTION; - end - - function value = get.elevationDistribution(obj) - value = obj.ELEVATION_DISTRIBUTION; - end - - function value = get.magnitudeParameters(obj) - value = obj.MAGNITUDE_PARAMETERS; - end - - function value = get.azimuthParameters(obj) - value = obj.AZIMUTH_PARAMETERS; - end - - function value = get.elevationParameters(obj) - value = obj.ELEVATION_PARAMETERS; - end - - function obj = set.magnitudeDistribution(obj, value) - obj.MAGNITUDE_DISTRIBUTION = value; - if ~isempty(obj.MAGNITUDE_PARAMETERS) - obj = obj.updateElevation(); - obj.magnitude = obj.updateDistribution(value, ... - obj.MAGNITUDE_PARAMETERS); - end - end - - function obj = set.magnitudeParameters(obj, value) - obj.MAGNITUDE_PARAMETERS = value; - if ~isempty(obj.MAGNITUDE_DISTRIBUTION) - obj = obj.updateElevation(); - obj.magnitude = obj.updateDistribution(obj.MAGNITUDE_DISTRIBUTION, ... - value); - end - end - - function obj = set.azimuthDistribution(obj, value) - obj.AZIMUTH_DISTRIBUTION = value; - if ~isempty(obj.AZIMUTH_PARAMETERS) - obj = obj.updateElevation(); - obj.azimuth = obj.updateDistribution(value, ... - obj.AZIMUTH_PARAMETERS); - end - end - - function obj = set.azimuthParameters(obj, value) - obj.AZIMUTH_PARAMETERS = value; - if ~isempty(obj.AZIMUTH_DISTRIBUTION) - obj = obj.updateElevation(); - obj.azimuth = obj.updateDistribution(obj.AZIMUTH_DISTRIBUTION, ... - value); - end - end - - function obj = set.elevationDistribution(obj, value) - obj.ELEVATION_DISTRIBUTION = value; - if ~isempty(obj.ELEVATION_PARAMETERS) - obj.elevation = obj.updateDistribution(value, ... - obj.ELEVATION_PARAMETERS); - end - end - - function obj = set.elevationParameters(obj, value) - obj.ELEVATION_PARAMETERS = value; - if ~isempty(obj.ELEVATION_DISTRIBUTION) - obj.elevation = obj.updateDistribution(obj.ELEVATION_DISTRIBUTION, ... - value); - end - end - end methods function obj = Wind(mission, varIn) @@ -132,7 +41,7 @@ classdef Wind < Config varIn = [] end obj@Config(mission, varIn); - %obj = obj.updateAll(); + obj = obj.updateAll(); end function [uw, vw, ww] = getVels(obj, z) @@ -151,50 +60,18 @@ classdef Wind < Config end end - % function obj = updateAll(obj) - % obj = obj.checkElevation(); - % - % s = length(obj.altitudes); - % magVector = nan(1,s); - % azVector = nan(1,s); - % elVector = nan(1,s); - % isUniformMag = strcmp(obj.magnitudeDistribution, "u"); - % isUniformAz = strcmp(obj.azimuthDistribution, "u"); - % isUniformEl = strcmp(obj.elevationDistribution, "u"); - % - % uniformDist = @(val1, val2) rand(1)*(val2 - val1) + val1; - % gaussianDist = @(mean, sigma) normrnd(mean, sigma, 1); - % - % for i = 1:s - % if isUniformMag(i) - % magVector(i) = uniformDist(obj.magnitudeParameters(1,i), ... - % obj.magnitudeParameters(2,i)); - % else - % magVector(i) = gaussianDist(obj.magnitudeParameters(1,i), ... - % obj.magnitudeParameters(2,i)); - % end - % - % if isUniformAz(i) - % azVector(i) = uniformDist(obj.azimuthParameters(1,i), ... - % obj.azimuthParameters(2,i)); - % else - % azVector(i) = gaussianDist(obj.azimuthParameters(1,i), ... - % obj.azimuthParameters(2,i)); - % end - % - % if isUniformEl(i) - % elVector(i) = uniformDist(obj.elevationParameters(1,i), ... - % obj.elevationParameters(2,i)); - % else - % elVector(i) = gaussianDist(obj.elevationParameters(1,i), ... - % obj.elevationParameters(2,i)); - % end - % end - % - % obj.magnitude = magVector; - % obj.azimuth = azVector; - % obj.elevation = elVector; - % end + function obj = updateAll(obj) + obj = obj.updateElevation(); + + obj.magnitude = obj.updateDistribution(obj.magnitudeDistribution, ... + obj.magnitudeParameters); + + obj.azimuth = obj.updateDistribution(obj.azimuthDistribution, ... + obj.azimuthParameters); + + obj.elevation = obj.updateDistribution(obj.elevationDistribution, ... + obj.elevationParameters); + end end methods(Access = private) @@ -216,15 +93,12 @@ classdef Wind < Config end function obj = updateElevation(obj) - if any(size(obj.ELEVATION_DISTRIBUTION) ~= size(obj.AZIMUTH_DISTRIBUTION)) - obj.ELEVATION_DISTRIBUTION = repmat("u", size(obj.AZIMUTH_DISTRIBUTION)); + if any(size(obj.elevationDistribution) ~= size(obj.azimuthDistribution)) + obj.elevationDistribution = repmat("u", size(obj.azimuthDistribution)); end - if isempty(obj.ELEVATION_PARAMETERS) && ~isempty(obj.AZIMUTH_PARAMETERS) - obj.ELEVATION_PARAMETERS = zeros(size(obj.AZIMUTH_PARAMETERS)); - - obj.elevation = obj.updateDistribution(obj.ELEVATION_DISTRIBUTION, ... - obj.ELEVATION_PARAMETERS); + if isempty(obj.elevationParameters) && ~isempty(obj.azimuthParameters) + obj.elevationParameters = zeros(size(obj.azimuthParameters)); end end end