Branch data Line data Source code
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 : 110563 : 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 : 0 : double GetForces(int idx) const {return vTotalForces(idx);}
136 : :
137 : : /** Gets the total Buoyancy moment vector.
138 : : @return a moment vector. */
139 : 57460 : 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 : 0 : 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 : :
|