X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGModel.cpp;h=81961eb30c53da01037f4659fd54c777a4a58c92;hb=a302cdc1cbb3c147e7c862b484cdd5d86f30a29c;hp=2e2b8357e5bf70efe6a5e32039a675f22f3414f7;hpb=b770e22a482dd950ea3c89226762a6284af3be1c;p=flightgear.git diff --git a/src/FDM/JSBSim/models/FGModel.cpp b/src/FDM/JSBSim/models/FGModel.cpp index 2e2b8357e..81961eb30 100644 --- a/src/FDM/JSBSim/models/FGModel.cpp +++ b/src/FDM/JSBSim/models/FGModel.cpp @@ -38,27 +38,15 @@ HISTORY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ +#include #include "FGModel.h" -#include "FGState.h" #include "FGFDMExec.h" -#include "FGAtmosphere.h" -#include "FGFCS.h" -#include "FGPropulsion.h" -#include "FGMassBalance.h" -#include "FGAerodynamics.h" -#include "FGInertial.h" -#include "FGGroundReactions.h" -#include "FGExternalReactions.h" -#include "FGAircraft.h" -#include "FGPropagate.h" -#include "FGAuxiliary.h" -#include using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id$"; +static const char *IdSrc = "$Id: FGModel.cpp,v 1.19 2011/05/22 12:44:30 jberndt Exp $"; static const char *IdHdr = ID_MODEL; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -72,27 +60,13 @@ CLASS IMPLEMENTATION FGModel::FGModel(FGFDMExec* fdmex) { FDMExec = fdmex; - NextModel = 0L; - - State = 0; - Atmosphere = 0; - FCS = 0; - Propulsion = 0; - MassBalance = 0; - Aerodynamics = 0; - Inertial = 0; - GroundReactions = 0; - ExternalReactions = 0; - Aircraft = 0; - Propagate = 0; - Auxiliary = 0; //in order for FGModel derived classes to self-bind (that is, call //their bind function in the constructor, the PropertyManager pointer //must be brought up now. PropertyManager = FDMExec->GetPropertyManager(); - exe_ctr = 1; + exe_ctr = 0; rate = 1; if (debug_lvl & 2) cout << " FGModel Base Class" << endl; @@ -102,12 +76,6 @@ FGModel::FGModel(FGFDMExec* fdmex) FGModel::~FGModel() { - for (unsigned int i=0; iGetState(); - Atmosphere = FDMExec->GetAtmosphere(); - FCS = FDMExec->GetFCS(); - Propulsion = FDMExec->GetPropulsion(); - MassBalance = FDMExec->GetMassBalance(); - Aerodynamics = FDMExec->GetAerodynamics(); - Inertial = FDMExec->GetInertial(); - GroundReactions = FDMExec->GetGroundReactions(); - ExternalReactions = FDMExec->GetExternalReactions(); - BuoyantForces = FDMExec->GetBuoyantForces(); - Aircraft = FDMExec->GetAircraft(); - Propagate = FDMExec->GetPropagate(); - Auxiliary = FDMExec->GetAuxiliary(); - - if (!State || - !Atmosphere || - !FCS || - !Propulsion || - !MassBalance || - !Aerodynamics || - !Inertial || - !GroundReactions || - !ExternalReactions || - !Aircraft || - !Propagate || - !Auxiliary) return(false); - else return(true); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -bool FGModel::Load(Element* el) -{ - // Interface properties are all stored in the interface properties array. - string interface_property_string = ""; - - Element *property_element = el->FindElement("property"); - if (property_element && debug_lvl > 0) cout << endl << " Declared properties" - << endl << endl; - while (property_element) { - interface_property_string = property_element->GetDataLine(); - if (PropertyManager->HasNode(interface_property_string)) { - cerr << " Property " << interface_property_string - << " is already defined." << endl; - } else { - double value=0.0; - if ( ! property_element->GetAttributeValue("value").empty()) - value = property_element->GetAttributeValueAsNumber("value"); - interface_properties.push_back(new double(value)); - PropertyManager->Tie(interface_property_string, interface_properties.back()); - if (debug_lvl > 0) - cout << " " << interface_property_string << " (initial value: " - << value << ")" << endl << endl; - } - property_element = el->FindNextElement("property"); - } - - // End of interface property loading logic - - // Load model pre-functions, if any - - Element *function = el->FindElement("function"); - while (function) { - if (function->GetAttributeValue("type") == "pre") { - PreFunctions.push_back(new FGFunction(PropertyManager, function)); - } else if (function->GetAttributeValue("type").empty()) { // Assume pre-function - string funcname = function->GetAttributeValue("name"); - PreFunctions.push_back(new FGFunction(PropertyManager, function)); - } - function = el->FindNextElement("function"); - } - return true; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void FGModel::PostLoad(Element* el) -{ - // Load model post-functions, if any - - Element *function = el->FindElement("function"); - while (function) { - if (function->GetAttributeValue("type") == "post") { - PostFunctions.push_back(new FGFunction(PropertyManager, function)); - } - function = el->FindNextElement("function"); - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// Tell the Functions to cache values, so when the function values -// are being used in the model, the functions do not get -// calculated each time, but instead use the values that have already -// been calculated for this frame. - -void FGModel::RunPreFunctions(void) -{ - vector ::iterator it; - for (it = PreFunctions.begin(); it != PreFunctions.end(); it++) - (*it)->GetValue(); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// Tell the Functions to cache values, so when the function values -// are being used in the model, the functions do not get -// calculated each time, but instead use the values that have already -// been calculated for this frame. - -void FGModel::RunPostFunctions(void) -{ - vector ::iterator it; - for (it = PostFunctions.begin(); it != PostFunctions.end(); it++) - (*it)->GetValue(); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -bool FGModel::Run() +bool FGModel::Run(bool Holding) { if (debug_lvl & 4) cout << "Entering Run() for model " << Name << endl; if (rate == 1) return false; // Fast exit if nothing to do - if (exe_ctr >= rate) exe_ctr = 1; + if (exe_ctr >= rate) exe_ctr = 0; if (exe_ctr++ == 1) return false; else return true;