diff --git a/src/FDM/JSBSim/FGFDMExec.cpp b/src/FDM/JSBSim/FGFDMExec.cpp index aef1ed1c3..12bbe9b8f 100644 --- a/src/FDM/JSBSim/FGFDMExec.cpp +++ b/src/FDM/JSBSim/FGFDMExec.cpp @@ -392,10 +392,16 @@ bool FGFDMExec::RunIC(void) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // // A private, internal function call for Tie-ing to a property, so it needs an -// argument. Nothing is done with the argument, yet. +// argument. void FGFDMExec::ResetToInitialConditions(int mode) { + if (mode == 1) { + for (unsigned int i=0; i<Outputs.size(); i++) { + Outputs[i]->SetStartNewFile(true); + } + } + ResetToInitialConditions(); } diff --git a/src/FDM/JSBSim/input_output/FGScript.h b/src/FDM/JSBSim/input_output/FGScript.h index fdb0a97ff..5ae50dfcf 100644 --- a/src/FDM/JSBSim/input_output/FGScript.h +++ b/src/FDM/JSBSim/input_output/FGScript.h @@ -186,7 +186,7 @@ public: bool RunScript(void); void ResetEvents(void) { - for (int i=0; i<Events.size(); i++) Events[i].reset(); + for (unsigned int i=0; i<Events.size(); i++) Events[i].reset(); } private: diff --git a/src/FDM/JSBSim/models/FGFCS.cpp b/src/FDM/JSBSim/models/FGFCS.cpp index 98d524362..ac015f9b0 100644 --- a/src/FDM/JSBSim/models/FGFCS.cpp +++ b/src/FDM/JSBSim/models/FGFCS.cpp @@ -139,7 +139,7 @@ bool FGFCS::InitModel(void) DfPos[i] = DsbPos[i] = DspPos[i] = 0.0; } - for (int i=0; i<Systems.size(); i++) { + for (unsigned int i=0; i<Systems.size(); i++) { if (Systems[i]->GetType() == "LAG" || Systems[i]->GetType() == "LEAD_LAG" || Systems[i]->GetType() == "WASHOUT" || @@ -150,10 +150,9 @@ bool FGFCS::InitModel(void) } else if (Systems[i]->GetType() == "PID" ) { ((FGPID*)Systems[i])->ResetPastStates(); } - } - for (int i=0; i<FCSComponents.size(); i++) { + for (unsigned int i=0; i<FCSComponents.size(); i++) { if (FCSComponents[i]->GetType() == "LAG" || FCSComponents[i]->GetType() == "LEAD_LAG" || FCSComponents[i]->GetType() == "WASHOUT" || @@ -166,7 +165,7 @@ bool FGFCS::InitModel(void) } } - for (int i=0; i<APComponents.size(); i++) { + for (unsigned int i=0; i<APComponents.size(); i++) { if (APComponents[i]->GetType() == "LAG" || APComponents[i]->GetType() == "LEAD_LAG" || APComponents[i]->GetType() == "WASHOUT" || diff --git a/src/FDM/JSBSim/models/FGOutput.cpp b/src/FDM/JSBSim/models/FGOutput.cpp index 00bfc7a65..b76f5d9a2 100644 --- a/src/FDM/JSBSim/models/FGOutput.cpp +++ b/src/FDM/JSBSim/models/FGOutput.cpp @@ -128,11 +128,13 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex) sFirstPass = dFirstPass = true; socket = 0; flightGearSocket = 0; + runID_postfix = 0; Type = otNone; SubSystems = 0; enabled = true; + StartNewFile = false; delimeter = ", "; - Filename = ""; + BaseFilename = Filename = ""; DirectivesFile = ""; output_file_name = ""; @@ -155,8 +157,25 @@ FGOutput::~FGOutput() bool FGOutput::InitModel(void) { + char fname[1000] = ""; + if (!FGModel::InitModel()) return false; + if (Filename.size() > 0 && StartNewFile) { + int idx = BaseFilename.find_last_of("."); + int len = BaseFilename.length(); + string extension = ""; + if (idx != string::npos) { + extension = BaseFilename.substr(idx, len-idx); + len -= extension.length(); + } + sprintf(fname, "%s_%d%s", BaseFilename.substr(0,len).c_str(), runID_postfix++, extension.c_str()); + Filename = string(fname); + datafile.close(); + StartNewFile = false; + dFirstPass = true; + } + return true; } @@ -216,7 +235,7 @@ void FGOutput::DelimitedOutput(string fname) if (fname == "COUT" || fname == "cout") { buffer = cout.rdbuf(); } else { - datafile.open(fname.c_str()); + if (!datafile.is_open()) datafile.open(fname.c_str()); buffer = datafile.rdbuf(); } @@ -946,7 +965,7 @@ bool FGOutput::Load(Element* element) else flightGearSocket = new FGfdmSocket(name, port, FGfdmSocket::ptTCP); // create tcp socket (default) } else { - Filename = name; + BaseFilename = Filename = name; } if (!document->GetAttributeValue("rate").empty()) { OutRate = (int)document->GetAttributeValueAsNumber("rate"); diff --git a/src/FDM/JSBSim/models/FGOutput.h b/src/FDM/JSBSim/models/FGOutput.h index 7194c119b..51fcade39 100644 --- a/src/FDM/JSBSim/models/FGOutput.h +++ b/src/FDM/JSBSim/models/FGOutput.h @@ -148,6 +148,7 @@ public: void SetType(string); + void SetStartNewFile(bool tt) {StartNewFile = tt;} void SetSubsystems(int tt) {SubSystems = tt;} inline void Enable(void) { enabled = true; } inline void Disable(void) { enabled = false; } @@ -181,7 +182,9 @@ private: enum {otNone, otCSV, otTab, otSocket, otTerminal, otFlightGear, otUnknown} Type; bool sFirstPass, dFirstPass, enabled; int SubSystems; - string output_file_name, delimeter, Filename, DirectivesFile; + int runID_postfix; + bool StartNewFile; + string output_file_name, delimeter, BaseFilename, Filename, DirectivesFile; ofstream datafile; FGfdmSocket* socket; FGfdmSocket* flightGearSocket; diff --git a/src/FDM/JSBSim/models/FGPropulsion.cpp b/src/FDM/JSBSim/models/FGPropulsion.cpp index 82092f8ad..859254a83 100644 --- a/src/FDM/JSBSim/models/FGPropulsion.cpp +++ b/src/FDM/JSBSim/models/FGPropulsion.cpp @@ -216,7 +216,7 @@ void FGPropulsion::InitRunning(int n) { if (n > 0) { // A specific engine is supposed to be initialized - if (n >= GetNumEngines() ) { + if (n >= (int)GetNumEngines() ) { cerr << "Tried to initialize a non-existent engine!" << endl; throw; } diff --git a/src/FDM/JSBSim/models/atmosphere/FGMSIS.h b/src/FDM/JSBSim/models/atmosphere/FGMSIS.h index f9ced1eaf..02de74903 100755 --- a/src/FDM/JSBSim/models/atmosphere/FGMSIS.h +++ b/src/FDM/JSBSim/models/atmosphere/FGMSIS.h @@ -161,7 +161,7 @@ private: /* MESO7 */ double meso_tn1[5]; double meso_tn2[4]; - double meso_tn3[3]; + double meso_tn3[5]; double meso_tgn1[2]; double meso_tgn2[2]; double meso_tgn3[2];