X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGGroundReactions.cpp;h=b334851ced2b52416f26a78529ee891d5de3b4ce;hb=024ef128e3395e8c0e32b360abe19b4d345e4f80;hp=9126c9f812ec768d4a50468a347ab027585cc8d0;hpb=c5c895dae250898d667ae29641c51a550be7ee90;p=flightgear.git diff --git a/src/FDM/JSBSim/models/FGGroundReactions.cpp b/src/FDM/JSBSim/models/FGGroundReactions.cpp index 9126c9f81..b334851ce 100644 --- a/src/FDM/JSBSim/models/FGGroundReactions.cpp +++ b/src/FDM/JSBSim/models/FGGroundReactions.cpp @@ -39,56 +39,16 @@ INCLUDES #include #include "FGGroundReactions.h" -#include "FGFCS.h" +#include "FGLGear.h" #include "input_output/FGPropertyManager.h" using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGGroundReactions.cpp,v 1.31 2010/11/18 12:38:06 jberndt Exp $"; +static const char *IdSrc = "$Id: FGGroundReactions.cpp,v 1.39 2012/04/01 17:05:51 bcoconni Exp $"; static const char *IdHdr = ID_GROUNDREACTIONS; -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS IMPLEMENTATION for MultiplierIterator (See below for FGGroundReactions) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -MultiplierIterator::MultiplierIterator(FGGroundReactions* GndReactions) -: GroundReactions(GndReactions), - multiplier(NULL), - gearNum(0), - entry(0) -{ - for (int i=0; i < GroundReactions->GetNumGearUnits(); i++) { - FGLGear* gear = GroundReactions->GetGearUnit(i); - - if (!gear->GetWOW()) continue; - - gearNum = i; - multiplier = gear->GetMultiplierEntry(0); - break; - } -} - -MultiplierIterator& MultiplierIterator::operator++() -{ - for (int i=gearNum; i < GroundReactions->GetNumGearUnits(); i++) { - FGLGear* gear = GroundReactions->GetGearUnit(i); - - if (!gear->GetWOW()) continue; - - multiplier = gear->GetMultiplierEntry(++entry); - if (multiplier) { - gearNum = i; - break; - } - else - entry = -1; - } - - return *this; -} - /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ @@ -116,23 +76,23 @@ FGGroundReactions::~FGGroundReactions(void) bool FGGroundReactions::InitModel(void) { - if (!FGModel::InitModel()) return false; - return true; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bool FGGroundReactions::Run(void) +bool FGGroundReactions::Run(bool Holding) { - if (FGModel::Run()) return true; - if (FDMExec->Holding()) return false; + if (FGModel::Run(Holding)) return true; + if (Holding) return false; RunPreFunctions(); vForces.InitMatrix(); vMoments.InitMatrix(); + multipliers.clear(); + // Sum forces and moments for all gear, here. // Some optimizations may be made here - or rather in the gear code itself. // The gear ::Run() method is called several times - once for each gear. @@ -162,20 +122,6 @@ bool FGGroundReactions::GetWOW(void) const return result; } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// This function must be called after friction forces are resolved in order to -// include them in the ground reactions total force and moment. -void FGGroundReactions::UpdateForcesAndMoments(void) -{ - vForces.InitMatrix(); - vMoments.InitMatrix(); - - for (unsigned int i=0; iUpdateForces(); - vMoments += lGear[i]->GetMoments(); - } -} - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bool FGGroundReactions::Load(Element* el) @@ -184,13 +130,14 @@ bool FGGroundReactions::Load(Element* el) Debug(2); + unsigned int numContacts = el->GetNumElements("contact"); + lGear.resize(numContacts); Element* contact_element = el->FindElement("contact"); - while (contact_element) { - lGear.push_back(new FGLGear(contact_element, FDMExec, num++)); - FDMExec->GetFCS()->AddGear(); // make the FCS aware of the landing gear + for (unsigned int idx=0; idxFindNextElement("contact"); } - + FGModel::Load(el); // Perform base class Load for (unsigned int i=0; ibind(); @@ -277,12 +224,6 @@ void FGGroundReactions::bind(void) typedef double (FGGroundReactions::*PMF)(int) const; PropertyManager->Tie("gear/num-units", this, &FGGroundReactions::GetNumGearUnits); PropertyManager->Tie("gear/wow", this, &FGGroundReactions::GetWOW); - PropertyManager->Tie("moments/l-gear-lbsft", this, eL, (PMF)&FGGroundReactions::GetMoments); - PropertyManager->Tie("moments/m-gear-lbsft", this, eM, (PMF)&FGGroundReactions::GetMoments); - PropertyManager->Tie("moments/n-gear-lbsft", this, eN, (PMF)&FGGroundReactions::GetMoments); - PropertyManager->Tie("forces/fbx-gear-lbs", this, eX, (PMF)&FGGroundReactions::GetForces); - PropertyManager->Tie("forces/fby-gear-lbs", this, eY, (PMF)&FGGroundReactions::GetForces); - PropertyManager->Tie("forces/fbz-gear-lbs", this, eZ, (PMF)&FGGroundReactions::GetForces); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%