1 /**********************************************************************
3 FILENAME: uiuc_engine.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: determine the engine forces and moments
9 ----------------------------------------------------------------------
13 ----------------------------------------------------------------------
15 REFERENCES: simple and c172 models based on portions of
16 c172_engine.c, called from ls_model;
17 cherokee model based on cherokee_engine.c
19 ----------------------------------------------------------------------
21 HISTORY: 01/30/2000 initial release
22 06/18/2001 (RD) Added Throttle_pct_input.
24 ----------------------------------------------------------------------
26 AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
27 Jeff Scott <jscott@mail.com>
28 Robert Deters <rdeters@uiuc.edu>
29 Michael Selig <m-selig@uiuc.edu>
31 ----------------------------------------------------------------------
35 ----------------------------------------------------------------------
39 ----------------------------------------------------------------------
45 ----------------------------------------------------------------------
47 CALLED BY: uiuc_wrapper.cpp
49 ----------------------------------------------------------------------
53 ----------------------------------------------------------------------
55 COPYRIGHT: (C) 2000 by Michael Selig
57 This program is free software; you can redistribute it and/or
58 modify it under the terms of the GNU General Public License
59 as published by the Free Software Foundation.
61 This program is distributed in the hope that it will be useful,
62 but WITHOUT ANY WARRANTY; without even the implied warranty of
63 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64 GNU General Public License for more details.
66 You should have received a copy of the GNU General Public License
67 along with this program; if not, write to the Free Software
68 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
69 USA or view http://www.gnu.org/copyleft/gpl.html.
71 **********************************************************************/
72 #include <simgear/compiler.h>
74 #include "uiuc_engine.h"
76 #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
86 if (Throttle_pct_input)
88 double Throttle_pct_input_endTime = Throttle_pct_input_timeArray[Throttle_pct_input_ntime];
89 if (Simtime >= Throttle_pct_input_startTime &&
90 Simtime <= (Throttle_pct_input_startTime + Throttle_pct_input_endTime))
92 double time = Simtime - Throttle_pct_input_startTime;
93 Throttle_pct = uiuc_1Dinterpolation(Throttle_pct_input_timeArray,
94 Throttle_pct_input_dTArray,
95 Throttle_pct_input_ntime,
100 Throttle[3] = Throttle_pct;
102 command_list = engineParts -> getCommands();
105 if (command_list.begin() == command_list.end())
107 cerr << "ERROR: Engine not specified. Aircraft cannot fly without the engine" << endl;
112 for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
114 //cout << *command_line << endl;
116 linetoken1 = engineParts -> getToken(*command_line, 1);
117 linetoken2 = engineParts -> getToken(*command_line, 2);
119 switch(engine_map[linetoken2])
121 case simpleSingle_flag:
123 F_X_engine = Throttle[3] * simpleSingleMaxThrust;
128 //c172 engine lines ... looks like 0.83 is just a thrust increase
129 F_X_engine = Throttle[3] * 350 / 0.83;
130 F_Z_engine = Throttle[3] * 4.9 / 0.83;
131 M_m_engine = F_X_engine * 0.734 * cbar;
137 dP = (180.0-117.0)*745.7, // Watts
138 dn = (2700.0-2350.0)/60.0, // d_rpm (I mean d_rps, in seconds)
139 D = 6.17*0.3048, // prop diameter
140 dPh = (58.0-180.0)*745.7, // change of power as function of height
146 J, // advance ratio (ratio of horizontal speed to prop tip speed)
150 eta_engine; // engine efficiency
152 /* assumption -> 0.0 <= Throttle[3] <=1.0 */
153 P = fabs(Throttle[3]) * 180.0 * 745.7; /*180.0*745.7 ->max avail power [W]*/
154 n = dn/dP * (P-117.0*745.7) + 2350.0/60.0;
157 V = (V_rel_wind < 10.0 ? 10.0 : V_rel_wind*0.3048);
160 /* Propeller efficiency */
161 eta_engine = (J < 0.7 ? ((0.8-0.55)/(.7-.3)*(J-0.3) + 0.55) :
162 (J > 0.85 ? ((0.6-0.8)/(1.0-0.85)*(J-0.85) + 0.8) : 0.8));
164 /* power on Altitude */
165 H = Altitude * 0.3048; /* H == Altitude [m] */
166 P *= (dPh/dH * H + 180.0*745.7) / (180.0*745.7);
167 T = eta_engine * P/V; /* Thrust [N] */
169 /*assumption: Engine's line of thrust passes through cg */
170 F_X_engine = T * 0.2248; /* F_X_engine in lb */
180 // end uiuc_engine.cpp