Source code for RCAIDE.Library.Methods.Powertrain.setup_operating_conditions
# RCAIDE/Library/Methods/Powertrain/Propulsors/Common/
#
# Created: Jan 2025, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE Imports
import RCAIDE
from RCAIDE.Framework.Mission.Common import Results, Residuals
from RCAIDE.Library.Mission.Common.Update.orientations import orientations
# Python package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Operating Test Conditions Set-up
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def setup_operating_conditions(component, altitude=0, velocity_range=np.array([10]), angle_of_attack=0):
"""
Sets up operating conditions for single component analysis.
Parameters
----------
component : RCAIDE.Library.Components.Component
Component to set up operating conditions for
- working_fluid : Data
Working fluid properties object (will be set by this function)
altitude : float, optional
Altitude for analysis [m]
Default: 0 (sea level)
velocity_range : numpy.ndarray, optional
Array of velocities to analyze [m/s]
Default: np.array([10])
angle_of_attack : float, optional
Angle of attack for analysis [deg]Default: 0
Returns
-------
state : RCAIDE.Framework.Mission.Common.State
State object containing:
- conditions : Data
Flight conditions
- freestream : Data
Freestream properties
- altitude : numpy.ndarray
Altitude [m]
- mach_number : numpy.ndarray
Mach number
- pressure : numpy.ndarray
Atmospheric pressure [Pa]
- temperature : numpy.ndarray
Atmospheric temperature [K]
- density : numpy.ndarray
Air density [kg/m³]
- dynamic_viscosity : numpy.ndarray
Air dynamic viscosity [kg/(m·s)]
- gravity : numpy.ndarray
Gravitational acceleration [m/s²]
- isentropic_expansion_factor : numpy.ndarray
Ratio of specific heats (gamma)
- Cp : numpy.ndarray
Specific heat at constant pressure [J/(kg·K)]
- R : numpy.ndarray
Gas constant [J/(kg·K)]
- speed_of_sound : numpy.ndarray
Speed of sound [m/s]
- velocity : numpy.ndarray
Freestream velocity [m/s]
- frames : Data
Reference frames
- body : Data
Body-fixed frame
- inertial_rotations : numpy.ndarray
Rotation angles [rad]
- inertial : Data
Inertial frame
- velocity_vector : numpy.ndarray
Velocity vector [m/s]
Notes
-----
This function creates a standardized set of operating conditions for component analysis.
It sets up atmospheric conditions based on the US Standard Atmosphere 1976 model and
initializes all necessary parameters for component performance evaluation.
The function:
1. Sets up Earth as the planet and air as the working fluid
2. Computes atmospheric properties at the specified altitude
3. Creates a conditions data structure with all necessary parameters
4. Sets up reference frames and orientations
5. Appends component-specific operating conditions
**Major Assumptions**
* US Standard Atmosphere 1976
* Earth gravity
* Air as working fluid
See Also
--------
RCAIDE.Framework.Analyses.Atmospheric.US_Standard_1976
RCAIDE.Library.Mission.Common.Update.orientations
"""
planet = RCAIDE.Library.Attributes.Planets.Earth()
working_fluid = RCAIDE.Library.Attributes.Gases.Air()
# append working fluid properties
component.working_fluid = working_fluid
atmosphere_sls = RCAIDE.Framework.Analyses.Atmospheric.US_Standard_1976()
atmo_data = atmosphere_sls.compute_values(altitude,0.0)
p = atmo_data.pressure
T = atmo_data.temperature
rho = atmo_data.density
a = atmo_data.speed_of_sound
mu = atmo_data.dynamic_viscosity
conditions = Results()
conditions.freestream.altitude = np.atleast_2d(altitude)
conditions.freestream.mach_number = np.atleast_2d(velocity_range/a)
conditions.freestream.pressure = np.atleast_2d(p)
conditions.freestream.temperature = np.atleast_2d(T)
conditions.freestream.density = np.atleast_2d(rho)
conditions.freestream.dynamic_viscosity = np.atleast_2d(mu)
conditions.freestream.gravity = np.atleast_2d(planet.sea_level_gravity)
conditions.freestream.isentropic_expansion_factor = np.atleast_2d(working_fluid.compute_gamma(T,p))
conditions.freestream.Cp = np.atleast_2d(working_fluid.compute_cp(T,p))
conditions.freestream.R = np.atleast_2d(working_fluid.gas_specific_constant)
conditions.freestream.speed_of_sound = np.atleast_2d(a)
num_ctrl_pts = len(velocity_range)
conditions._size = num_ctrl_pts
conditions.expand_rows(num_ctrl_pts)
conditions.freestream.velocity = np.atleast_2d(velocity_range)
conditions.frames.body.inertial_rotations[:, 1] = angle_of_attack
conditions.frames.inertial.velocity_vector[:, 0] = np.atleast_2d(velocity_range)
# setup conditions
segment = RCAIDE.Framework.Mission.Segments.Segment()
segment.state.conditions = conditions
orientations(segment)
segment.state.residuals.network = Residuals()
# append component-specific operating conditions
component.append_operating_conditions(segment,segment.state.conditions.energy,segment.state.conditions.noise)
segment.state.conditions.expand_rows(num_ctrl_pts)
return segment.state