Skip to content
Snippets Groups Projects
Select Git revision
  • preliminary-sims
  • CoefficientCsv
  • weather-forecast-analysis
  • main default protected
  • prp-integration
  • alpha-phi
  • test-9K
  • stability-bugs
  • archive/benchmark
9 results

Environment.m

Blame
  • Environment.m 4.03 KiB
    classdef Environment < Component
    % Environment: Represents launch site dependent variables.
    %
    %   Constructor:
    %       - Environment: Creates an instance of the Environment class.
    %           Loaded config: environmentConfig.m
    %           Loaded data: -
    %           Arguments:
    %               - mission: Mission, mission object
    %               - motor: Motor, used to compute pin distance
    %               - varIn: (optional) config source. Alternative to config.m
    %               file
    
        properties
            lat0            double                  % [deg] Launchpad latitude
            lon0            double                  % [deg] Launchpad longitude
            z0              double                  % [m] Launchpad Altitude
            omega           double                  % [deg] Launchpad Elevation
            phi             double                  % [deg] Launchpad Azimuth
            pin1Length      double                  % [m] Distance from the upper pin to the upper tank cap
            pin2Length      double                  % [m] Distance from the lower pin to the lower tank cap
            rampLength      double                  % [m] Total launchpad length
    
            temperature     double = 288.15         % [K] Ground temperature
            pressure        double                  % [Pa] Ground pressure
            rho             double                  % [Kg/m^3] Ground air density
            gamma           double = 1.4            % [-] Gas constant
            R               double = 287            % [-] Gas constant
        end
    
        properties(SetAccess = private)
            g0                      double              % [-] Gravity costant at launch latitude and altitude
            earthRadius             double = 6371007    % [m] Radius used for g computation
            local                   double              % [-] Vector conatining inputs for atmosphereData
            pinDistance             double              % [m] Distance of the upper pin from the rail base (upper pin-boat + boat-rail base)
            effectiveRampLength     double              % [m] Total launchpad length
            effectiveRampAltitude   double              % [m] Projection of effectiveRampLength on z axis
        end
    
        properties(Access = protected)
            configName = 'environmentConfig.m'
            variableName = ''
            mission Mission
            motor Motor
        end
    
        methods
            function obj = Environment(mission, motor, varIn)
                arguments(Input)
                    mission Mission = Mission()
                    motor Motor = Motor()
                    varIn = []
                end
                obj@Component(mission, varIn);
                obj.motor = motor;
    
                %% Update angles
                obj.omega = deg2rad(obj.omega);
                obj.phi = deg2rad(obj.phi);
    
                obj.updateAll();
            end
        end
        
        % Updaters
        methods
            function updateAll(obj)
                obj.updateG0;
                obj.updatePinDistance;
                obj.updateRamp;
                obj.updateLocal;
            end
            
            function updateAllExcetpG0(obj) % useful for parallel computing based on threads (gravitywgs84 not supported)
                obj.updatePinDistance;
                obj.updateRamp;
                obj.updateLocal;
            end
    
            function obj = updateG0(obj)
                if(~isempty(obj.lat0))
                    obj.g0 = gravitywgs84(obj.z0, obj.lat0);
                end
            end
    
            function obj = updatePinDistance(obj)
                obj.pinDistance = obj.pin1Length + obj.pin2Length ... 
                    + obj.motor.tankLength;
            end
    
            function obj = updateRamp(obj)
                obj.effectiveRampLength = obj.rampLength - obj.pinDistance;
                obj.effectiveRampAltitude = obj.effectiveRampLength*sin(obj.omega);
            end
    
            function obj = updateLocal(obj)
                if isempty(obj.temperature), obj.temperature = 288.15; end
                if isempty(obj.gamma), obj.gamma = 1.4; end
    
                obj.local = [obj.z0, obj.temperature, ...                       % vector containing inputs for atmosphereData
                                obj.pressure, obj.rho];
            end
        end
    end