]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/propulsion/FGNozzle.cpp
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / models / propulsion / FGNozzle.cpp
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Module:       FGNozzle.cpp
4  Author:       Jon S. Berndt
5  Date started: 08/24/00
6  Purpose:      Encapsulates the nozzle object
7
8  ------------- Copyright (C) 2000  Jon S. Berndt (jon@jsbsim.org) -------------
9
10  This program is free software; you can redistribute it and/or modify it under
11  the terms of the GNU Lesser General Public License as published by the Free Software
12  Foundation; either version 2 of the License, or (at your option) any later
13  version.
14
15  This program is distributed in the hope that it will be useful, but WITHOUT
16  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
18  details.
19
20  You should have received a copy of the GNU Lesser General Public License along with
21  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
22  Place - Suite 330, Boston, MA  02111-1307, USA.
23
24  Further information about the GNU Lesser General Public License can also be found on
25  the world wide web at http://www.gnu.org.
26
27 FUNCTIONAL DESCRIPTION
28 --------------------------------------------------------------------------------
29
30 HISTORY
31 --------------------------------------------------------------------------------
32 08/24/00  JSB  Created
33
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35 INCLUDES
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
37
38 #include <iostream>
39 #include <sstream>
40 #include <cstdlib>
41
42 #include "FGNozzle.h"
43 #include "input_output/FGXMLElement.h"
44
45 using namespace std;
46
47 namespace JSBSim {
48
49 static const char *IdSrc = "$Id: FGNozzle.cpp,v 1.15 2012/03/18 15:48:35 jentron Exp $";
50 static const char *IdHdr = ID_NOZZLE;
51
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53 CLASS IMPLEMENTATION
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
55
56
57 FGNozzle::FGNozzle(FGFDMExec* FDMExec, Element* nozzle_element, int num)
58                     : FGThruster(FDMExec, nozzle_element, num)
59 {
60   if (nozzle_element->FindElement("area"))
61     Area = nozzle_element->FindElementValueAsNumberConvertTo("area", "FT2");
62   else {
63     cerr << "Fatal Error: Nozzle exit area must be given in nozzle config file." << endl;
64     exit(-1);
65   }
66
67   Thrust = 0;
68   Type = ttNozzle;
69   
70   Debug(0);
71 }
72
73 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74
75 FGNozzle::~FGNozzle()
76 {
77   Debug(1);
78 }
79
80 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
81
82 double FGNozzle::Calculate(double vacThrust)
83 {
84   Thrust = max((double)0.0, vacThrust - in.Pressure*Area);
85
86   vFn(1) = Thrust * cos(ReverserAngle);
87
88   return Thrust;
89 }
90
91 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
92
93 string FGNozzle::GetThrusterLabels(int id, const string& delimeter)
94 {
95   std::ostringstream buf;
96
97   buf << Name << " Thrust (engine " << id << " in lbs)";
98
99   return buf.str();
100 }
101
102 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
103
104 string FGNozzle::GetThrusterValues(int id, const string& delimeter)
105 {
106   std::ostringstream buf;
107
108   buf << Thrust;
109
110   return buf.str();
111 }
112
113 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 //    The bitmasked value choices are as follows:
115 //    unset: In this case (the default) JSBSim would only print
116 //       out the normally expected messages, essentially echoing
117 //       the config files as they are read. If the environment
118 //       variable is not set, debug_lvl is set to 1 internally
119 //    0: This requests JSBSim not to output any messages
120 //       whatsoever.
121 //    1: This value explicity requests the normal JSBSim
122 //       startup messages
123 //    2: This value asks for a message to be printed out when
124 //       a class is instantiated
125 //    4: When this value is set, a message is displayed when a
126 //       FGModel object executes its Run() method
127 //    8: When this value is set, various runtime state variables
128 //       are printed out periodically
129 //    16: When set various parameters are sanity checked and
130 //       a message is printed out when they go out of bounds
131
132 void FGNozzle::Debug(int from)
133 {
134   if (debug_lvl <= 0) return;
135
136   if (debug_lvl & 1) { // Standard console startup message output
137     if (from == 0) { // Constructor
138       cout << "      Nozzle Name: " << Name << endl;
139       cout << "      Nozzle Exit Area = " << Area << endl;
140     }
141   }
142   if (debug_lvl & 2 ) { // Instantiation/Destruction notification
143     if (from == 0) cout << "Instantiated: FGNozzle" << endl;
144     if (from == 1) cout << "Destroyed:    FGNozzle" << endl;
145   }
146   if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
147   }
148   if (debug_lvl & 8 ) { // Runtime state variables
149   }
150   if (debug_lvl & 16) { // Sanity checking
151   }
152   if (debug_lvl & 64) {
153     if (from == 0) { // Constructor
154       cout << IdSrc << endl;
155       cout << IdHdr << endl;
156     }
157   }
158 }
159 }