]> git.mxchange.org Git - flightgear.git/commitdiff
sync again
authorErik Hofman <erik@ehofman.com>
Sat, 14 Aug 2010 12:09:58 +0000 (14:09 +0200)
committerErik Hofman <erik@ehofman.com>
Sat, 14 Aug 2010 12:09:58 +0000 (14:09 +0200)
src/FDM/JSBSim/input_output/FGPropertyManager.cpp
src/FDM/JSBSim/math/FGColumnVector3.cpp
src/FDM/JSBSim/models/FGAtmosphere.cpp
src/FDM/JSBSim/models/FGFCS.cpp
src/FDM/JSBSim/models/FGMassBalance.cpp
src/FDM/JSBSim/models/FGMassBalance.h
src/FDM/JSBSim/models/FGPropagate.cpp

index 6e62fef03104a12ea861c28de617b1c4c5e24bfa..11e566965259e1b58ec854de18892233a718b209 100755 (executable)
@@ -74,7 +74,7 @@ FGPropertyManager::GetNode (const string &path, bool create)
 {
   SGPropertyNode* node=this->getNode(path.c_str(), create);
   if (node == 0 && !suppress_warning) {
-    cout << "FGPropertyManager::GetNode() No node found for " << path << endl;
+    cerr << "FGPropertyManager::GetNode() No node found for " << path << endl;
   }
   return (FGPropertyManager*)node;
 }
@@ -256,8 +256,8 @@ void FGPropertyManager::SetArchivable (const string &name, bool state )
 {
   SGPropertyNode * node = getNode(name.c_str());
   if (node == 0)
-    cout <<
-           "Attempt to set archive flag for non-existant property "
+    cerr <<
+           "Attempt to set archive flag for non-existent property "
            << name << endl;
   else
     node->setAttribute(SGPropertyNode::ARCHIVE, state);
@@ -269,7 +269,7 @@ void FGPropertyManager::SetReadable (const string &name, bool state )
 {
   SGPropertyNode * node = getNode(name.c_str());
   if (node == 0)
-    cout <<
+    cerr <<
            "Attempt to set read flag for non-existant property "
            << name << endl;
   else
@@ -282,7 +282,7 @@ void FGPropertyManager::SetWritable (const string &name, bool state )
 {
   SGPropertyNode * node = getNode(name.c_str());
   if (node == 0)
-    cout <<
+    cerr <<
            "Attempt to set write flag for non-existant property "
            << name << endl;
   else
@@ -294,7 +294,7 @@ void FGPropertyManager::SetWritable (const string &name, bool state )
 void FGPropertyManager::Untie (const string &name)
 {
   if (!untie(name.c_str()))
-    cout << "Failed to untie property " << name << endl;
+    cerr << "Failed to untie property " << name << endl;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -302,7 +302,7 @@ void FGPropertyManager::Untie (const string &name)
 void FGPropertyManager::Tie (const string &name, bool *pointer, bool useDefault)
 {
   if (!tie(name.c_str(), SGRawValuePointer<bool>(pointer), useDefault))
-    cout << "Failed to tie property " << name << " to a pointer" << endl;
+    cerr << "Failed to tie property " << name << " to a pointer" << endl;
   else if (debug_lvl & 0x20)
     cout << name << endl;
 }
@@ -313,7 +313,7 @@ void FGPropertyManager::Tie (const string &name, int *pointer,
                                           bool useDefault )
 {
   if (!tie(name.c_str(), SGRawValuePointer<int>(pointer), useDefault))
-    cout << "Failed to tie property " << name << " to a pointer" << endl;
+    cerr << "Failed to tie property " << name << " to a pointer" << endl;
   else if (debug_lvl & 0x20)
     cout << name << endl;
 }
@@ -324,7 +324,7 @@ void FGPropertyManager::Tie (const string &name, long *pointer,
                                           bool useDefault )
 {
   if (!tie(name.c_str(), SGRawValuePointer<long>(pointer), useDefault))
-    cout << "Failed to tie property " << name << " to a pointer" << endl;
+    cerr << "Failed to tie property " << name << " to a pointer" << endl;
   else if (debug_lvl & 0x20)
     cout << name << endl;
 }
@@ -335,7 +335,7 @@ void FGPropertyManager::Tie (const string &name, float *pointer,
                                           bool useDefault )
 {
   if (!tie(name.c_str(), SGRawValuePointer<float>(pointer), useDefault))
-    cout << "Failed to tie property " << name << " to a pointer" << endl;
+    cerr << "Failed to tie property " << name << " to a pointer" << endl;
   else if (debug_lvl & 0x20)
     cout << name << endl;
 }
@@ -345,7 +345,7 @@ void FGPropertyManager::Tie (const string &name, float *pointer,
 void FGPropertyManager::Tie (const string &name, double *pointer, bool useDefault)
 {
   if (!tie(name.c_str(), SGRawValuePointer<double>(pointer), useDefault))
-    cout << "Failed to tie property " << name << " to a pointer" << endl;
+    cerr << "Failed to tie property " << name << " to a pointer" << endl;
   else if (debug_lvl & 0x20)
     cout << name << endl;
 }
index 1e41cd193a936d5646be60a71e4291d674136e83..5b91dcdb6f7066719a6661f6f1a180713eef9097 100644 (file)
@@ -47,7 +47,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGColumnVector3.cpp,v 1.12 2010/06/30 03:13:40 jberndt Exp $";
+static const char *IdSrc = "$Id: FGColumnVector3.cpp,v 1.13 2010/08/08 00:19:21 jberndt Exp $";
 static const char *IdHdr = ID_COLUMNVECTOR3;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -110,10 +110,7 @@ FGColumnVector3& FGColumnVector3::operator/=(const double scalar)
 
 double FGColumnVector3::Magnitude(void) const
 {
-  if (data[0] == 0.0 && data[1] == 0.0 && data[2] == 0.0)
-    return 0.0;
-  else
-    return sqrt( data[0]*data[0] +  data[1]*data[1] +  data[2]*data[2] );
+  return sqrt( data[0]*data[0] +  data[1]*data[1] +  data[2]*data[2] );
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
index 60165892257ad41e0f4178c89c70501121e218f9..2db1c65d931a312ef3db0bf1891722f11231422f 100644 (file)
@@ -61,7 +61,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGAtmosphere.cpp,v 1.33 2010/02/25 05:21:36 jberndt Exp $";
+static const char *IdSrc = "$Id: FGAtmosphere.cpp,v 1.35 2010/08/11 11:51:33 jberndt Exp $";
 static const char *IdHdr = ID_ATMOSPHERE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -277,7 +277,9 @@ void FGAtmosphere::Calculate(double altitude)
 void FGAtmosphere::CalculateDerived(void)
 {
   T_dev = (*temperature) - GetTemperature(h);
-  density_altitude = h + T_dev * 66.7;
+
+  if (T_dev == 0.0) density_altitude = h;
+  else              density_altitude = 518.4/0.00357 * (1.0 - pow(GetDensityRatio(),0.235));
 
   if (turbType != ttNone) Turbulence();
 
index f5bbba07d885103ff29cb796df7993f3df08bd34..4d71ca97db96efbb82d36d9688d0fa4a6faf79ee 100644 (file)
@@ -63,7 +63,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGFCS.cpp,v 1.68 2010/03/18 13:21:24 jberndt Exp $";
+static const char *IdSrc = "$Id: FGFCS.cpp,v 1.69 2010/08/10 12:39:07 jberndt Exp $";
 static const char *IdHdr = ID_FCS;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -705,18 +705,18 @@ string FGFCS::FindSystemFullPathname(const string& sysfilename)
     system_filename.append(".xml");
   }
 
-  system_file.open(string(fullpath + system_filename).c_str());
+  system_file.open(string(localpath + system_filename).c_str());
   if ( !system_file.is_open()) {
-    system_file.open(string(localpath + system_filename).c_str());
+    system_file.open(string(fullpath + system_filename).c_str());
       if ( !system_file.is_open()) {
         cerr << " Could not open system file: " << system_filename << " in path "
              << fullpath << " or " << localpath << endl;
         return string("");
       } else {
-        return string(localpath + system_filename);
+        return string(fullpath + system_filename);
       }
   }
-  return string(fullpath + system_filename);
+  return string(localpath + system_filename);
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -736,9 +736,9 @@ ifstream* FGFCS::FindSystemFile(const string& sysfilename)
     system_filename.append(".xml");
   }
 
-  system_file->open(string(fullpath + system_filename).c_str());
+  system_file->open(string(localpath + system_filename).c_str());
   if ( !system_file->is_open()) {
-    system_file->open(string(localpath + system_filename).c_str());
+    system_file->open(string(fullpath + system_filename).c_str());
       if ( !system_file->is_open()) {
         cerr << " Could not open system file: " << system_filename << " in path "
              << fullpath << " or " << localpath << endl;
index 24727547c322775d0e2b469e2d0cec7f51ae6761..9e485c1a6a6a9bae82a82aaec92038288413bb3e 100644 (file)
@@ -51,7 +51,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGMassBalance.cpp,v 1.31 2010/02/19 00:30:00 jberndt Exp $";
+static const char *IdSrc = "$Id: FGMassBalance.cpp,v 1.32 2010/08/12 04:07:11 jberndt Exp $";
 static const char *IdHdr = ID_MASSBALANCE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -280,6 +280,10 @@ void FGMassBalance::AddPointMass(Element* el)
       pm->SetPointMassShapeType(PointMass::esSphere);
       pm->SetRadius(radius);
       pm->CalculateShapeInertia();
+    } else if (shape == "ball") {
+      pm->SetPointMassShapeType(PointMass::esBall);
+      pm->SetRadius(radius);
+      pm->CalculateShapeInertia();
     } else {
     }
   }
index c49fe2904ec0e4dfa338aca4e9f20763b98fb99f..be461a1e8204f950418ee91a61fb5ef07bd7471a 100644 (file)
@@ -49,7 +49,7 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_MASSBALANCE "$Id: FGMassBalance.h,v 1.20 2010/02/04 13:09:26 jberndt Exp $"
+#define ID_MASSBALANCE "$Id: FGMassBalance.h,v 1.21 2010/08/12 04:07:11 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONSS
@@ -65,7 +65,11 @@ CLASS DOCUMENTATION
 
 /** Models weight, balance and moment of inertia information.  Maintains a vector
     of point masses. Sums the contribution of all, and provides this to FGPropagate.
-    Loads the \<mass_balance> section of the aircraft configuration file.
+    Loads the \<mass_balance> section of the aircraft configuration file. There
+    can be any number of <pointmasses>. Each can also have a shape which - if
+    present - causes an associated moment of inertia to be calculated based on
+    the shape. Note that a cylinder is solid, a tube is hollow, a ball is solid
+    and a sphere is hollow.
 
     <h3>Configuration File Format:</h3>
 @code
@@ -77,20 +81,24 @@ CLASS DOCUMENTATION
         <ixz unit="{SLUG*FT2 | KG*M2}"> {number} </ixz>
         <iyz unit="{SLUG*FT2 | KG*M2}"> {number} </iyz>
         <emptywt unit="{LBS | KG"> {number} </emptywt>
-        <location name="CG" unit="{IN | M}">
+        <location name="CG" unit="{IN | FT | M}">
             <x> {number} </x>
             <y> {number} </y>
             <z> {number} </z>
         </location>
-        <pointmass name="{string}">
+        [<pointmass name="{string}">
+            <form shape="{tube | cylinder | sphere | ball}">
+               <radius unit="{IN | FT | M}"> {number} </radius>
+               <length unit="{IN | FT | M}"> {number} </length>
+            </form> 
             <weight unit="{LBS | KG}"> {number} </weight>
-            <location name="POINTMASS" unit="{IN | M}">
+            <location name="{string}" unit="{IN | FT | M}">
                 <x> {number} </x>
                 <y> {number} </y>
                 <z> {number} </z>
             </location>
         </pointmass>
-        ... other point masses ...
+        ... other point masses ...]
     </mass_balance>
 @endcode
   */
@@ -197,21 +205,30 @@ private:
     void CalculateShapeInertia(void) {
       switch(eShapeType) {
         case esTube:
-          mPMInertia(1,1) = (Weight/(32.16))*Radius*Radius; // mr^2
-          mPMInertia(2,2) = (Weight/(32.16*12))*(6*Radius*Radius + Length*Length);
+          mPMInertia(1,1) = (Weight/(slugtolb))*Radius*Radius; // mr^2
+          mPMInertia(2,2) = (Weight/(slugtolb*12))*(6*Radius*Radius + Length*Length);
           mPMInertia(3,3) = mPMInertia(2,2);
           break;
         case esCylinder:
-          mPMInertia(1,1) = (Weight/(32.16*2))*Radius*Radius; // 0.5*mr^2
-          mPMInertia(2,2) = (Weight/(32.16*12))*(3*Radius*Radius + Length*Length);
+          mPMInertia(1,1) = (Weight/(slugtolb*2))*Radius*Radius; // 0.5*mr^2
+          mPMInertia(2,2) = (Weight/(slugtolb*12))*(3*Radius*Radius + Length*Length);
           mPMInertia(3,3) = mPMInertia(2,2);
           break;
+        case esSphere:
+          mPMInertia(1,1) = (Weight/(slugtolb*3))*Radius*Radius*2; // (2mr^2)/3
+          mPMInertia(2,2) = mPMInertia(1,1);
+          mPMInertia(3,3) = mPMInertia(1,1);
+        case esBall:
+          mPMInertia(1,1) = (Weight/(slugtolb*5))*Radius*Radius*2; // (2mr^2)/5
+          mPMInertia(2,2) = mPMInertia(1,1);
+          mPMInertia(3,3) = mPMInertia(1,1);
+          break;
         default:
           break;
       }
     }
 
-    enum esShape {esUnspecified, esTube, esCylinder, esSphere} eShapeType;
+    enum esShape {esUnspecified, esTube, esCylinder, esSphere, esBall} eShapeType;
     FGColumnVector3 Location;
     double Weight; /// Weight in pounds.
     double Radius; /// Radius in feet.
index 9c7543c48f7ab45fb4a284ef293426800ab52cae..ebb83211b4d010c48f24aae19e04011525f2e0a1 100644 (file)
@@ -71,7 +71,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.59 2010/07/30 11:50:01 jberndt Exp $";
+static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.60 2010/08/12 19:11:22 andgi Exp $";
 static const char *IdHdr = ID_PROPAGATE;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -259,8 +259,6 @@ Inertial.
 
 bool FGPropagate::Run(void)
 {
-static int ctr;
-
   if (FGModel::Run()) return true;  // Fast return if we have nothing to do ...
   if (FDMExec->Holding()) return false;
 
@@ -498,11 +496,11 @@ void FGPropagate::ResolveFrictionForces(double dt)
   // If no gears are in contact with the ground then return
   if (!n) return;
 
-  double *a = new double[n*n]; // Will contain J*M^-1*J^T
-  double *eta = new double[n];
-  double *lambda = new double[n];
-  double *lambdaMin = new double[n];
-  double *lambdaMax = new double[n];
+  vector<double> a(n*n); // Will contain J*M^-1*J^T
+  vector<double> eta(n);
+  vector<double> lambda(n);
+  vector<double> lambdaMin(n);
+  vector<double> lambdaMax(n);
 
   // Initializes the Lagrange multipliers
   i = 0;
@@ -519,8 +517,6 @@ void FGPropagate::ResolveFrictionForces(double dt)
     // First compute the ground velocity below the aircraft center of gravity
     FGLocation contact;
     FGColumnVector3 normal, cvel;
-    double t = FDMExec->GetSimTime();
-    double height = FDMExec->GetGroundCallback()->GetAGLevel(t, VState.vLocation, contact, normal, cvel);
 
     // Instruct the algorithm to zero out the relative movement between the
     // aircraft and the ground.
@@ -587,8 +583,6 @@ void FGPropagate::ResolveFrictionForces(double dt)
     (*it)->value = lambda[i++];
 
   GroundReactions->UpdateForcesAndMoments();
-
-  delete a, eta, lambda, lambdaMin, lambdaMax;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%