@@ -20,6 +20,7 @@ class AntiIcingMass(om.ExplicitComponent):
2020 def initialize (self ):
2121 add_aviary_option (self , Aircraft .Engine .NUM_ENGINES )
2222 add_aviary_option (self , Aircraft .Propulsion .TOTAL_NUM_ENGINES )
23+ add_aviary_option (self , Aircraft .Engine .REFERENCE_SLS_THRUST , units = 'lbf' )
2324
2425 def setup (self ):
2526 num_engine_type = len (self .options [Aircraft .Engine .NUM_ENGINES ])
@@ -29,6 +30,9 @@ def setup(self):
2930 add_aviary_input (self , Aircraft .Nacelle .AVG_DIAMETER , shape = num_engine_type , units = 'ft' )
3031 add_aviary_input (self , Aircraft .Wing .SPAN , units = 'ft' )
3132 add_aviary_input (self , Aircraft .Wing .SWEEP , units = 'deg' )
33+ add_aviary_input (
34+ self , Aircraft .Engine .SCALED_SLS_THRUST , shape = num_engine_type , units = 'lbf'
35+ )
3236
3337 add_aviary_output (self , Aircraft .AntiIcing .MASS , units = 'lbm' )
3438
@@ -45,8 +49,13 @@ def compute(self, inputs, outputs):
4549 span = inputs [Aircraft .Wing .SPAN ]
4650 sweep = inputs [Aircraft .Wing .SWEEP ]
4751
52+ thrust = inputs [Aircraft .Engine .SCALED_SLS_THRUST ]
53+ ref_sls_thrust , _ = self .options [Aircraft .Engine .REFERENCE_SLS_THRUST ]
54+ thrust_rat = thrust / ref_sls_thrust
55+ adjusted_avg_diam = avg_diam * np .sqrt (thrust_rat )
56+
4857 count_factor = distributed_engine_count_factor (total_engines )
49- f_nacelle = distributed_nacelle_diam_factor (avg_diam , num_engines )
58+ f_nacelle = distributed_nacelle_diam_factor (adjusted_avg_diam , num_engines )
5059
5160 outputs [Aircraft .AntiIcing .MASS ] = (
5261 (
@@ -65,11 +74,18 @@ def compute_partials(self, inputs, J):
6574 scaler = inputs [Aircraft .AntiIcing .MASS_SCALER ]
6675 max_width = inputs [Aircraft .Fuselage .MAX_WIDTH ]
6776 avg_diam = inputs [Aircraft .Nacelle .AVG_DIAMETER ]
68- count_factor = distributed_engine_count_factor (total_engines )
69- f_nacelle = distributed_nacelle_diam_factor (avg_diam , num_engines )
7077 span = inputs [Aircraft .Wing .SPAN ]
7178 sweep = inputs [Aircraft .Wing .SWEEP ]
7279
80+ # scale avg_diam by thrust ratio
81+ thrust = inputs [Aircraft .Engine .SCALED_SLS_THRUST ]
82+ ref_sls_thrust , _ = self .options [Aircraft .Engine .REFERENCE_SLS_THRUST ]
83+ thrust_rat = thrust / ref_sls_thrust
84+ adjusted_avg_diam = avg_diam * np .sqrt (thrust_rat )
85+
86+ count_factor = distributed_engine_count_factor (total_engines )
87+ f_nacelle = distributed_nacelle_diam_factor (adjusted_avg_diam , num_engines )
88+
7389 diam_deriv_fact = distributed_nacelle_diam_factor_deriv (num_engines )
7490
7591 cos_sweep = np .cos (sweep * np .pi / 180 )
@@ -82,11 +98,23 @@ def compute_partials(self, inputs, J):
8298 J [Aircraft .AntiIcing .MASS , Aircraft .Fuselage .MAX_WIDTH ] = 1.5 * scaler / GRAV_ENGLISH_LBM
8399
84100 J [Aircraft .AntiIcing .MASS , Aircraft .Nacelle .AVG_DIAMETER ] = (
85- 3.8 * diam_deriv_fact * count_factor * scaler / GRAV_ENGLISH_LBM
101+ 3.8 * diam_deriv_fact * np . sqrt ( thrust_rat ) * count_factor * scaler / GRAV_ENGLISH_LBM
86102 )
87103
88104 J [Aircraft .AntiIcing .MASS , Aircraft .Wing .SPAN ] = 1 / cos_sweep * scaler / GRAV_ENGLISH_LBM
89105
90106 J [Aircraft .AntiIcing .MASS , Aircraft .Wing .SWEEP ] = (
91107 span * (np .pi / 180 ) * sin_sweep / (cos_sweep ) ** 2 * scaler / GRAV_ENGLISH_LBM
92108 )
109+
110+ J [Aircraft .AntiIcing .MASS , Aircraft .Engine .SCALED_SLS_THRUST ] = (
111+ 3.8
112+ * diam_deriv_fact
113+ * avg_diam
114+ * 0.5
115+ * np .sqrt (ref_sls_thrust / thrust )
116+ / ref_sls_thrust
117+ * count_factor
118+ * scaler
119+ / GRAV_ENGLISH_LBM
120+ )
0 commit comments