JSBSim Flight Dynamics Model 1.3.0 (09 Apr 2026)
An Open Source Flight Dynamics and Control Software Library in C++
Loading...
Searching...
No Matches
FGOutputTextFile Class Reference

Detailed Description

Implements the output to a human readable text file.

This class uses the standard C++ library to open and close a file to which output values are comma-separated (CSV) or tabulated (TAB).

Definition at line 65 of file FGOutputTextFile.h.

#include <FGOutputTextFile.h>

+ Inheritance diagram for FGOutputTextFile:
+ Collaboration diagram for FGOutputTextFile:

Public Member Functions

 FGOutputTextFile (FGFDMExec *fdmex)
 Constructor.
 
bool Load (Element *el) override
 Init the output directives from an XML file.
 
void Print (void) override
 Generates the output to the text file.
 
void SetDelimiter (const std::string &delim)
 Set the delimiter.
 
- Public Member Functions inherited from FGOutputFile
 FGOutputFile (FGFDMExec *fdmex)
 Constructor.
 
 ~FGOutputFile () override
 Destructor : closes the file.
 
bool InitModel (void) override
 Initializes the instance.
 
void SetOutputName (const std::string &fname) override
 Overwrites the name identifier under which the output will be logged.
 
void SetStartNewOutput (void) override
 Reset the output prior to a restart of the simulation.
 
- Public Member Functions inherited from FGOutputType
 FGOutputType (FGFDMExec *fdmex)
 Constructor (implement the FGModel interface).
 
 ~FGOutputType () override
 Destructor.
 
void Disable (void)
 Disables the output generation.
 
void Enable (void)
 Enables the output generation.
 
virtual const std::string & GetOutputName (void) const
 Get the name identifier to which the output will be directed.
 
double GetRateHz (void) const
 Get the output rate in Hz for this output.
 
bool InitModel (void) override
 Init the output model according to its configitation.
 
bool Load (Element *el) override
 Init the output directives from an XML file (implement the FGModel interface).
 
bool Run (bool Holding) override
 Executes the output directives (implement the FGModel interface).
 
void SetIdx (unsigned int idx)
 Set the idx for this output instance.
 
void SetOutputProperties (std::vector< SGPropertyNode_ptr > &outputProperties)
 Set the list of properties that should be output for this output instance.
 
void SetRateHz (double rtHz)
 Set the output rate for this output instances.
 
void SetSubSystems (int subSystems)
 Set the activated subsystems for this output instance.
 
bool Toggle (void)
 Toggles the output generation.
 
- Public Member Functions inherited from FGModel
 FGModel (FGFDMExec *)
 Constructor.
 
 ~FGModel () override
 Destructor.
 
virtual SGPath FindFullPathName (const SGPath &path) const
 
FGFDMExecGetExec (void) const
 
const std::string & GetName (void) const
 
unsigned int GetRate (void) const
 Get the output rate for the model in frames.
 
void SetPropertyManager (std::shared_ptr< FGPropertyManager > fgpm)
 
void SetRate (unsigned int tt)
 Set the ouput rate for the model in frames.
 
- Public Member Functions inherited from FGModelFunctions
std::string GetFunctionStrings (const std::string &delimeter) const
 Gets the strings for the current set of functions.
 
std::string GetFunctionValues (const std::string &delimeter) const
 Gets the function values.
 
std::shared_ptr< FGFunctionGetPreFunction (const std::string &name)
 Get one of the "pre" function.
 
bool Load (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PostLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PreLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void RunPostFunctions (void)
 
void RunPreFunctions (void)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 

Protected Member Functions

void CloseFile (void) override
 Closes the file.
 
bool OpenFile (void) override
 Opens the file.
 
- Protected Member Functions inherited from FGOutputType
void Debug (int from) override
 
- Protected Member Functions inherited from FGModel
bool Upload (Element *el, bool preLoad)
 Uploads this model in memory.
 

Protected Attributes

sg_ofstream datafile
 
std::string delimeter
 
- Protected Attributes inherited from FGOutputFile
SGPath Filename
 
- Protected Attributes inherited from FGOutputType
std::shared_ptr< FGAccelerationsAccelerations
 
std::shared_ptr< FGAerodynamicsAerodynamics
 
std::shared_ptr< FGAircraftAircraft
 
std::shared_ptr< FGAuxiliaryAuxiliary
 
std::shared_ptr< FGBuoyantForcesBuoyantForces
 
bool enabled
 
std::shared_ptr< FGExternalReactionsExternalReactions
 
std::shared_ptr< FGFCSFCS
 
std::shared_ptr< FGGroundReactionsGroundReactions
 
std::shared_ptr< FGMassBalanceMassBalance
 
std::vector< std::string > OutputCaptions
 
unsigned int OutputIdx
 
std::vector< FGPropertyValue * > OutputParameters
 
std::shared_ptr< FGPropagatePropagate
 
std::shared_ptr< FGPropulsionPropulsion
 
int SubSystems
 
std::shared_ptr< FGWindsWinds
 
- Protected Attributes inherited from FGModel
unsigned int exe_ctr
 
FGFDMExecFDMExec
 
std::string Name
 
std::shared_ptr< FGPropertyManager > PropertyManager
 
unsigned int rate
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< std::shared_ptr< FGFunction > > PostFunctions
 
std::vector< std::shared_ptr< FGFunction > > PreFunctions
 

Additional Inherited Members

- Public Types inherited from FGOutputType
enum  eSubSystems {
  ssSimulation = 1 , ssAerosurfaces = 2 , ssRates = 4 , ssVelocities = 8 ,
  ssForces = 16 , ssMoments = 32 , ssAtmosphere = 64 , ssMassProps = 128 ,
  ssAeroFunctions = 256 , ssPropagate = 512 , ssGroundReactions = 1024 , ssFCS = 2048 ,
  ssPropulsion = 4096
}
 Subsystem types for specifying which will be output in the FDM data logging. More...
 
- Public Types inherited from FGJSBBase
enum  { eL = 1 , eM , eN }
 Moments L, M, N. More...
 
enum  { eP = 1 , eQ , eR }
 Rates P, Q, R. More...
 
enum  { eU = 1 , eV , eW }
 Velocities U, V, W. More...
 
enum  { eX = 1 , eY , eZ }
 Positions X, Y, Z. More...
 
enum  { ePhi = 1 , eTht , ePsi }
 Euler angles Phi, Theta, Psi. More...
 
enum  { eDrag = 1 , eSide , eLift }
 Stability axis forces, Drag, Side force, Lift. More...
 
enum  { eRoll = 1 , ePitch , eYaw }
 Local frame orientation Roll, Pitch, Yaw. More...
 
enum  { eNorth = 1 , eEast , eDown }
 Local frame position North, East, Down. More...
 
enum  { eLat = 1 , eLong , eRad }
 Locations Radius, Latitude, Longitude. More...
 
enum  {
  inNone = 0 , inDegrees , inRadians , inMeters ,
  inFeet
}
 Conversion specifiers. More...
 
- Static Public Member Functions inherited from FGJSBBase
static const std::string & GetVersion (void)
 Returns the version number of JSBSim.
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit.
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine.
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius.
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine.
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin.
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius.
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit.
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin.
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius.
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters.
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison.
 
static constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static constexpr double sign (double num)
 
- Public Attributes inherited from FGOutputType
enum JSBSim::FGOutputType::eSubSystems subsystems
 
- Static Public Attributes inherited from FGJSBBase
static char highint [5] = {27, '[', '1', 'm', '\0' }
 highlights text
 
static char halfint [5] = {27, '[', '2', 'm', '\0' }
 low intensity text
 
static char normint [6] = {27, '[', '2', '2', 'm', '\0' }
 normal intensity text
 
static char reset [5] = {27, '[', '0', 'm', '\0' }
 resets text properties
 
static char underon [5] = {27, '[', '4', 'm', '\0' }
 underlines text
 
static char underoff [6] = {27, '[', '2', '4', 'm', '\0' }
 underline off
 
static char fgblue [6] = {27, '[', '3', '4', 'm', '\0' }
 blue text
 
static char fgcyan [6] = {27, '[', '3', '6', 'm', '\0' }
 cyan text
 
static char fgred [6] = {27, '[', '3', '1', 'm', '\0' }
 red text
 
static char fggreen [6] = {27, '[', '3', '2', 'm', '\0' }
 green text
 
static char fgdef [6] = {27, '[', '3', '9', 'm', '\0' }
 default text
 
static short debug_lvl = 1
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Static Protected Attributes inherited from FGJSBBase
static constexpr double radtodeg = 180. / M_PI
 
static constexpr double degtorad = M_PI / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double fttom = 0.3048
 
static constexpr double ktstofps = 1852./(3600*fttom)
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inhgtopa = 3386.38
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff.
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static const std::string needed_cfg_version = "2.0"
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 

Constructor & Destructor Documentation

◆ FGOutputTextFile()

FGOutputTextFile ( FGFDMExec fdmex)
inline

Constructor.

Definition at line 69 of file FGOutputTextFile.h.

69: FGOutputFile(fdmex), delimeter(",") {}
FGOutputFile(FGFDMExec *fdmex)
Constructor.

Member Function Documentation

◆ CloseFile()

void CloseFile ( void  )
inlineoverrideprotectedvirtual

Closes the file.

Reimplemented from FGOutputFile.

Definition at line 90 of file FGOutputTextFile.h.

90{ if (datafile.is_open()) datafile.close(); }

◆ Load()

bool Load ( Element el)
overridevirtual

Init the output directives from an XML file.

Parameters
elementXML Element that is pointing to the output directives

Reimplemented from FGOutputFile.

Definition at line 64 of file FGOutputTextFile.cpp.

65{
66 if(!FGOutputFile::Load(el))
67 return false;
68
69 string type = el->GetAttributeValue("type");
70 string delim;
71 if (type == "TABULAR") {
72 delim = "\t";
73 } else {
74 delim = ",";
75 }
76
77 SetDelimiter(delim);
78
79 return true;
80}
bool Load(Element *el) override
Init the output directives from an XML file.
void SetDelimiter(const std::string &delim)
Set the delimiter.
+ Here is the call graph for this function:

◆ OpenFile()

bool OpenFile ( void  )
overrideprotectedvirtual

Opens the file.

Implements FGOutputFile.

Definition at line 84 of file FGOutputTextFile.cpp.

85{
86 unique_ptr<FGLogging> out;
87 streambuf* buffer = nullptr;
88 string scratch = Filename.utf8Str();
89
90 if (to_upper(scratch) == "COUT") {
91 out.reset(new FGLogging(LogLevel::STDOUT));
92 buffer = out->rdbuf();
93 } else {
94 datafile.clear();
95 datafile.open(Filename);
96 if (!datafile) {
97 FGLogging log(LogLevel::ERROR);
98 log << LogFormat::RED << LogFormat::BOLD << "\nERROR: unable to open the file "
99 << LogFormat::RESET << Filename.c_str()
100 << LogFormat::RED << LogFormat::BOLD << "\n => Output to this file is disabled.\n\n"
101 << LogFormat::RESET;
102 Disable();
103 return false;
104 }
105 buffer = datafile.rdbuf();
106 }
107
108 ostream outstream(buffer);
109
110 outstream.precision(10);
111
112 outstream << "Time";
113 if (SubSystems & ssSimulation) {
114 // Nothing here, yet
115 }
116 if (SubSystems & ssAerosurfaces) {
117 outstream << delimeter;
118 outstream << "Aileron Command (norm)" + delimeter;
119 outstream << "Elevator Command (norm)" + delimeter;
120 outstream << "Rudder Command (norm)" + delimeter;
121 outstream << "Flap Command (norm)" + delimeter;
122 outstream << "Left Aileron Position (deg)" + delimeter;
123 outstream << "Right Aileron Position (deg)" + delimeter;
124 outstream << "Elevator Position (deg)" + delimeter;
125 outstream << "Rudder Position (deg)" + delimeter;
126 outstream << "Flap Position (deg)";
127 }
128 if (SubSystems & ssRates) {
129 outstream << delimeter;
130 outstream << "P (deg/s)" + delimeter + "Q (deg/s)" + delimeter + "R (deg/s)" + delimeter;
131 outstream << "P dot (deg/s^2)" + delimeter + "Q dot (deg/s^2)" + delimeter + "R dot (deg/s^2)" + delimeter;
132 outstream << "P_{inertial} (deg/s)" + delimeter + "Q_{inertial} (deg/s)" + delimeter + "R_{inertial} (deg/s)";
133 }
134 if (SubSystems & ssVelocities) {
135 outstream << delimeter;
136 outstream << "q bar (psf)" + delimeter;
137 outstream << "Reynolds Number" + delimeter;
138 outstream << "V_{Total} (ft/s)" + delimeter;
139 outstream << "V_{Inertial} (ft/s)" + delimeter;
140 outstream << "UBody" + delimeter + "VBody" + delimeter + "WBody" + delimeter;
141 outstream << "UdotBody" + delimeter + "VdotBody" + delimeter + "WdotBody" + delimeter;
142 outstream << "UdotBody_i" + delimeter + "VdotBody_i" + delimeter + "WdotBody_i" + delimeter;
143 outstream << "BodyAccel_X" + delimeter + "BodyAccel_Y" + delimeter + "BodyAccel_Z" + delimeter;
144 outstream << "Aero V_{X Body} (ft/s)" + delimeter + "Aero V_{Y Body} (ft/s)" + delimeter + "Aero V_{Z Body} (ft/s)" + delimeter;
145 outstream << "V_{X_{inertial}} (ft/s)" + delimeter + "V_{Y_{inertial}} (ft/s)" + delimeter + "V_{Z_{inertial}} (ft/s)" + delimeter;
146 outstream << "V_{X_{ecef}} (ft/s)" + delimeter + "V_{Y_{ecef}} (ft/s)" + delimeter + "V_{Z_{ecef}} (ft/s)" + delimeter;
147 outstream << "V_{North} (ft/s)" + delimeter + "V_{East} (ft/s)" + delimeter + "V_{Down} (ft/s)";
148 }
149 if (SubSystems & ssForces) {
150 outstream << delimeter;
151 outstream << "F_{Drag} (lbs)" + delimeter + "F_{Side} (lbs)" + delimeter + "F_{Lift} (lbs)" + delimeter;
152 outstream << "L/D" + delimeter;
153 outstream << "F_{Aero x} (lbs)" + delimeter + "F_{Aero y} (lbs)" + delimeter + "F_{Aero z} (lbs)" + delimeter;
154 outstream << "F_{Prop x} (lbs)" + delimeter + "F_{Prop y} (lbs)" + delimeter + "F_{Prop z} (lbs)" + delimeter;
155 outstream << "F_{Gear x} (lbs)" + delimeter + "F_{Gear y} (lbs)" + delimeter + "F_{Gear z} (lbs)" + delimeter;
156 outstream << "F_{Ext x} (lbs)" + delimeter + "F_{Ext y} (lbs)" + delimeter + "F_{Ext z} (lbs)" + delimeter;
157 outstream << "F_{Buoyant x} (lbs)" + delimeter + "F_{Buoyant y} (lbs)" + delimeter + "F_{Buoyant z} (lbs)" + delimeter;
158 outstream << "F_{Weight x} (lbs)" + delimeter + "F_{Weight y} (lbs)" + delimeter + "F_{Weight z} (lbs)" + delimeter;
159 outstream << "F_{Total x} (lbs)" + delimeter + "F_{Total y} (lbs)" + delimeter + "F_{Total z} (lbs)";
160 }
161 if (SubSystems & ssMoments) {
162 outstream << delimeter;
163 outstream << "L_{Aero} (ft-lbs)" + delimeter + "M_{Aero} (ft-lbs)" + delimeter + "N_{Aero} (ft-lbs)" + delimeter;
164 outstream << "L_{Aero MRC} (ft-lbs)" + delimeter + "M_{Aero MRC} (ft-lbs)" + delimeter + "N_{Aero MRC} (ft-lbs)" + delimeter;
165 outstream << "L_{Prop} (ft-lbs)" + delimeter + "M_{Prop} (ft-lbs)" + delimeter + "N_{Prop} (ft-lbs)" + delimeter;
166 outstream << "L_{Gear} (ft-lbs)" + delimeter + "M_{Gear} (ft-lbs)" + delimeter + "N_{Gear} (ft-lbs)" + delimeter;
167 outstream << "L_{ext} (ft-lbs)" + delimeter + "M_{ext} (ft-lbs)" + delimeter + "N_{ext} (ft-lbs)" + delimeter;
168 outstream << "L_{Buoyant} (ft-lbs)" + delimeter + "M_{Buoyant} (ft-lbs)" + delimeter + "N_{Buoyant} (ft-lbs)" + delimeter;
169 outstream << "L_{Total} (ft-lbs)" + delimeter + "M_{Total} (ft-lbs)" + delimeter + "N_{Total} (ft-lbs)";
170 }
171 if (SubSystems & ssAtmosphere) {
172 outstream << delimeter;
173 outstream << "Rho (slugs/ft^3)" + delimeter;
174 outstream << "Absolute Viscosity" + delimeter;
175 outstream << "Kinematic Viscosity" + delimeter;
176 outstream << "Temperature (R)" + delimeter;
177 outstream << "P_{SL} (psf)" + delimeter;
178 outstream << "P_{Ambient} (psf)" + delimeter;
179 outstream << "Turbulence Magnitude (ft/sec)" + delimeter;
180 outstream << "Turbulence X Direction (deg)" + delimeter;
181 outstream << "Wind V_{North} (ft/s)" + delimeter + "Wind V_{East} (ft/s)" + delimeter + "Wind V_{Down} (ft/s)" + delimeter;
182 outstream << "Roll Turbulence (deg/sec)" + delimeter + "Pitch Turbulence (deg/sec)" + delimeter + "Yaw Turbulence (deg/sec)";
183 }
184 if (SubSystems & ssMassProps) {
185 outstream << delimeter;
186 outstream << "I_{xx}" + delimeter;
187 outstream << "I_{xy}" + delimeter;
188 outstream << "I_{xz}" + delimeter;
189 outstream << "I_{yx}" + delimeter;
190 outstream << "I_{yy}" + delimeter;
191 outstream << "I_{yz}" + delimeter;
192 outstream << "I_{zx}" + delimeter;
193 outstream << "I_{zy}" + delimeter;
194 outstream << "I_{zz}" + delimeter;
195 outstream << "Mass" + delimeter;
196 outstream << "Weight" + delimeter;
197 outstream << "X_{cg}" + delimeter + "Y_{cg}" + delimeter + "Z_{cg}";
198 }
199 if (SubSystems & ssPropagate) {
200 outstream << delimeter;
201 outstream << "Altitude ASL (ft)" + delimeter;
202 outstream << "Altitude AGL (ft)" + delimeter;
203 outstream << "Phi (deg)" + delimeter + "Theta (deg)" + delimeter + "Psi (deg)" + delimeter;
204 outstream << "Q(1)_{LOCAL}" + delimeter + "Q(2)_{LOCAL}" + delimeter + "Q(3)_{LOCAL}" + delimeter + "Q(4)_{LOCAL}" + delimeter;
205 outstream << "Q(1)_{ECEF}" + delimeter + "Q(2)_{ECEF}" + delimeter + "Q(3)_{ECEF}" + delimeter + "Q(4)_{ECEF}" + delimeter;
206 outstream << "Q(1)_{ECI}" + delimeter + "Q(2)_{ECI}" + delimeter + "Q(3)_{ECI}" + delimeter + "Q(4)_{ECI}" + delimeter;
207 outstream << "Alpha (deg)" + delimeter;
208 outstream << "Beta (deg)" + delimeter;
209 outstream << "Latitude (deg)" + delimeter;
210 outstream << "Latitude Geodetic (deg)" + delimeter;
211 outstream << "Longitude (deg)" + delimeter;
212 outstream << "X_{ECI} (ft)" + delimeter + "Y_{ECI} (ft)" + delimeter + "Z_{ECI} (ft)" + delimeter;
213 outstream << "X_{ECEF} (ft)" + delimeter + "Y_{ECEF} (ft)" + delimeter + "Z_{ECEF} (ft)" + delimeter;
214 outstream << "Earth Position Angle (deg)" + delimeter;
215 outstream << "Distance AGL (ft)" + delimeter;
216 outstream << "Terrain Elevation (ft)";
217 }
218 if (SubSystems & ssAeroFunctions) {
219 scratch = Aerodynamics->GetAeroFunctionStrings(delimeter);
220 if (scratch.length() != 0) outstream << delimeter << scratch;
221 }
222 if (SubSystems & ssFCS) {
223 scratch = FCS->GetComponentStrings(delimeter);
224 if (scratch.length() != 0) outstream << delimeter << scratch;
225 }
226 if (SubSystems & ssGroundReactions) {
227 outstream << delimeter;
228 outstream << GroundReactions->GetGroundReactionStrings(delimeter);
229 }
230 if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0) {
231 outstream << delimeter;
232 outstream << Propulsion->GetPropulsionStrings(delimeter);
233 }
234
235 for (unsigned int i=0;i<OutputParameters.size();++i) {
236 if (!OutputCaptions[i].empty())
237 outstream << delimeter << OutputCaptions[i];
238 else
239 outstream << delimeter << OutputParameters[i]->GetFullyQualifiedName();
240 }
241
242 if (!PreFunctions.empty()) {
243 for (unsigned int i=0;i<PreFunctions.size();i++) {
244 outstream << delimeter << PreFunctions[i]->GetName();
245 }
246 }
247
248 outstream << endl;
249 outstream.flush();
250
251 return true;
252}
void Disable(void)
Disables the output generation.
@ ssPropulsion
Subsystem: Propulsion (= 4096)
@ ssForces
Subsystem: Forces (= 16)
@ ssAtmosphere
Subsystem: Atmosphere (= 64)
@ ssPropagate
Subsystem: Propagate (= 512)
@ ssGroundReactions
Subsystem: Ground Reactions (= 1024)
@ ssFCS
Subsystem: FCS (= 2048)
@ ssMoments
Subsystem: Moments (= 32)
@ ssRates
Subsystem: Body rates (= 4)
@ ssVelocities
Subsystem: Velocities (= 8)
@ ssAerosurfaces
Subsystem: Aerosurfaces (= 2)
@ ssMassProps
Subsystem: Mass Properties (= 128)
@ ssSimulation
Subsystem: Simulation (= 1)
@ ssAeroFunctions
Subsystem: Coefficients (= 256)
+ Here is the call graph for this function:

◆ Print()

void Print ( void  )
overridevirtual

Generates the output to the text file.

Implements FGOutputFile.

Definition at line 256 of file FGOutputTextFile.cpp.

257{
258 streambuf* buffer;
259 string scratch = Filename.utf8Str();
260 unique_ptr<FGLogging> out;
261
262 if (to_upper(scratch) == "COUT") {
263 out.reset(new FGLogging(LogLevel::STDOUT));
264 buffer = out->rdbuf();
265 } else {
266 buffer = datafile.rdbuf();
267 }
268
269 ostream outstream(buffer);
270
271 outstream.precision(10);
272
273 outstream << FDMExec->GetSimTime();
274 if (SubSystems & ssSimulation) {
275 }
276 if (SubSystems & ssAerosurfaces) {
277 outstream << delimeter;
278 outstream << FCS->GetDaCmd() << delimeter;
279 outstream << FCS->GetDeCmd() << delimeter;
280 outstream << FCS->GetDrCmd() << delimeter;
281 outstream << FCS->GetDfCmd() << delimeter;
282 outstream << FCS->GetDaLPos(ofDeg) << delimeter;
283 outstream << FCS->GetDaRPos(ofDeg) << delimeter;
284 outstream << FCS->GetDePos(ofDeg) << delimeter;
285 outstream << FCS->GetDrPos(ofDeg) << delimeter;
286 outstream << FCS->GetDfPos(ofDeg);
287 }
288 if (SubSystems & ssRates) {
289 outstream << delimeter;
290 outstream << (radtodeg*Propagate->GetPQR()).Dump(delimeter) << delimeter;
291 outstream << (radtodeg*Accelerations->GetPQRdot()).Dump(delimeter) << delimeter;
292 outstream << (radtodeg*Propagate->GetPQRi()).Dump(delimeter);
293 }
294 if (SubSystems & ssVelocities) {
295 outstream << delimeter;
296 outstream << Auxiliary->Getqbar() << delimeter;
297 outstream << Auxiliary->GetReynoldsNumber() << delimeter;
298 outstream << setprecision(12) << Auxiliary->GetVt() << delimeter;
299 outstream << Propagate->GetInertialVelocityMagnitude() << delimeter;
300 outstream << setprecision(12) << Propagate->GetUVW().Dump(delimeter) << delimeter;
301 outstream << setprecision(12) << Accelerations->GetUVWdot().Dump(delimeter) << delimeter;
302 outstream << setprecision(12) << Accelerations->GetUVWidot().Dump(delimeter) << delimeter;
303 outstream << setprecision(12) << Accelerations->GetBodyAccel().Dump(delimeter) << delimeter;
304 outstream << Auxiliary->GetAeroUVW().Dump(delimeter) << delimeter;
305 outstream << Propagate->GetInertialVelocity().Dump(delimeter) << delimeter;
306 outstream << Propagate->GetECEFVelocity().Dump(delimeter) << delimeter;
307 outstream << Propagate->GetVel().Dump(delimeter);
308 outstream.precision(10);
309 }
310 if (SubSystems & ssForces) {
311 outstream << delimeter;
312 outstream << Aerodynamics->GetvFw().Dump(delimeter) << delimeter;
313 outstream << Aerodynamics->GetLoD() << delimeter;
314 outstream << Aerodynamics->GetForces().Dump(delimeter) << delimeter;
315 outstream << Propulsion->GetForces().Dump(delimeter) << delimeter;
316 outstream << Accelerations->GetGroundForces().Dump(delimeter) << delimeter;
317 outstream << ExternalReactions->GetForces().Dump(delimeter) << delimeter;
318 outstream << BuoyantForces->GetForces().Dump(delimeter) << delimeter;
319 outstream << Accelerations->GetWeight().Dump(delimeter) << delimeter;
320 outstream << Accelerations->GetForces().Dump(delimeter);
321 }
322 if (SubSystems & ssMoments) {
323 outstream << delimeter;
324 outstream << Aerodynamics->GetMoments().Dump(delimeter) << delimeter;
325 outstream << Aerodynamics->GetMomentsMRC().Dump(delimeter) << delimeter;
326 outstream << Propulsion->GetMoments().Dump(delimeter) << delimeter;
327 outstream << Accelerations->GetGroundMoments().Dump(delimeter) << delimeter;
328 outstream << ExternalReactions->GetMoments().Dump(delimeter) << delimeter;
329 outstream << BuoyantForces->GetMoments().Dump(delimeter) << delimeter;
330 outstream << Accelerations->GetMoments().Dump(delimeter);
331 }
332 if (SubSystems & ssAtmosphere) {
333 const auto Atmosphere = FDMExec->GetAtmosphere();
334 outstream << delimeter;
335 outstream << Atmosphere->GetDensity() << delimeter;
336 outstream << Atmosphere->GetAbsoluteViscosity() << delimeter;
337 outstream << Atmosphere->GetKinematicViscosity() << delimeter;
338 outstream << Atmosphere->GetTemperature() << delimeter;
339 outstream << Atmosphere->GetPressureSL() << delimeter;
340 outstream << Atmosphere->GetPressure() << delimeter;
341 outstream << Winds->GetTurbMagnitude() << delimeter;
342 outstream << Winds->GetTurbDirection() << delimeter;
343 outstream << Winds->GetTotalWindNED().Dump(delimeter) << delimeter;
344 outstream << (Winds->GetTurbPQR()*radtodeg).Dump(delimeter);
345 }
346 if (SubSystems & ssMassProps) {
347 outstream << delimeter;
348 outstream << MassBalance->GetJ().Dump(delimeter) << delimeter;
349 outstream << MassBalance->GetMass() << delimeter;
350 outstream << MassBalance->GetWeight() << delimeter;
351 outstream << MassBalance->GetXYZcg().Dump(delimeter);
352 }
353 if (SubSystems & ssPropagate) {
354 outstream.precision(14);
355 outstream << delimeter;
356 outstream << Propagate->GetAltitudeASL() << delimeter;
357 outstream << Propagate->GetDistanceAGL() << delimeter;
358 outstream << (radtodeg*Propagate->GetEuler()).Dump(delimeter) << delimeter;
359 outstream << Propagate->GetQuaternion().Dump(delimeter) << delimeter;
360 FGQuaternion Qec = Propagate->GetQuaternionECEF();
361 outstream << Qec.Dump(delimeter) << delimeter;
362 outstream << Propagate->GetQuaternionECI().Dump(delimeter) << delimeter;
363 outstream << Auxiliary->Getalpha(inDegrees) << delimeter;
364 outstream << Auxiliary->Getbeta(inDegrees) << delimeter;
365 outstream << Propagate->GetLatitudeDeg() << delimeter;
366 outstream << Propagate->GetGeodLatitudeDeg() << delimeter;
367 outstream << Propagate->GetLongitudeDeg() << delimeter;
368 outstream.precision(18);
369 outstream << ((FGColumnVector3)Propagate->GetInertialPosition()).Dump(delimeter) << delimeter;
370 outstream << ((FGColumnVector3)Propagate->GetLocation()).Dump(delimeter) << delimeter;
371 outstream.precision(14);
372 outstream << Propagate->GetEarthPositionAngleDeg() << delimeter;
373 outstream << Propagate->GetDistanceAGL() << delimeter;
374 outstream << Propagate->GetTerrainElevation();
375 outstream.precision(10);
376 }
377 if (SubSystems & ssAeroFunctions) {
378 scratch = Aerodynamics->GetAeroFunctionValues(delimeter);
379 if (scratch.length() != 0) outstream << delimeter << scratch;
380 }
381 if (SubSystems & ssFCS) {
382 scratch = FCS->GetComponentValues(delimeter);
383 if (scratch.length() != 0) outstream << delimeter << scratch;
384 }
385 if (SubSystems & ssGroundReactions) {
386 outstream << delimeter;
387 outstream << GroundReactions->GetGroundReactionValues(delimeter);
388 }
389 if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0) {
390 outstream << delimeter;
391 outstream << Propulsion->GetPropulsionValues(delimeter);
392 }
393
394 outstream.precision(18);
395 for (unsigned int i=0;i<OutputParameters.size();++i) {
396 outstream << delimeter << OutputParameters[i]->GetValue();
397 }
398 for (unsigned int i=0;i<PreFunctions.size();i++) {
399 outstream << delimeter << PreFunctions[i]->getDoubleValue();
400 }
401 outstream.precision(10);
402
403 outstream << endl;
404 outstream.flush();
405}
double GetSimTime(void) const
Returns the cumulative simulation time in seconds.
Definition FGFDMExec.h:550
+ Here is the call graph for this function:

◆ SetDelimiter()

void SetDelimiter ( const std::string &  delim)
inline

Set the delimiter.

Parameters
delimdelimiter of the output values (most likely a comma or a tab)

Definition at line 75 of file FGOutputTextFile.h.

75{ delimeter = delim; }
+ Here is the caller graph for this function:

Member Data Documentation

◆ datafile

sg_ofstream datafile
protected

Definition at line 87 of file FGOutputTextFile.h.

◆ delimeter

std::string delimeter
protected

Definition at line 86 of file FGOutputTextFile.h.


The documentation for this class was generated from the following files: