]> git.mxchange.org Git - flightgear.git/blob - src/FDM/UIUCModel/uiuc_engine.cpp
FG_ to SG_ namespace changes.
[flightgear.git] / src / FDM / UIUCModel / uiuc_engine.cpp
1 /**********************************************************************
2
3  FILENAME:     uiuc_engine.cpp
4
5 ----------------------------------------------------------------------
6
7  DESCRIPTION:  determine the engine forces and moments
8                
9 ----------------------------------------------------------------------
10
11  STATUS:       alpha version
12
13 ----------------------------------------------------------------------
14
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
18
19 ----------------------------------------------------------------------
20
21  HISTORY:      01/30/2000   initial release
22
23 ----------------------------------------------------------------------
24
25  AUTHOR(S):    Bipin Sehgal       <bsehgal@uiuc.edu>
26                Jeff Scott         <jscott@mail.com>
27                Michael Selig      <m-selig@uiuc.edu>
28
29 ----------------------------------------------------------------------
30
31  VARIABLES:
32
33 ----------------------------------------------------------------------
34
35  INPUTS:       -engine model
36
37 ----------------------------------------------------------------------
38
39  OUTPUTS:      -F_X_engine
40                -F_Z_engine
41                -M_m_engine
42
43 ----------------------------------------------------------------------
44
45  CALLED BY:   uiuc_wrapper.cpp 
46
47 ----------------------------------------------------------------------
48
49  CALLS TO:     none
50
51 ----------------------------------------------------------------------
52
53  COPYRIGHT:    (C) 2000 by Michael Selig
54
55  This program is free software; you can redistribute it and/or
56  modify it under the terms of the GNU General Public License
57  as published by the Free Software Foundation.
58
59  This program is distributed in the hope that it will be useful,
60  but WITHOUT ANY WARRANTY; without even the implied warranty of
61  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62  GNU General Public License for more details.
63
64  You should have received a copy of the GNU General Public License
65  along with this program; if not, write to the Free Software
66  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
67  USA or view http://www.gnu.org/copyleft/gpl.html.
68
69 **********************************************************************/
70 #include <simgear/compiler.h>
71
72 #include "uiuc_engine.h"
73
74 SG_USING_STD(cerr);
75
76 void uiuc_engine() 
77 {
78   stack command_list;
79   string linetoken1;
80   string linetoken2;
81   
82   Throttle[3] = Throttle_pct;
83
84   command_list = engineParts -> getCommands();
85
86   /*
87   if (command_list.begin() == command_list.end())
88   {
89         cerr << "ERROR: Engine not specified. Aircraft cannot fly without the engine" << endl;
90         exit(-1);
91   }
92   */
93  
94   for (LIST command_line = command_list.begin(); command_line!=command_list.end(); ++command_line)
95     {
96       //cout << *command_line << endl;
97       
98       linetoken1 = engineParts -> getToken(*command_line, 1);
99       linetoken2 = engineParts -> getToken(*command_line, 2);
100       
101       switch(engine_map[linetoken2])
102         {
103         case simpleSingle_flag:
104           {
105             F_X_engine = Throttle[3] * simpleSingleMaxThrust;
106             break;
107           }
108         case c172_flag:
109           {
110             //c172 engine lines ... looks like 0.83 is just a thrust increase
111             F_X_engine = Throttle[3] * 350 / 0.83;
112             F_Z_engine = Throttle[3] * 4.9 / 0.83;
113             M_m_engine = F_X_engine * 0.734 * cbar;
114             break;
115           }
116         case cherokee_flag:
117           {
118             static float
119               dP = (180.0-117.0)*745.7,   // Watts
120               dn = (2700.0-2350.0)/60.0,  // d_rpm (I mean d_rps, in seconds)
121               D  = 6.17*0.3048,           // prop diameter
122               dPh = (58.0-180.0)*745.7,   // change of power as function of height
123               dH = 25000.0*0.3048;
124
125             float
126               n,   // [rps]
127               H,   // altitude [m]
128               J,   // advance ratio (ratio of horizontal speed to prop tip speed)
129               T,   // thrust [N]
130               V,   // velocity [m/s]
131               P,   // power [W]
132               eta_engine; // engine efficiency
133
134             /* assumption -> 0.0 <= Throttle[3] <=1.0 */
135             P = fabs(Throttle[3]) * 180.0 * 745.7; /*180.0*745.7 ->max avail power [W]*/
136             n = dn/dP * (P-117.0*745.7) + 2350.0/60.0;
137
138             /*  V  [m/s]   */
139             V = (V_rel_wind < 10.0 ? 10.0 : V_rel_wind*0.3048);
140             J = V / n / D;
141
142             /* Propeller efficiency */
143             eta_engine = (J < 0.7 ? ((0.8-0.55)/(.7-.3)*(J-0.3) + 0.55) : 
144                           (J > 0.85 ? ((0.6-0.8)/(1.0-0.85)*(J-0.85) + 0.8) : 0.8));
145
146             /* power on Altitude */
147             H = Altitude * 0.3048;       /* H == Altitude [m] */
148             P *= (dPh/dH * H + 180.0*745.7) / (180.0*745.7);
149             T = eta_engine * P/V;        /* Thrust [N] */ 
150
151             /*assumption: Engine's line of thrust passes through cg */
152             F_X_engine = T * 0.2248;     /* F_X_engine in lb */
153             F_Y_engine = 0.0;
154             F_Z_engine = 0.0;
155             break;
156           }
157         };
158     }
159   return;
160 }
161
162 // end uiuc_engine.cpp