43 #include "FGFDMExec.h"
44 #include "FGJSBBase.h"
45 #include "FGInitialCondition.h"
51 #define DEFAULT_TOLERANCE 0.001
59 const std::string StateNames[] = {
"all",
"udot",
"vdot",
"wdot",
"qdot",
"pdot",
62 const std::string ControlNames[] = {
"Throttle",
"Sideslip",
"Angle of Attack",
63 "Elevator",
"Ailerons",
"Rudder",
64 "Altitude AGL",
"Pitch Angle",
65 "Roll Angle",
"Flight Path Angle",
66 "Pitch Trim",
"Roll Trim",
"Yaw Trim",
70 class FGInitialCondition;
83 enum State { tAll,tUdot,tVdot,tWdot,tQdot,tPdot,tRdot,tHmgt,tNlf };
84 enum Control { tThrottle, tBeta, tAlpha, tElevator, tAileron, tRudder, tAltAGL,
85 tTheta, tPhi, tGamma, tPitchTrim, tRollTrim, tYawTrim, tHeading };
106 double GetState(
void) { getState();
return state_value; }
108 inline void SetControl(
double value ) { control_value=value; }
109 inline double GetControl(
void) {
return control_value; }
111 inline State GetStateType(
void) {
return state; }
112 inline Control GetControlType(
void) {
return control; }
114 inline std::string GetStateName(
void) {
return StateNames[state]; }
115 inline std::string GetControlName(
void) {
return ControlNames[control]; }
117 inline double GetControlMin(
void) {
return control_min; }
118 inline double GetControlMax(
void) {
return control_max; }
120 inline void SetControlToMin(
void) { control_value=control_min; }
121 inline void SetControlToMax(
void) { control_value=control_max; }
123 inline void SetControlLimits(
double min,
double max) {
128 inline void SetTolerance(
double ff) { tolerance=ff;}
129 inline double GetTolerance(
void) {
return tolerance; }
131 inline double GetSolverEps(
void) {
return solver_eps; }
132 inline void SetSolverEps(
double ff) { solver_eps=ff; }
134 inline int GetIterationLimit(
void) {
return max_iterations; }
135 inline void SetIterationLimit(
int ii) { max_iterations=ii; }
137 inline int GetStability(
void) {
return its_to_stable_value; }
138 inline int GetRunCount(
void) {
return total_stability_iterations; }
139 double GetAvgStability(
void );
141 inline void SetStateTarget(
double target) { state_target=target; }
142 inline double GetStateTarget(
void) {
return state_target; }
144 void AxisReport(
void);
146 bool InTolerance(
void) { getState();
return (fabs(state_value) <= tolerance); }
158 double control_value;
167 double state_convert;
168 double control_convert;
172 int its_to_stable_value;
173 int total_stability_iterations;
174 int total_iterations;
176 void setThrottlesPct(
void);
179 void getControl(
void);
180 void setControl(
void);
182 double computeHmgt(
void);
184 void Debug(
int from);