]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/propulsion/FGTank.cpp
Merge branch 'next' into durk-atc
[flightgear.git] / src / FDM / JSBSim / models / propulsion / FGTank.cpp
index dced188c54a9d5fe6a0108cd8c92d7bfad1305e4..c9d38dab871b08c8396143f284d4a122098df3dd 100644 (file)
@@ -48,7 +48,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id$";
+static const char *IdSrc = "$Id: FGTank.cpp,v 1.28 2010/01/24 19:26:04 jberndt Exp $";
 static const char *IdHdr = ID_TANK;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -58,7 +58,7 @@ CLASS IMPLEMENTATION
 FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
                   : TankNumber(tank_number), Exec(exec)
 {
-  string token;
+  string token, strFuelName;
   Element* element;
   Element* element_Grain;
   Area = 1.0;
@@ -66,6 +66,7 @@ FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
   InitialTemperature = Temperature = -9999.0;
   Ixx = Iyy = Izz = 0.0;
   Radius = Contents = Standpipe = Length = InnerRadius = 0.0;
+  InitialStandpipe = 0.0;
   Capacity = 0.00001;
   Priority = InitialPriority = 1;
   PropertyManager = Exec->GetPropertyManager();
@@ -102,6 +103,9 @@ FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
     InitialPriority = Priority = el->FindElementValueAsNumber("priority");
   if (el->FindElement("density"))
     Density = el->FindElementValueAsNumberConvertTo("density", "LBS/GAL");
+  if (el->FindElement("type"))
+    strFuelName = el->FindElementValue("type");
+
 
   SetPriority( InitialPriority );     // this will also set the Selected flag
 
@@ -162,6 +166,9 @@ FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
   if (Temperature != -9999.0)  InitialTemperature = Temperature = FahrenheitToCelsius(Temperature);
   Area = 40.0 * pow(Capacity/1975, 0.666666667);
 
+  // A named fuel type will override a previous density value
+  if (!strFuelName.empty()) Density = ProcessFuelName(strFuelName); 
+
   Debug(0);
 }
 
@@ -313,6 +320,43 @@ void FGTank::CalculateInertias(void)
 
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGTank::ProcessFuelName(std::string const& name)
+{
+   if      (name == "AVGAS")    return 6.02; 
+   else if (name == "JET-A")    return 6.74;
+   else if (name == "JET-A1")   return 6.74;
+   else if (name == "JET-B")    return 6.48;
+   else if (name == "JP-1")     return 6.76;
+   else if (name == "JP-2")     return 6.38;
+   else if (name == "JP-3")     return 6.34;
+   else if (name == "JP-4")     return 6.48;
+   else if (name == "JP-5")     return 6.81;
+   else if (name == "JP-6")     return 6.55;
+   else if (name == "JP-7")     return 6.61;
+   else if (name == "JP-8")     return 6.66;
+   else if (name == "JP-8+100") return 6.66;
+ //else if (name == "JP-9")     return 6.74;
+ //else if (name == "JPTS")     return 6.74;
+   else if (name == "RP-1")     return 6.73;
+   else if (name == "T-1")      return 6.88;
+   else if (name == "ETHANOL")  return 6.58;
+   else if (name == "HYDRAZINE")return 8.61;
+   else if (name == "F-34")     return 6.66;
+   else if (name == "F-35")     return 6.74;
+   else if (name == "F-40")     return 6.48;
+   else if (name == "F-44")     return 6.81;
+   else if (name == "AVTAG")    return 6.48;
+   else if (name == "AVCAT")    return 6.81;
+   else {
+     cerr << "Unknown fuel type specified: "<< name << endl;
+   } 
+
+   return 6.6;
+}
+
+
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 //    The bitmasked value choices are as follows:
 //    unset: In this case (the default) JSBSim would only print