77 : Root(root), RandomEngine(new default_random_engine), FDMctr(fdmctr)
96 IncrementThenHolding =
false;
97 TimeStepsUntilHold = -1;
103 AircraftPath =
"aircraft";
104 EnginePath =
"engine";
105 SystemsPath =
"systems";
108 char* num = getenv(
"JSBSIM_DEBUG");
120 FDMctr =
new unsigned int;
134 char* num = getenv(
"JSBSIM_DISPERSE");
136 if (
atoi(num) != 0) disperse = 1;
140 std::cerr <<
"Could not process JSBSIM_DISPERSIONS environment variable: Assumed NO dispersions." << endl;
148 catch (
const string& msg) {
149 cerr << endl <<
"Caught error: " << msg << endl;
153 cout << endl <<
"Caught error: " << e.what() << endl;
162 typedef int (
FGFDMExec::*iPMF)(void)
const;
165 instance->Tie(
"simulation/disperse",
this, &FGFDMExec::GetDisperse);
166 instance->Tie(
"simulation/randomseed",
this, (iPMF)&FGFDMExec::SRand, &FGFDMExec::SRand);
167 instance->Tie(
"simulation/terminate", (
int *)&Terminate);
168 instance->Tie(
"simulation/pause", (
int *)&holding);
172 instance->Tie(
"simulation/frame", (
int *)&Frame);
173 instance->Tie(
"simulation/trim-completed", (
int *)&trim_completed);
176 Constructing =
false;
200 }
catch (
const string& msg ) {
201 cout <<
"Caught error: " << msg << endl;
204 for (
unsigned int i=1;
i<ChildFDMList.size();
i++)
delete ChildFDMList[
i]->exec;
206 if (FDMctr != 0) (*FDMctr)--;
215 Inertial->SetTime(sim_time);
224 Inertial->SetTime(sim_time);
232bool FGFDMExec::Allocate(
void)
281 LoadPlanetConstants();
296void FGFDMExec::InitializeModels(
void)
298 for (
unsigned int i = 0;
i < Models.size();
i++) {
303 Models[
i]->InitModel();
309bool FGFDMExec::DeAllocate(
void)
331 for (
unsigned int i=1;
i<ChildFDMList.size();
i++) {
333 ChildFDMList[
i]->Run();
341 for (
unsigned int i = 0;
i < Models.size();
i++) {
343 Models[
i]->Run(holding);
347 unsigned int mode = ResetMode;
353 if (Terminate) success =
false;
360void FGFDMExec::LoadInputs(
unsigned int idx)
449 Aerodynamics->
in.
Vt = Auxiliary->
GetVt();
506 Accelerations->
in.
J = MassBalance->
GetJ();
534void FGFDMExec::LoadPlanetConstants(
void)
536 Propagate->in.vOmegaPlanet = Inertial->GetOmegaPlanet();
537 Accelerations->in.vOmegaPlanet = Inertial->GetOmegaPlanet();
538 Propagate->in.SemiMajor = Inertial->GetSemimajor();
539 Propagate->in.SemiMinor = Inertial->GetSemiminor();
540 Auxiliary->in.StandardGravity = Inertial->GetStandardGravity();
545void FGFDMExec::LoadModelConstants(
void)
547 Winds->in.wingspan = Aircraft->GetWingSpan();
548 Aerodynamics->in.Wingarea = Aircraft->GetWingArea();
549 Aerodynamics->in.Wingchord = Aircraft->Getcbar();
550 Aerodynamics->in.Wingincidence = Aircraft->GetWingIncidence();
551 Aerodynamics->in.Wingspan = Aircraft->GetWingSpan();
552 Auxiliary->in.Wingspan = Aircraft->GetWingSpan();
553 Auxiliary->in.Wingchord = Aircraft->Getcbar();
554 GroundReactions->in.vXYZcg = MassBalance->GetXYZcg();
567 Models[
eInput]->InitModel();
571 Propagate->InitializeDerivatives();
575 MassBalance->GetMassPropertiesReport(0);
578 <<
"End of vehicle configuration loading." << endl
579 <<
"-------------------------------------------------------------------------------"
580 <<
reset << std::setprecision(6) << endl;
583 for (
unsigned int n=0; n < propulsion->
GetNumEngines(); ++n) {
584 if (IC->IsEngineRunning(n)) {
587 }
catch (
const string& str) {
601 Propagate->SetInitialState(FGIC);
610 if (Constructing)
return;
619 Script->ResetEvents();
632 Accelerations->SetHoldDown(hd);
634 Propagate->in.vPQRidot = Accelerations->GetPQRidot();
635 Propagate->in.vUVWidot = Accelerations->GetUVWidot();
637 Propagate->SetHoldDown(hd);
644 vector <string> FDMList;
647 FDMList.push_back(Aircraft->GetAircraftName());
649 for (
unsigned int i=1;
i<ChildFDMList.size();
i++) {
650 FDMList.push_back(ChildFDMList[
i]->exec->GetAircraft()->GetAircraftName());
659 const SGPath& initfile)
664 result = Script->LoadScript(GetFullPath(script), deltaT, initfile);
672 const SGPath& SystemsPath,
const string& model,
675 FGFDMExec::AircraftPath = GetFullPath(AircraftPath);
676 FGFDMExec::EnginePath = GetFullPath(EnginePath);
677 FGFDMExec::SystemsPath = GetFullPath(SystemsPath);
686 SGPath aircraftCfgFileName;
691 if( AircraftPath.isNull() || EnginePath.isNull() || SystemsPath.isNull()) {
692 cerr <<
"Error: attempted to load aircraft with undefined "
693 <<
"aircraft, engine, and system paths" << endl;
697 FullAircraftPath = AircraftPath;
698 if (addModelToPath) FullAircraftPath.append(model);
699 aircraftCfgFileName = FullAircraftPath/(model +
".xml");
707 FGXMLFileRead XMLFileRead;
713 ReadPrologue(document);
715 if (IsChild)
debug_lvl = saved_debug_lvl;
718 Element* element = document->
FindElement(
"fileheader");
720 result = ReadFileHeader(element);
722 cerr << endl <<
"Aircraft fileheader element has problems in file " << aircraftCfgFileName << endl;
732 result = Models[
eInertial]->Load(element);
734 cerr << endl <<
"Planet element has problems in file " << aircraftCfgFileName << endl;
738 LoadPlanetConstants();
746 result = Models[
eAircraft]->Load(element);
748 cerr << endl <<
"Aircraft metrics element has problems in file " << aircraftCfgFileName << endl;
752 cerr << endl <<
"No metrics element was found in the aircraft config file." << endl;
761 cerr << endl <<
"Aircraft mass_balance element has problems in file " << aircraftCfgFileName << endl;
765 cerr << endl <<
"No mass_balance element was found in the aircraft config file." << endl;
770 element = document->
FindElement(
"ground_reactions");
775 <<
"Aircraft ground_reactions element has problems in file "
776 << aircraftCfgFileName << endl;
780 cerr << endl <<
"No ground_reactions element was found in the aircraft config file." << endl;
785 element = document->
FindElement(
"external_reactions");
789 cerr << endl <<
"Aircraft external_reactions element has problems in file " << aircraftCfgFileName << endl;
799 cerr << endl <<
"Aircraft buoyant_forces element has problems in file " << aircraftCfgFileName << endl;
807 auto propulsion =
static_cast<FGPropulsion*
>(Models[
ePropulsion]);
808 result = propulsion->Load(element);
810 cerr << endl <<
"Aircraft propulsion element has problems in file " << aircraftCfgFileName << endl;
813 for (
unsigned int i=0;
i < propulsion->GetNumEngines();
i++)
814 ((FGFCS*)Models[
eSystems])->AddThrottle();
820 result = Models[
eSystems]->Load(element);
822 cerr << endl <<
"Aircraft system element has problems in file " << aircraftCfgFileName << endl;
831 result = Models[
eSystems]->Load(element);
833 cerr << endl <<
"Aircraft autopilot element has problems in file " << aircraftCfgFileName << endl;
841 result = Models[
eSystems]->Load(element);
843 cerr << endl <<
"Aircraft flight_control element has problems in file " << aircraftCfgFileName << endl;
853 cerr << endl <<
"Aircraft aerodynamics element has problems in file " << aircraftCfgFileName << endl;
857 cerr << endl <<
"No expected aerodynamics element was found in the aircraft config file." << endl;
863 if (!
static_cast<FGInput*
>(Models[
eInput])->Load(element))
873 if (!
static_cast<FGOutput*
>(Models[
eOutput])->Load(element))
882 result = ReadChild(element);
884 cerr << endl <<
"Aircraft child element has problems in file " << aircraftCfgFileName << endl;
891 LoadModelConstants();
895 if (IsChild)
debug_lvl = saved_debug_lvl;
899 <<
" JSBSim failed to open the configuration file: " << aircraftCfgFileName
903 for (
unsigned int i=0;
i< Models.size();
i++) LoadInputs(
i);
908 masterPCS.node = Root->GetNode();
928 for (
int i=0;
i<pcs->
node->nChildren();
i++) {
931 int node_idx = pcs->
node->getChild(
i)->getIndex();
935 if (pcs->
node->getChild(
i)->nChildren() == 0) {
936 if (pcsNew->
base_string.substr(0,12) ==
string(
"/fdm/jsbsim/")) {
939 if (pcs->
node->getChild(
i)->getAttribute(SGPropertyNode::READ)) access=
"R";
940 if (pcs->
node->getChild(
i)->getAttribute(SGPropertyNode::WRITE)) access+=
"W";
941 PropertyCatalog.push_back(pcsNew->
base_string+
" ("+access+
")");
955 for (
unsigned i=0;
i<PropertyCatalog.size();
i++) {
956 if (PropertyCatalog[
i].find(in) != string::npos) results += PropertyCatalog[
i] +
"\n";
958 if (results.empty())
return "No matches found\n";
968 << modelName <<
reset << endl << endl;
969 for (
unsigned i=0;
i<PropertyCatalog.size();
i++) {
970 cout <<
" " << PropertyCatalog[
i] << endl;
978 cout << endl <<
"Simulation Configuration" << endl <<
"------------------------" << endl;
979 cout << MassBalance->GetName() << endl;
980 cout << GroundReactions->GetName() << endl;
981 cout << Aerodynamics->GetName() << endl;
982 cout << Propulsion->GetName() << endl;
987bool FGFDMExec::ReadFileHeader(
Element* el)
994 cout << endl <<
highint <<
fgblue <<
"Reading child model: " << IdFDM <<
reset << endl << endl;
1011bool FGFDMExec::ReadPrologue(
Element* el)
1015 if (!el)
return false;
1020 if (
debug_lvl & 1) cout <<
underon <<
"Reading Aircraft Configuration File"
1027 cout <<
" Version: " <<
highint << CFGVersion
1030 cerr << endl <<
fgred <<
"YOU HAVE AN INCOMPATIBLE CFG FILE FOR THIS AIRCRAFT."
1031 " RESULTS WILL BE UNPREDICTABLE !!" << endl;
1033 cerr <<
" You have version: " << CFGVersion << endl <<
fgdef << endl;
1037 if (Release ==
"ALPHA" && (
debug_lvl & 1)) {
1038 cout << endl << endl
1039 <<
highint <<
"This aircraft model is an " <<
fgred << Release
1041 <<
"This aircraft model may not even properly load, and probably"
1042 <<
" will not fly as expected." << endl << endl
1043 <<
fgred <<
highint <<
"Use this model for development purposes ONLY!!!"
1045 }
else if (Release ==
"BETA" && (
debug_lvl & 1)) {
1046 cout << endl << endl
1047 <<
highint <<
"This aircraft model is a " <<
fgred << Release
1049 <<
"This aircraft model probably will not fly as expected." << endl << endl
1050 <<
fgblue <<
highint <<
"Use this model for development purposes ONLY!!!"
1052 }
else if (Release ==
"PRODUCTION" && (
debug_lvl & 1)) {
1053 cout << endl << endl
1054 <<
highint <<
"This aircraft model is a " <<
fgblue << Release
1057 cout << endl << endl
1058 <<
highint <<
"This aircraft model is an " <<
fgred << Release
1060 <<
"This aircraft model may not even properly load, and probably"
1061 <<
" will not fly as expected." << endl << endl
1062 <<
fgred <<
highint <<
"Use this model for development purposes ONLY!!!"
1071bool FGFDMExec::ReadChild(
Element* el)
1081 struct childData* child =
new childData;
1083 child->exec =
new FGFDMExec(Root, FDMctr);
1084 child->exec->SetChild(
true);
1088 if (sMated ==
"false") child->mated =
false;
1090 if (sInternal ==
"true") child->internal =
true;
1092 child->exec->SetAircraftPath( AircraftPath );
1093 child->exec->SetEnginePath( EnginePath );
1094 child->exec->SetSystemsPath( SystemsPath );
1095 child->exec->LoadModel(childAircraft);
1101 const string s(
" No location was found for this child object!");
1103 << s <<
reset << endl;
1104 throw BaseException(s);
1111 cerr << endl <<
highint <<
" No orientation was found for this child object! Assuming 0,0,0." <<
reset << endl;
1114 ChildFDMList.push_back(child);
1140 if( IncrementThenHolding ) {
1142 if (TimeStepsUntilHold == 0) {
1149 IncrementThenHolding =
false;
1150 TimeStepsUntilHold--;
1152 }
else if ( TimeStepsUntilHold > 0 ) {
1154 TimeStepsUntilHold--;
1163 if (Constructing)
return;
1166 throw(
"Illegal trimming mode!");
1169 bool success =
trim.DoTrim();
1182void FGFDMExec::SRand(
int sr)
1186 RandomEngine->seed(sr);
1209void FGFDMExec::Debug(
int from)
1218 cout <<
"JSBSim startup beginning ...\n\n";
1219 if (disperse == 1) cout <<
"Dispersions are ON." << endl << endl;
1220 }
else if (from == 3) {
1221 cout <<
"\n\nJSBSim startup complete\n\n";
1225 if (from == 0) cout <<
"Instantiated: FGFDMExec" << endl;
1226 if (from == 1) cout <<
"Destroyed: FGFDMExec" << endl;
1230 cout <<
"================== Frame: " << Frame <<
" Time: "
1231 << sim_time <<
" dt: " << dT << endl;
FGColumnVector3 FindElementTripletConvertTo(const std::string &target_units)
Composes a 3-element column vector for the supplied location or orientation.
std::string ReadFrom(void) const
Return a string that contains a description of the location where the current XML element was read fr...
std::string GetAttributeValue(const std::string &key)
Retrieves an attribute.
Element * FindElement(const std::string &el="")
Searches for a specified element.
Element * FindNextElement(const std::string &el="")
Searches for the next element as specified.
Element * LoadXMLDocument(const SGPath &XML_filename, bool verbose=true)
std::string GetDataLine(unsigned int i=0)
Gets a line of data belonging to an element.
Element * FindElement(const std::string &el="")
Searches for a specified element.
struct JSBSim::FGAccelerations::Inputs in
const FGColumnVector3 & GetUVWidot(void) const
Retrieves the body axis acceleration in the ECI frame.
const FGColumnVector3 & GetBodyAccel(void) const
Retrieves the acceleration resulting from the applied forces.
const FGColumnVector3 & GetPQRidot(void) const
Retrieves the axis angular acceleration vector in the ECI frame.
const FGColumnVector3 & GetUVWdot(void) const
Retrieves the body axis acceleration.
Encapsulates the aerodynamic calculations.
const FGColumnVector3 & GetMoments(void) const
Gets the total aerodynamic moment vector about the CG.
const FGColumnVector3 & GetvFw(void) const
Retrieves the aerodynamic forces in the wind axes.
const FGColumnVector3 & GetForces(void) const
Gets the total aerodynamic force vector.
struct JSBSim::FGAerodynamics::Inputs in
Encapsulates an Aircraft and its systems.
const FGColumnVector3 & GetMoments(void) const
const FGColumnVector3 & GetForces(void) const
const FGColumnVector3 & GetXYZrp(void) const
Gets the the aero reference point (RP) coordinates.
const FGColumnVector3 & GetXYZep(void) const
struct JSBSim::FGAircraft::Inputs in
const FGColumnVector3 & GetXYZvrp(void) const
struct JSBSim::FGAtmosphere::Inputs in
virtual double GetPressureSL(ePressure to=ePSF) const
virtual double GetSoundSpeed(void) const
Returns the speed of sound in ft/sec.
virtual double GetDensityRatio(void) const
Returns the ratio of at-altitude density over the sea level value.
virtual double GetDensitySL(void) const
Returns the sea level density in slugs/ft^3.
virtual double GetTemperature() const
Returns the actual, modeled temperature at the current altitude in degrees Rankine.
virtual double GetDensity(void) const
Returns the density in slugs/ft^3.
virtual double GetPressureRatio(void) const
Returns the ratio of at-altitude pressure over the sea level value.
virtual double GetPressure(void) const
Returns the pressure in psf.
virtual double GetKinematicViscosity(void) const
Returns the kinematic viscosity.
Encapsulates various uncategorized scheduled functions.
double Getbeta(void) const
const FGMatrix33 & GetTw2b(void) const
Calculates and returns the wind-to-body axis transformation matrix.
double GetTAT_C(void) const
struct JSBSim::FGAuxiliary::Inputs in
double GetTotalPressure(void) const
Returns the total pressure.
const FGColumnVector3 & GetAeroUVW(void) const
double GetAeroPQR(int axis) const
const FGMatrix33 & GetTb2w(void) const
Calculates and returns the body-to-wind axis transformation matrix.
double Getalpha(void) const
double GetVground(void) const
Gets the ground speed in feet per second.
double GetVt(void) const
Gets the magnitude of total vehicle velocity including wind effects in feet per second.
double Getqbar(void) const
double GetVcalibratedKTS(void) const
Returns Calibrated airspeed in knots.
Encapsulates the Buoyant forces calculations.
double GetGasMass(void) const
Gets the total gas mass.
const FGColumnVector3 & GetForces(void) const
Gets the total Buoyant force vector.
const FGColumnVector3 & GetGasMassMoment(void)
Gets the total moment from the gas mass.
const FGColumnVector3 & GetMoments(void) const
Gets the total Buoyancy moment vector.
const FGMatrix33 & GetGasMassInertia(void)
Gets the total moments of inertia for the gas mass in the body frame.
double Magnitude(void) const
Length of the vector.
Manages the external and/or arbitrary forces and moments.
const FGColumnVector3 & GetForces(void) const
Retrieves the total forces defined in the external reactions.
const FGColumnVector3 & GetMoments(void) const
Retrieves the total moment resulting from the forces defined in the external reactions.
double GetThrottleCmd(int engine) const
Gets the throttle command.
double GetThrottlePos(int engine) const
Gets the throttle position.
double GetPropAdvance(int engine) const
Gets the prop pitch position.
double GetMixturePos(int engine) const
Gets the mixture position.
double GetGearPos(void) const
Gets the gear position (0 up, 1 down), defaults to down.
double GetMixtureCmd(int engine) const
Gets the mixture command.
const std::vector< double > & GetBrakePos() const
bool GetPropFeather(int engine) const
Gets the prop feather position.
void Unbind(void)
Unbind all tied JSBSim properties.
double IncrTime(void)
Increments the simulation time if not in Holding mode.
bool RunIC(void)
Initializes the sim from the initial condition object and executes each scheduled model without integ...
FGTrim * GetTrim(void)
Returns a pointer to the FGTrim object.
int GetDebugLevel(void) const
Retrieves the current debug level setting.
void ResumeIntegration(void)
Resumes the simulation by resetting delta T to the correct value.
void PrintSimulationConfiguration(void) const
double GetDeltaT(void) const
Returns the simulation delta T.
static const int DONT_EXECUTE_RUN_IC
void CheckIncrementalHold(void)
Checks if required to hold afer increment.
void BuildPropertyCatalog(struct PropertyCatalogStructure *pcs)
Builds a catalog of properties.
void Initialize(FGInitialCondition *FGIC)
Initializes the simulation with initial conditions.
std::vector< std::string > EnumerateFDMs(void)
Returns a vector of strings representing the names of all loaded models (future)
double GetSimTime(void) const
Returns the cumulative simulation time in seconds.
bool IntegrationSuspended(void) const
Returns the simulation suspension state.
FGFDMExec(FGPropertyManager *root=0, unsigned int *fdmctr=0)
Default constructor.
FGPropertyManager * GetPropertyManager(void)
Returns a pointer to the property manager object.
double Setsim_time(double cur_time)
Sets the current sim time.
void SetHoldDown(bool hd)
Sets the property forces/hold-down.
bool GetHoldDown(void) const
Gets the value of the property forces/hold-down.
std::string GetPropulsionTankReport()
static const int START_NEW_OUTPUT
Mode flags for ResetToInitialConditions.
void SetDebugLevel(int level)
Sets the debug level.
bool LoadModel(const SGPath &AircraftPath, const SGPath &EnginePath, const SGPath &SystemsPath, const std::string &model, bool addModelToPath=true)
Loads an aircraft model.
bool Run(void)
This function executes each scheduled model in succession.
void PrintPropertyCatalog(void)
void SuspendIntegration(void)
Suspends the simulation and sets the delta T to zero.
bool LoadScript(const SGPath &Script, double deltaT=0.0, const SGPath &initfile=SGPath())
Load a script.
std::string QueryPropertyCatalog(const std::string &check)
Retrieves property or properties matching the supplied string.
void DoTrim(int mode)
Executes trimming in the selected mode.
void ResetToInitialConditions(int mode)
Resets the initial conditions object and prepares the simulation to run again.
~FGFDMExec()
Default destructor.
Manages ground reactions modeling.
Models inertial forces (e.g.
struct JSBSim::FGInertial::Inputs in
const FGColumnVector3 & GetGravity(void) const
const FGColumnVector3 GetWindNEDFpsIC(void) const
Gets the initial wind velocity in the NED local frame.
void bind(FGPropertyManager *pm)
static char fgdef[6]
default text
static char highint[5]
highlights text
static char reset[5]
resets text properties
static char fgblue[6]
blue text
static char normint[6]
normal intensity text
static int gaussian_random_number_phase
static char fgred[6]
red text
static const std::string JSBSim_version
static char underoff[6]
underline off
static char underon[5]
underlines text
static const std::string needed_cfg_version
static std::string CreateIndexedPropertyName(const std::string &Property, int index)
Models weight, balance and moment of inertia information.
FGColumnVector3 StructuralToBody(const FGColumnVector3 &r) const
Conversion from the structural frame to the body frame.
double GetEmptyWeight(void) const
double GetMass(void) const
const FGColumnVector3 & GetXYZcg(void) const
Returns the coordinates of the center of gravity expressed in the structural frame.
struct JSBSim::FGMassBalance::Inputs in
const FGMatrix33 & GetJinv(void) const
Returns the inverse of the inertia matrix expressed in the body frame.
const FGMatrix33 & GetJ(void) const
Returns the inertia matrix expressed in the body frame.
unsigned int GetRate(void)
Get the output rate for the model in frames.
Handles simulation output.
Models the EOM and integration/propagation of state.
const FGMatrix33 & GetTl2b(void) const
Retrieves the local-to-body transformation matrix.
const FGColumnVector3 & GetTerrainAngularVelocity(void) const
double GetSinEuler(int idx) const
Retrieves the sine of a vehicle Euler angle component.
const FGColumnVector3 & GetTerrainVelocity(void) const
const FGMatrix33 & GetTec2l(void) const
Retrieves the ECEF-to-local transformation matrix.
double GetAltitudeASL(void) const
Returns the current altitude above sea level.
double GetDistanceAGL(void) const
const FGColumnVector3 & GetPQRi(void) const
Retrieves the body angular rates vector, relative to the ECI (inertial) frame.
const FGColumnVector3 & GetInertialPosition(void) const
Retrieves the inertial position vector.
const FGLocation & GetLocation(void) const
double GetCosEuler(int idx) const
Retrieves the cosine of a vehicle Euler angle component.
const FGMatrix33 & GetTec2i(void) const
Retrieves the ECEF-to-ECI transformation matrix.
const FGMatrix33 & GetTb2i(void) const
Retrieves the body-to-ECI transformation matrix.
const FGColumnVector3 & GetPQR(void) const
Retrieves the body angular rates vector, relative to the ECEF frame.
const FGColumnVector3 & GetUVW(void) const
Retrieves the body frame vehicle velocity vector.
const FGColumnVector3 & GetVel(void) const
Retrieves the velocity vector.
const FGMatrix33 & GetTi2b(void) const
Retrieves the ECI-to-body transformation matrix.
struct JSBSim::FGPropagate::Inputs in
const FGMatrix33 & GetTec2b(void) const
Retrieves the ECEF-to-body transformation matrix.
const FGMatrix33 & GetTb2l(void) const
Retrieves the body-to-local transformation matrix.
Class wrapper for property handling.
FGPropertyNode * GetNode(const std::string &path, bool create=false)
Get a property node.
Propulsion management class.
struct FGEngine::Inputs in
const FGColumnVector3 & GetForces(void) const
double GetTanksWeight(void) const
unsigned int GetNumEngines(void) const
Retrieves the number of engines defined for the aircraft.
const FGColumnVector3 & GetMoments(void) const
const FGColumnVector3 & GetTanksMoment(void)
void InitRunning(int n)
Sets up the engines as running.
const FGMatrix33 & CalculateTankInertias(void)
Encapsulates the JSBSim scripting capability.
The trimming routine for JSBSim.
Models atmospheric disturbances: winds, gusts, turbulence, downbursts, etc.
virtual const FGColumnVector3 & GetTotalWindNED(void) const
Retrieves the total wind components in NED frame.
virtual double GetTurbPQR(int idx) const
struct JSBSim::FGWinds::Inputs in
static int atoi(const string &str)
std::string & trim(std::string &str)
std::string base_string
Name of the property.
FGPropertyNode_ptr node
The node for the property.