1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Header: FGBuoyantForces.h
4 Author: Anders Gidenstam, Jon S. Berndt
7 ------------- Copyright (C) 2008 Anders Gidenstam -------------
8 ------------- Copyright (C) 2008 Jon S. Berndt (jsb@hal-pc.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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
43 # include <simgear/compiler.h>
44 # ifdef SG_HAVE_STD_INCLUDES
57 #include "FGGasCell.h"
58 #include <math/FGColumnVector3.h>
59 #include <input_output/FGXMLFileRead.h>
61 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
63 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
65 #define ID_BUOYANTFORCES "$Id$"
67 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
73 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
77 /** Encapsulates the Buoyant forces calculations.
78 This class owns and contains the list of force/coefficients that define the
79 Buoyant properties of an air vehicle.
81 Here's an example of a gas cell specification:
85 <gas_cell type="HYDROGEN">
91 <x_radius unit="M"> 22.86 </x_radius>
92 <y_radius unit="M"> 4.55 </y_radius>
93 <z_radius unit="M"> 4.55 </z_radius>
94 <max_overpressure unit="PA"> 340.0 </max_overpressure>
95 <valve_coefficient unit="M4*SEC/KG"> 0.015 </valve_coefficient>
98 ... {other gass cells} ...
103 See FGGasCell for the full configuration file format for gas cells.
105 @author Anders Gidenstam, Jon S. Berndt
109 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
113 class FGBuoyantForces : public FGModel, public FGXMLFileRead
118 @param Executive a pointer to the parent executive object */
119 FGBuoyantForces(FGFDMExec* Executive);
123 bool InitModel(void);
125 /** Runs the Buoyant forces model; called by the Executive
126 @return false if no error */
129 /** Loads the Buoyant forces model.
130 The Load function for this class expects the XML parser to
131 have found the Buoyant_forces keyword in the configuration file.
132 @param element pointer to the current XML element for Buoyant forces parameters.
133 @return true if successful */
134 bool Load(Element* element);
136 /** Gets the total Buoyant force vector.
137 @return a force vector. */
138 FGColumnVector3 GetForces(void) {return vTotalForces;}
140 /** Gets the total Buoyancy moment vector.
141 @return a moment vector. */
142 FGColumnVector3 GetMoments(void) {return vTotalMoments;}
144 /** Gets the total gas mass. The gas mass is part of the aircraft's
146 @return mass in slugs. */
147 double GetGasMass(void);
149 /** Gets the total moment from the gas mass.
150 @return a moment vector. */
151 FGColumnVector3& GetGasMassMoment(void);
153 /** Gets the total moments of inertia for the gas mass.
155 FGMatrix33& GetGasMassInertia(void);
157 /** Gets the strings for the current set of gas cells.
158 @param delimeter either a tab or comma string depending on output type
159 @return a string containing the descriptive names for all parameters */
160 string GetBuoyancyStrings(string delimeter);
162 /** Gets the coefficient values.
163 @param delimeter either a tab or comma string depending on output type
164 @return a string containing the numeric values for the current set of
166 string GetBuoyancyValues(string delimeter);
169 vector <FGGasCell*> Cells;
170 // Buoyant forces and moments. Excluding the gas weight.
171 FGColumnVector3 vTotalForces;
172 FGColumnVector3 vTotalMoments;
174 // Gas mass related masses, inertias and moments.
176 FGColumnVector3 vGasCellXYZ;
177 FGColumnVector3 vXYZgasCell_arm;
184 void Debug(int from);
187 } // namespace JSBSim
189 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%