]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/FGAircraft.cpp
Merge branch 'next' into durk-atc
[flightgear.git] / src / FDM / JSBSim / models / FGAircraft.cpp
index 9c6ffef856ac47a6585fcaa43f476fe5cfb80bf3..e2adbe44cd2f83cba7493f22292211a9cb335a2a 100644 (file)
@@ -40,7 +40,7 @@ INCLUDES
 
 #include <sys/stat.h>
 #include <sys/types.h>
-
+#include <iostream>
 #include <cmath>
 
 #include "FGAircraft.h"
@@ -50,9 +50,12 @@ INCLUDES
 #include "FGExternalReactions.h"
 #include "FGBuoyantForces.h"
 #include "FGAerodynamics.h"
-#include <FGFDMExec.h>
+#include "FGFDMExec.h"
 #include "FGPropagate.h"
-#include <input_output/FGPropertyManager.h>
+#include "FGPropulsion.h"
+#include "input_output/FGPropertyManager.h"
+
+using namespace std;
 
 namespace JSBSim {
 
@@ -64,7 +67,7 @@ DEFINITIONS
 GLOBAL DATA
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-static const char *IdSrc = "$Id$";
+static const char *IdSrc = "$Id: FGAircraft.cpp,v 1.30 2010/11/29 12:33:57 jberndt Exp $";
 static const char *IdHdr = ID_AIRCRAFT;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -110,30 +113,37 @@ bool FGAircraft::Run(void)
   if (FGModel::Run()) return true;
   if (FDMExec->Holding()) return false;
 
+  RunPreFunctions();
+
   vForces.InitMatrix();
   if (!HoldDown) {
-    vForces += Aerodynamics->GetForces();
-    vForces += Propulsion->GetForces();
-    vForces += GroundReactions->GetForces();
-    vForces += ExternalReactions->GetForces();
-    vForces += BuoyantForces->GetForces();
+    vForces += FDMExec->GetAerodynamics()->GetForces();
+    vForces += FDMExec->GetPropulsion()->GetForces();
+    vForces += FDMExec->GetGroundReactions()->GetForces();
+    vForces += FDMExec->GetExternalReactions()->GetForces();
+    vForces += FDMExec->GetBuoyantForces()->GetForces();
+  } else {
+    const FGMatrix33& mTl2b = FDMExec->GetPropagate()->GetTl2b();
+    vForces = mTl2b * FGColumnVector3(0,0,-FDMExec->GetMassBalance()->GetWeight());
   }
 
   vMoments.InitMatrix();
   if (!HoldDown) {
-    vMoments += Aerodynamics->GetMoments();
-    vMoments += Propulsion->GetMoments();
-    vMoments += GroundReactions->GetMoments();
-    vMoments += ExternalReactions->GetMoments();
-    vMoments += BuoyantForces->GetMoments();
+    vMoments += FDMExec->GetAerodynamics()->GetMoments();
+    vMoments += FDMExec->GetPropulsion()->GetMoments();
+    vMoments += FDMExec->GetGroundReactions()->GetMoments();
+    vMoments += FDMExec->GetExternalReactions()->GetMoments();
+    vMoments += FDMExec->GetBuoyantForces()->GetMoments();
   }
 
-  vBodyAccel = vForces/MassBalance->GetMass();
+  vBodyAccel = vForces/FDMExec->GetMassBalance()->GetMass();
 
-  vNcg = vBodyAccel/Inertial->gravity();
+  vNcg = vBodyAccel/FDMExec->GetInertial()->SLgravity();
 
-  vNwcg = Aerodynamics->GetTb2w() * vNcg;
-  vNwcg(3) = -1*vNwcg(3) + 1;
+  vNwcg = FDMExec->GetAerodynamics()->GetTb2w() * vNcg;
+  vNwcg(3) = 1.0 - vNwcg(3);
+
+  RunPostFunctions();
 
   return false;
 }
@@ -142,7 +152,10 @@ bool FGAircraft::Run(void)
 
 double FGAircraft::GetNlf(void) const
 {
-  return -1*Aerodynamics->GetvFw(3)/MassBalance->GetWeight();
+  if (FDMExec->GetMassBalance()->GetWeight() != 0)
+    return (-FDMExec->GetAerodynamics()->GetvFw(3))/FDMExec->GetMassBalance()->GetWeight();
+  else
+    return 0.;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -195,6 +208,8 @@ bool FGAircraft::Load(Element* el)
     }
   }
 
+  PostLoad(el, PropertyManager);
+
   Debug(2);
 
   return true;