1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Header: FGBuoyantForces.h
4 Author: Anders Gidenstam, Jon S. Berndt
7 ------------- Copyright (C) 2008 - 2011 Anders Gidenstam -------------
8 ------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) -------------
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
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
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.
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.
28 --------------------------------------------------------------------------------
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
35 #ifndef FGBUOYANTFORCES_H
36 #define FGBUOYANTFORCES_H
38 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
46 #include "FGGasCell.h"
47 #include "math/FGColumnVector3.h"
48 #include "input_output/FGXMLFileRead.h"
50 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
54 #define ID_BUOYANTFORCES "$Id: FGBuoyantForces.h,v 1.16 2011/10/31 14:54:41 bcoconni Exp $"
56 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
62 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
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.
70 Here's an example of a gas cell specification:
75 <!-- Interface properties -->
76 <property>ballonets/in-flow-ft3ps[0]</property>
78 <gas_cell type="HYDROGEN">
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>
91 ... {other gas cells} ...
96 See FGGasCell for the full configuration file format for gas cells.
98 @author Anders Gidenstam, Jon S. Berndt
99 @version $Id: FGBuoyantForces.h,v 1.16 2011/10/31 14:54:41 bcoconni Exp $
102 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
106 class FGBuoyantForces : public FGModel, public FGXMLFileRead
111 @param Executive a pointer to the parent executive object */
112 FGBuoyantForces(FGFDMExec* Executive);
116 bool InitModel(void);
118 /** Runs the Buoyant forces model; called by the Executive
119 Can pass in a value indicating if the executive is directing the simulation to Hold.
120 @param Holding if true, the executive has been directed to hold the sim from
121 advancing time. Some models may ignore this flag, such as the Input
122 model, which may need to be active to listen on a socket for the
123 "Resume" command to be given.
124 @return false if no error */
125 bool Run(bool Holding);
127 /** Loads the Buoyant forces model.
128 The Load function for this class expects the XML parser to
129 have found the Buoyant_forces keyword in the configuration file.
130 @param element pointer to the current XML element for Buoyant forces parameters.
131 @return true if successful */
132 bool Load(Element* element);
134 /** Gets the total Buoyant force vector.
135 @return a force vector in lbs. */
136 const FGColumnVector3& GetForces(void) const {return vTotalForces;}
138 /** Gets a component of the total Buoyant force vector.
139 @return a component of the force vector in lbs. */
140 double GetForces(int idx) const {return vTotalForces(idx);}
142 /** Gets the total Buoyancy moment vector.
143 @return a moment vector in the body frame in lbs ft. */
144 const FGColumnVector3& GetMoments(void) const {return vTotalMoments;}
146 /** Gets a component of the total Buoyancy moment vector.
147 @return a component of the moment vector in the body frame in lbs ft. */
148 double GetMoments(int idx) const {return vTotalMoments(idx);}
150 /** Gets the total gas mass. The gas mass is part of the aircraft's
152 @return mass in slugs. */
153 double GetGasMass(void) const;
155 /** Gets the total moment from the gas mass.
156 @return a moment vector in the structural frame in lbs in. */
157 const FGColumnVector3& GetGasMassMoment(void);
159 /** Gets the total moments of inertia for the gas mass in the body frame.
160 @return moments of inertia matrix in the body frame
161 in slug ft<sup>2</sup>. */
162 const FGMatrix33& GetGasMassInertia(void);
164 /** Gets the strings for the current set of gas cells.
165 @param delimeter either a tab or comma string depending on output type
166 @return a string containing the descriptive names for all parameters */
167 string GetBuoyancyStrings(const string& delimeter);
169 /** Gets the coefficient values.
170 @param delimeter either a tab or comma string depending on output type
171 @return a string containing the numeric values for the current set of
173 string GetBuoyancyValues(const string& delimeter);
175 FGGasCell::Inputs in;
178 vector <FGGasCell*> Cells;
179 // Buoyant forces and moments. Excluding the gas weight.
180 FGColumnVector3 vTotalForces; // [lbs]
181 FGColumnVector3 vTotalMoments; // [lbs ft]
183 // Gas mass related masses, inertias and moments.
184 FGMatrix33 gasCellJ; // [slug ft^2]
185 FGColumnVector3 vGasCellXYZ;
186 FGColumnVector3 vXYZgasCell_arm; // [lbs in]
192 void Debug(int from);
195 } // namespace JSBSim
197 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%