]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGBuoyantForces.h
Merge branch 'next' of http://git.gitorious.org/fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / models / FGBuoyantForces.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGBuoyantForces.h
4  Author:       Anders Gidenstam, Jon S. Berndt
5  Date started: 01/21/08
6
7  ------------- Copyright (C) 2008 - 2010  Anders Gidenstam        -------------
8  ------------- Copyright (C) 2008  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 HISTORY
28 --------------------------------------------------------------------------------
29 01/21/08   JSB   Created
30
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 SENTRY
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34
35 #ifndef FGBuoyanTFORCES_H
36 #define FGBuoyanTFORCES_H
37
38 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 INCLUDES
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41
42 #include <vector>
43 #include <map>
44
45 #include "FGModel.h"
46 #include "FGGasCell.h"
47 #include "math/FGColumnVector3.h"
48 #include "input_output/FGXMLFileRead.h"
49
50 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
51 DEFINITIONS
52 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
53
54 #define ID_BUOYANTFORCES "$Id: FGBuoyantForces.h,v 1.11 2010/05/07 20:38:34 andgi Exp $"
55
56 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57 FORWARD DECLARATIONS
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
59
60 namespace JSBSim {
61
62 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
63 CLASS DOCUMENTATION
64 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
65
66 /** Encapsulates the Buoyant forces calculations.
67     This class owns and contains the list of force/coefficients that define the
68     Buoyant properties of an air vehicle.
69     
70     Here's an example of a gas cell specification:
71
72     @code
73     <buoyant_forces>
74
75       <!-- Interface properties -->
76       <property>ballonets/in-flow-ft3ps[0]</property>
77
78       <gas_cell type="HYDROGEN">
79         <location unit="M">
80           <x> 18.8 </x>
81           <y> 0.0 </y>
82           <z> 0.0 </z>
83         </location>
84         <x_radius unit="M"> 22.86 </x_radius>
85         <y_radius unit="M">  4.55 </y_radius>
86         <z_radius unit="M">  4.55 </z_radius>
87         <max_overpressure unit="PA"> 340.0 </max_overpressure> 
88         <valve_coefficient unit="M4*SEC/KG"> 0.015 </valve_coefficient>
89       </gas_cell>
90       
91       ... {other gas cells} ...
92       
93     </buoyant_forces>
94     @endcode
95
96     See FGGasCell for the full configuration file format for gas cells.
97
98     @author Anders Gidenstam, Jon S. Berndt
99     @version $Id: FGBuoyantForces.h,v 1.11 2010/05/07 20:38:34 andgi Exp $
100 */
101
102 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
103 CLASS DECLARATION
104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
105
106 class FGBuoyantForces : public FGModel, public FGXMLFileRead
107 {
108
109 public:
110   /** Constructor
111       @param Executive a pointer to the parent executive object */
112   FGBuoyantForces(FGFDMExec* Executive);
113   /// Destructor
114   ~FGBuoyantForces();
115
116   bool InitModel(void);
117
118   /** Runs the Buoyant forces model; called by the Executive
119       @return false if no error */
120   bool Run(void);
121
122   /** Loads the Buoyant forces model.
123       The Load function for this class expects the XML parser to
124       have found the Buoyant_forces keyword in the configuration file.
125       @param element pointer to the current XML element for Buoyant forces parameters.
126       @return true if successful */
127   bool Load(Element* element);
128
129   /** Gets the total Buoyant force vector.
130       @return a force vector. */
131   const FGColumnVector3& GetForces(void) const {return vTotalForces;}
132
133   /** Gets a component of the total Buoyant force vector.
134       @return a component of the force vector. */
135   double GetForces(int idx) const {return vTotalForces(idx);}
136
137   /** Gets the total Buoyancy moment vector.
138       @return a moment vector. */
139   const FGColumnVector3& GetMoments(void) const {return vTotalMoments;}
140
141   /** Gets a component of the total Buoyancy moment vector.
142       @return a component of the moment vector. */
143   double GetMoments(int idx) const {return vTotalMoments(idx);}
144
145   /** Gets the total gas mass. The gas mass is part of the aircraft's
146       inertia.
147       @return mass in slugs. */
148   double GetGasMass(void);
149
150   /** Gets the total moment from the gas mass.
151       @return a moment vector. */
152   const FGColumnVector3& GetGasMassMoment(void);
153
154   /** Gets the total moments of inertia for the gas mass.
155       @return . */
156   const FGMatrix33& GetGasMassInertia(void);
157
158   /** Gets the strings for the current set of gas cells.
159       @param delimeter either a tab or comma string depending on output type
160       @return a string containing the descriptive names for all parameters */
161   string GetBuoyancyStrings(string delimeter);
162
163   /** Gets the coefficient values.
164       @param delimeter either a tab or comma string depending on output type
165       @return a string containing the numeric values for the current set of
166       parameters */
167   string GetBuoyancyValues(string delimeter);
168
169 private:
170   vector <FGGasCell*> Cells;
171   // Buoyant forces and moments. Excluding the gas weight.
172   FGColumnVector3 vTotalForces;
173   FGColumnVector3 vTotalMoments;
174
175   // Gas mass related masses, inertias and moments.
176   FGMatrix33 gasCellJ;
177   FGColumnVector3 vGasCellXYZ;
178   FGColumnVector3 vXYZgasCell_arm;
179
180   bool NoneDefined;
181
182   void bind(void);
183
184   void Debug(int from);
185 };
186
187 } // namespace JSBSim
188
189 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
190 #endif
191