]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/propulsion/FGNozzle.cpp
Merge branch 'jsd/atmos' into topic/atmos-merge
[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 <sstream>
39
40 #include "FGNozzle.h"
41 #include <models/FGAtmosphere.h>
42
43 namespace JSBSim {
44
45 static const char *IdSrc = "$Id$";
46 static const char *IdHdr = ID_NOZZLE;
47
48 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 CLASS IMPLEMENTATION
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
51
52
53 FGNozzle::FGNozzle(FGFDMExec* FDMExec, Element* nozzle_element, int num)
54                     : FGThruster(FDMExec, nozzle_element, num)
55 {
56   if (nozzle_element->FindElement("area"))
57     Area = nozzle_element->FindElementValueAsNumberConvertTo("area", "FT2");
58   else {
59     cerr << "Fatal Error: Nozzle exit area must be given in nozzle config file." << endl;
60     exit(-1);
61   }
62
63   if (nozzle_element->FindElement("pe"))
64     PE = nozzle_element->FindElementValueAsNumberConvertTo("pe", "PSF");
65   else {
66     cerr << "Fatal Error: Nozzle exit pressure must be given in nozzle config file." << endl;
67     exit(-1);
68   }
69
70   Thrust = 0;
71   Type = ttNozzle;
72   
73   Debug(0);
74 }
75
76 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77
78 FGNozzle::~FGNozzle()
79 {
80   Debug(1);
81 }
82
83 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84
85 double FGNozzle::Calculate(double vacThrust)
86 {
87   double pAtm = fdmex->GetAtmosphere()->GetPressure();
88   Thrust = max((double)0.0, vacThrust - pAtm*Area);
89
90   vFn(1) = Thrust * cos(ReverserAngle);
91
92   return Thrust;
93 }
94
95 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
96
97 string FGNozzle::GetThrusterLabels(int id, string delimeter)
98 {
99   std::ostringstream buf;
100
101   buf << Name << " Thrust (engine " << id << " in lbs)";
102
103   return buf.str();
104 }
105
106 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107
108 string FGNozzle::GetThrusterValues(int id, string delimeter)
109 {
110   std::ostringstream buf;
111
112   buf << Thrust;
113
114   return buf.str();
115 }
116
117 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
118 //    The bitmasked value choices are as follows:
119 //    unset: In this case (the default) JSBSim would only print
120 //       out the normally expected messages, essentially echoing
121 //       the config files as they are read. If the environment
122 //       variable is not set, debug_lvl is set to 1 internally
123 //    0: This requests JSBSim not to output any messages
124 //       whatsoever.
125 //    1: This value explicity requests the normal JSBSim
126 //       startup messages
127 //    2: This value asks for a message to be printed out when
128 //       a class is instantiated
129 //    4: When this value is set, a message is displayed when a
130 //       FGModel object executes its Run() method
131 //    8: When this value is set, various runtime state variables
132 //       are printed out periodically
133 //    16: When set various parameters are sanity checked and
134 //       a message is printed out when they go out of bounds
135
136 void FGNozzle::Debug(int from)
137 {
138   if (debug_lvl <= 0) return;
139
140   if (debug_lvl & 1) { // Standard console startup message output
141     if (from == 0) { // Constructor
142       cout << "      Nozzle Name: " << Name << endl;
143       cout << "      Nozzle Exit Area = " << Area << endl;
144     }
145   }
146   if (debug_lvl & 2 ) { // Instantiation/Destruction notification
147     if (from == 0) cout << "Instantiated: FGNozzle" << endl;
148     if (from == 1) cout << "Destroyed:    FGNozzle" << endl;
149   }
150   if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
151   }
152   if (debug_lvl & 8 ) { // Runtime state variables
153   }
154   if (debug_lvl & 16) { // Sanity checking
155   }
156   if (debug_lvl & 64) {
157     if (from == 0) { // Constructor
158       cout << IdSrc << endl;
159       cout << IdHdr << endl;
160     }
161   }
162 }
163 }