namespace JSBSim {
-static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.84 2011/01/16 16:26:14 bcoconni Exp $";
+static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.91 2011/04/05 20:20:21 andgi Exp $";
static const char *IdHdr = ID_FDMEXEC;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dT = 1.0/120.0; // a default timestep size. This is needed for when JSBSim is
// run in standalone mode with no initialization file.
+ AircraftPath = "aircraft";
+ EnginePath = "engine";
+ SystemsPath = "systems";
+
try {
char* num = getenv("JSBSIM_DEBUG");
if (num) debug_lvl = atoi(num); // set debug level
Constructing = true;
typedef int (FGFDMExec::*iPMF)(void) const;
-// instance->Tie("simulation/do_trim_analysis", this, (iPMF)0, &FGFDMExec::DoTrimAnalysis);
- instance->Tie("simulation/do_simple_trim", this, (iPMF)0, &FGFDMExec::DoTrim);
- instance->Tie("simulation/reset", this, (iPMF)0, &FGFDMExec::ResetToInitialConditions);
+// instance->Tie("simulation/do_trim_analysis", this, (iPMF)0, &FGFDMExec::DoTrimAnalysis, false);
+ instance->Tie("simulation/do_simple_trim", this, (iPMF)0, &FGFDMExec::DoTrim, false);
+ instance->Tie("simulation/reset", this, (iPMF)0, &FGFDMExec::ResetToInitialConditions, false);
instance->Tie("simulation/terminate", (int *)&Terminate);
instance->Tie("simulation/sim-time-sec", this, &FGFDMExec::GetSimTime);
instance->Tie("simulation/jsbsim-debug", this, &FGFDMExec::GetDebugLevel, &FGFDMExec::SetDebugLevel);
+ instance->Tie("simulation/frame", (int *)&Frame, false);
Constructing = false;
}
void FGFDMExec::Initialize(FGInitialCondition *FGIC)
{
+ Setsim_time(0.0);
+
Propagate->SetInitialState( FGIC );
Atmosphere->Run();
FGIC->GetWindDFpsIC() );
FGColumnVector3 vAeroUVW;
+
+ //ToDo: move this to the Auxiliary class !?
+
vAeroUVW = Propagate->GetUVW() + Propagate->GetTl2b()*Atmosphere->GetTotalWindNED();
double alpha, beta;
// Process the output element[s]. This element is OPTIONAL, and there may be more than one.
unsigned int idx=0;
- typedef int (FGOutput::*iOPMF)(void) const;
+ typedef double (FGOutput::*iOPMF)(void) const;
+ typedef int (FGFDMExec::*iOPV)(void) const;
+ typedef void (FGFDMExec::*vOPI)(int) const;
element = document->FindElement("output");
while (element) {
if (debug_lvl > 0) cout << endl << " Output data set: " << idx << " ";
} else {
Outputs.push_back(Output);
string outputProp = CreateIndexedPropertyName("simulation/output",idx);
- instance->Tie(outputProp+"/log_rate_hz", Output, (iOPMF)0, &FGOutput::SetRate);
+ instance->Tie(outputProp+"/log_rate_hz", Output, (iOPMF)0, &FGOutput::SetRate, false);
+ instance->Tie("simulation/force-output", this, (iOPV)0, &FGFDMExec::ForceOutput, false);
idx++;
}
element = document->FindNextElement("output");
<< fgdef << endl;
}
- // Late bind previously undefined FCS inputs.
- try {
- FCS->LateBind();
- } catch (string prop) {
- cerr << endl << fgred << " Could not late bind property " << prop
- << ". Aborting." << reset << endl;
- result = false;
- }
-
if (result) {
struct PropertyCatalogStructure masterPCS;
masterPCS.base_string = "";
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+void FGFDMExec::ForceOutput(int idx)
+{
+ if (idx >= 0 && idx < Outputs.size()) Outputs[idx]->Print();
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
bool FGFDMExec::SetOutputDirectives(const string& fname)
{
bool result;
if (result) {
Outputs.push_back(Output);
- typedef int (FGOutput::*iOPMF)(void) const;
+ typedef double (FGOutput::*iOPMF)(void) const;
string outputProp = CreateIndexedPropertyName("simulation/output",Outputs.size()-1);
- instance->Tie(outputProp+"/log_rate_hz", Output, (iOPMF)0, &FGOutput::SetRate);
+ instance->Tie(outputProp+"/log_rate_hz", Output, (iOPMF)0, &FGOutput::SetRate, false);
}
return result;