1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Header: FGBuoyantForces.h
4 Author: Anders Gidenstam, Jon S. Berndt
7 ------------- Copyright (C) 2008 - 2010 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.12 2011/05/20 03:18:36 jberndt 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.12 2011/05/20 03:18:36 jberndt 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. */
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. */
140 double GetForces(int idx) const {return vTotalForces(idx);}
142 /** Gets the total Buoyancy moment vector.
143 @return a moment vector. */
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. */
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);
155 /** Gets the total moment from the gas mass.
156 @return a moment vector. */
157 const FGColumnVector3& GetGasMassMoment(void);
159 /** Gets the total moments of inertia for the gas mass.
161 const FGMatrix33& GetGasMassInertia(void);
163 /** Gets the strings for the current set of gas cells.
164 @param delimeter either a tab or comma string depending on output type
165 @return a string containing the descriptive names for all parameters */
166 string GetBuoyancyStrings(string delimeter);
168 /** Gets the coefficient values.
169 @param delimeter either a tab or comma string depending on output type
170 @return a string containing the numeric values for the current set of
172 string GetBuoyancyValues(string delimeter);
175 vector <FGGasCell*> Cells;
176 // Buoyant forces and moments. Excluding the gas weight.
177 FGColumnVector3 vTotalForces;
178 FGColumnVector3 vTotalMoments;
180 // Gas mass related masses, inertias and moments.
182 FGColumnVector3 vGasCellXYZ;
183 FGColumnVector3 vXYZgasCell_arm;
189 void Debug(int from);
192 } // namespace JSBSim
194 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%