Source code for RCAIDE.Library.Methods.Powertrain.Systems.compute_ice_protection_power_draw

# RCAIDE/Library/Methods/Powertrain/Systems/compute_ice_protection_power_draw.py
# 
# Created:  May 2026, M. Clarke, S. Sharma

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------    
# package imports
import numpy as np

[docs] def compute_ice_protection_power_draw(ice_protection,vehicle,state,bus): """ Computes the power draw of an ice protection system. Parameters ---------- ice_protection : Ice_Protection The ice protection component with the following attributes: - power_draw : float Power consumption of the ice protection component [W] vehicle : Vehicle() The vehicle object, used to extract wing reference areas for heat flux scaling bus : Electrical_Bus The electrical bus that powers the avionics system state : State Object containing the dynamic mission state arrays (specifically freestream temperature) Returns ------- None This function modifies the ice_protection_conditions.power array in-place. Notes ----- This function calculates the IPS power draw as a combination of: 1. Electro-thermal anti-icing for the wing leading edges (scaled by reference area). 2. Electro-mechanical expulsive de-icing (EMEDI) for engine cowls. To reflect real-world flight operations, the IPS power draw is dynamically coupled to the freestream temperature. It activates strictly when the aircraft traverses atmospheric layers between 0°C and -30°C (conditions conducive to supercooled liquid water droplets) and deactivates during other phases to prevent the overestimation of energy consumption. For more accurate analytsis of ice protection systems, this function could be extended to calculate the total_flux based on dynamic atmospheric conditions (temperature, humidity, liquid water content) and aircraft speed to capture the convective, evaporative, and sensible heat flux components more accurately. Additionally, the model could be expanded to include other ice protection technologies such as bleed air systems. See Also -------- RCAIDE.Library.Methods.Powertrain.Systems.append_ice_protection_conditions """ Area = 0 percentage_ice = 0.05 # 5% of the wing is leading edge # EMEDI Constants (Example values) E_pulse = 500 # Joules per pulse f_pulse = 0.2 # Pulses per second (12 per minute) eta_sys = 0.8 # 80% efficiency q_total_flux = 6000 # W/m², Approximate heat flux required to prevent ice accretion (convective + evaporative + sensible) for wing in vehicle.wings: Area += wing.areas.reference * percentage_ice # P_anti_ice = Area * (q_convective + q_evaporative + q_sensible) P_anti_ice = Area * q_total_flux P_de_ice = (E_pulse * f_pulse) / eta_sys P_ice_initial = P_anti_ice + P_de_ice # Ice systems are only active during elevated humidity and an air temperature between 0°C and -30°C # Ice Protection System (IPS) deactivates during "Climb 3" (40,000 ft), "Cruise" (40,000 ft), and "Descent 1" (30,000 ft) # Extract the freestream temperature (in Kelvin) T_ambient = state.conditions.freestream.temperature # Create an activation array: 1.0 if temperature is between 0 C and -30 C, else 0.0 IPS_active = np.where((T_ambient <= 273.15) & (T_ambient >= 243.15), 1.0, 0.0) # Multiply the max power by the activation array P_ice = P_ice_initial * IPS_active bus_conditions = state.conditions.energy.busses[bus.tag] ice_protection_conditions = bus_conditions[ice_protection.tag] ice_protection_conditions.power[:,0] = P_ice[:,0] bus_conditions.power_draw += ice_protection_conditions.power*bus.power_split_ratio /bus.efficiency return