Sync. with JSBSim CVS
This commit is contained in:
parent
836aabae69
commit
7283e506b2
6 changed files with 66 additions and 34 deletions
|
@ -138,6 +138,9 @@ Element::Element(string nm)
|
||||||
// Fuel Consumption
|
// Fuel Consumption
|
||||||
convert["LBS/HP*HR"]["KG/KW*HR"] = 0.6083;
|
convert["LBS/HP*HR"]["KG/KW*HR"] = 0.6083;
|
||||||
convert["KG/KW*HR"]["LBS/HP*HR"] = 1.0/convert["LBS/HP*HR"]["KG/KW*HR"];
|
convert["KG/KW*HR"]["LBS/HP*HR"] = 1.0/convert["LBS/HP*HR"]["KG/KW*HR"];
|
||||||
|
// Density
|
||||||
|
convert["KG/L"]["LBS/GAL"] = 8.3454045;
|
||||||
|
convert["LBS/GAL"]["KG/L"] = 1.0/convert["KG/L"]["LBS/GAL"];
|
||||||
|
|
||||||
// Length
|
// Length
|
||||||
convert["M"]["M"] = 1.00;
|
convert["M"]["M"] = 1.00;
|
||||||
|
@ -200,6 +203,9 @@ Element::Element(string nm)
|
||||||
// Fuel Consumption
|
// Fuel Consumption
|
||||||
convert["LBS/HP*HR"]["LBS/HP*HR"] = 1.0;
|
convert["LBS/HP*HR"]["LBS/HP*HR"] = 1.0;
|
||||||
convert["KG/KW*HR"]["KG/KW*HR"] = 1.0;
|
convert["KG/KW*HR"]["KG/KW*HR"] = 1.0;
|
||||||
|
// Density
|
||||||
|
convert["KG/L"]["KG/L"] = 1.0;
|
||||||
|
convert["LBS/GAL"]["LBS/GAL"] = 1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,7 @@ CLASS DOCUMENTATION
|
||||||
- convert["KG/MIN"]["LBS/MIN"] = convert["KG"]["LBS"];
|
- convert["KG/MIN"]["LBS/MIN"] = convert["KG"]["LBS"];
|
||||||
- convert["LBS/HP*HR"]["KG/KW*HR"] = 0.6083;
|
- convert["LBS/HP*HR"]["KG/KW*HR"] = 0.6083;
|
||||||
- convert["KG/KW*HR"]["LBS/HP*HR"] = 1/convert["LBS/HP*HR"]["KG/KW*HR"];
|
- convert["KG/KW*HR"]["LBS/HP*HR"] = 1/convert["LBS/HP*HR"]["KG/KW*HR"];
|
||||||
|
- convert["KG/L"]["LBS/GAL"] = 8.3454045;
|
||||||
|
|
||||||
- convert["M"]["M"] = 1.00;
|
- convert["M"]["M"] = 1.00;
|
||||||
- convert["FT"]["FT"] = 1.00;
|
- convert["FT"]["FT"] = 1.00;
|
||||||
|
@ -119,6 +120,8 @@ CLASS DOCUMENTATION
|
||||||
- convert["LBS/MIN"]["LBS/MIN"] = 1.0;
|
- convert["LBS/MIN"]["LBS/MIN"] = 1.0;
|
||||||
- convert["LBS/HP*HR"]["LBS/HP*HR"] = 1.0;
|
- convert["LBS/HP*HR"]["LBS/HP*HR"] = 1.0;
|
||||||
- convert["KG/KW*HR"]["KG/KW*HR"] = 1.0;
|
- convert["KG/KW*HR"]["KG/KW*HR"] = 1.0;
|
||||||
|
- convert["KG/L"]["KG/L"] = 1.0;
|
||||||
|
- convert["LBS/GAL"]["LBS/GAL"] = 1.0;
|
||||||
|
|
||||||
Where:
|
Where:
|
||||||
- N = newtons
|
- N = newtons
|
||||||
|
@ -136,6 +139,8 @@ CLASS DOCUMENTATION
|
||||||
- WATTS = watts
|
- WATTS = watts
|
||||||
- HP = horsepower
|
- HP = horsepower
|
||||||
- HR = hour
|
- HR = hour
|
||||||
|
- L = liter
|
||||||
|
- GAL = gallon (U.S. liquid)
|
||||||
|
|
||||||
@author Jon S. Berndt
|
@author Jon S. Berndt
|
||||||
@version $Id$
|
@version $Id$
|
||||||
|
|
|
@ -65,7 +65,8 @@ CLASS IMPLEMENTATION
|
||||||
|
|
||||||
FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) :
|
FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) :
|
||||||
FGForce(fdmex),
|
FGForce(fdmex),
|
||||||
GearNumber(number)
|
GearNumber(number),
|
||||||
|
SteerAngle(0.0)
|
||||||
{
|
{
|
||||||
Element *force_table=0;
|
Element *force_table=0;
|
||||||
Element *dampCoeff=0;
|
Element *dampCoeff=0;
|
||||||
|
@ -397,6 +398,8 @@ FGColumnVector3& FGLGear::GetBodyForces(void)
|
||||||
WOW = false;
|
WOW = false;
|
||||||
compressLength = 0.0;
|
compressLength = 0.0;
|
||||||
compressSpeed = 0.0;
|
compressSpeed = 0.0;
|
||||||
|
WheelSlip = 0.0;
|
||||||
|
StrutForce = 0.0;
|
||||||
|
|
||||||
// Let wheel spin down slowly
|
// Let wheel spin down slowly
|
||||||
vWhlVelVec(eX) -= 13.0*dT;
|
vWhlVelVec(eX) -= 13.0*dT;
|
||||||
|
|
|
@ -184,42 +184,38 @@ void FGEngine::ConsumeFuel(void)
|
||||||
FuelToBurn = CalcFuelNeed();
|
FuelToBurn = CalcFuelNeed();
|
||||||
if (FuelToBurn == 0.0) return;
|
if (FuelToBurn == 0.0) return;
|
||||||
|
|
||||||
while (FuelToBurn > 0.0) {
|
// Count how many fuel tanks with the current priority level have fuel.
|
||||||
|
// If none, then try next lower priority. Build the feed list.
|
||||||
// Count how many fuel tanks with the current priority level have fuel.
|
while ((TanksWithFuel == 0) && (CurrentPriority <= Propulsion->GetNumTanks())) {
|
||||||
// If none, then try next lower priority. Build the feed list.
|
for (i=0; i<Propulsion->GetNumTanks(); i++) {
|
||||||
while ((TanksWithFuel == 0) && (CurrentPriority <= Propulsion->GetNumTanks())) {
|
if (SourceTanks[i] != 0) {
|
||||||
for (i=0; i<Propulsion->GetNumTanks(); i++) {
|
Tank = Propulsion->GetTank(i);
|
||||||
if (SourceTanks[i] != 0) {
|
if (Tank->GetType() == FGTank::ttFUEL) {
|
||||||
Tank = Propulsion->GetTank(i);
|
if ((Tank->GetContents() > 0.0) && ((unsigned int)Tank->GetPriority() == CurrentPriority)) {
|
||||||
if (Tank->GetType() == FGTank::ttFUEL) {
|
++TanksWithFuel;
|
||||||
if ((Tank->GetContents() > 0.0) && ((unsigned int)Tank->GetPriority() == CurrentPriority)) {
|
FeedList.push_back(i);
|
||||||
++TanksWithFuel;
|
}
|
||||||
FeedList.push_back(i);
|
} else {
|
||||||
}
|
cerr << "No oxidizer tanks should be used for this engine type." << endl;
|
||||||
} else {
|
|
||||||
cerr << "No oxidizer tanks should be used for this engine type." << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (TanksWithFuel == 0) CurrentPriority++;
|
|
||||||
}
|
}
|
||||||
|
if (TanksWithFuel == 0) CurrentPriority++;
|
||||||
|
}
|
||||||
|
|
||||||
// No fuel found at any priority!
|
// No fuel found at any priority!
|
||||||
if (TanksWithFuel == 0) {
|
if (TanksWithFuel == 0) {
|
||||||
Starved = true;
|
Starved = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove equal amount of fuel from each feed tank.
|
||||||
|
FuelNeeded = FuelToBurn/TanksWithFuel;
|
||||||
|
for (i=0; i<FeedList.size(); i++) {
|
||||||
|
Tank = Propulsion->GetTank(FeedList[i]);
|
||||||
|
Tank->Drain(FuelNeeded);
|
||||||
|
}
|
||||||
|
|
||||||
// Remove equal amount of fuel from each feed tank.
|
|
||||||
FuelNeeded = FuelToBurn/TanksWithFuel;
|
|
||||||
for (i=0; i<FeedList.size(); i++) {
|
|
||||||
Tank = Propulsion->GetTank(FeedList[i]);
|
|
||||||
Tank->Drain(FuelNeeded);
|
|
||||||
FuelToBurn -= FuelNeeded;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // while
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
|
@ -59,7 +59,8 @@ FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
|
||||||
Element* element;
|
Element* element;
|
||||||
Element* element_Grain;
|
Element* element_Grain;
|
||||||
Area = 1.0;
|
Area = 1.0;
|
||||||
Temperature = -9999.0;
|
Density = 6.6;
|
||||||
|
InitialTemperature = Temperature = -9999.0;
|
||||||
Ixx = Iyy = Izz = 0.0;
|
Ixx = Iyy = Izz = 0.0;
|
||||||
Radius = Contents = Standpipe = Length = InnerRadius = 0.0;
|
Radius = Contents = Standpipe = Length = InnerRadius = 0.0;
|
||||||
Capacity = 0.00001;
|
Capacity = 0.00001;
|
||||||
|
@ -96,6 +97,8 @@ FGTank::FGTank(FGFDMExec* exec, Element* el, int tank_number)
|
||||||
InitialStandpipe = Standpipe = el->FindElementValueAsNumberConvertTo("standpipe", "LBS");
|
InitialStandpipe = Standpipe = el->FindElementValueAsNumberConvertTo("standpipe", "LBS");
|
||||||
if (el->FindElement("priority"))
|
if (el->FindElement("priority"))
|
||||||
InitialPriority = Priority = el->FindElementValueAsNumber("priority");
|
InitialPriority = Priority = el->FindElementValueAsNumber("priority");
|
||||||
|
if (el->FindElement("density"))
|
||||||
|
Density = el->FindElementValueAsNumberConvertTo("density", "LBS/GAL");
|
||||||
|
|
||||||
SetPriority( InitialPriority ); // this will also set the Selected flag
|
SetPriority( InitialPriority ); // this will also set the Selected flag
|
||||||
|
|
||||||
|
@ -206,7 +209,6 @@ double FGTank::Drain(double used)
|
||||||
|
|
||||||
Contents = 0.0;
|
Contents = 0.0;
|
||||||
PctFull = 0.0;
|
PctFull = 0.0;
|
||||||
SetPriority(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grainType != gtUNKNOWN) CalculateInertias();
|
if (grainType != gtUNKNOWN) CalculateInertias();
|
||||||
|
@ -245,6 +247,14 @@ void FGTank::SetContents(double amount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
void FGTank::SetContentsGallons(double gallons)
|
||||||
|
{
|
||||||
|
SetContents(gallons * Density);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
double FGTank::Calculate(double dt)
|
double FGTank::Calculate(double dt)
|
||||||
|
|
|
@ -128,6 +128,7 @@ CLASS DOCUMENTATION
|
||||||
<temperature> {number} </temperature> <!-- must be degrees fahrenheit -->
|
<temperature> {number} </temperature> <!-- must be degrees fahrenheit -->
|
||||||
<standpipe unit="{LBS | KG"}> {number} </standpipe>
|
<standpipe unit="{LBS | KG"}> {number} </standpipe>
|
||||||
<priority> {integer} </priority>
|
<priority> {integer} </priority>
|
||||||
|
<density unit="{KG/L | LBS/GAL}"> {number} </density>
|
||||||
</tank>
|
</tank>
|
||||||
@endcode
|
@endcode
|
||||||
|
|
||||||
|
@ -142,6 +143,7 @@ CLASS DOCUMENTATION
|
||||||
- \b temperature - Initial temperature, defaults to degrees Fahrenheit.
|
- \b temperature - Initial temperature, defaults to degrees Fahrenheit.
|
||||||
- \b standpipe - Minimum contents to which tank can dump, defaults to pounds.
|
- \b standpipe - Minimum contents to which tank can dump, defaults to pounds.
|
||||||
- \b priority - Establishes feed sequence of tank. "1" is the highest priority.
|
- \b priority - Establishes feed sequence of tank. "1" is the highest priority.
|
||||||
|
- \b density - Density of liquid tank contents.
|
||||||
|
|
||||||
location:
|
location:
|
||||||
- \b x - Location of tank on aircraft's x-axis, defaults to inches.
|
- \b x - Location of tank on aircraft's x-axis, defaults to inches.
|
||||||
|
@ -167,6 +169,7 @@ be printed to the console if the location is not given
|
||||||
- \b temperature - -9999.0 (flag which indicates no temperature is set)
|
- \b temperature - -9999.0 (flag which indicates no temperature is set)
|
||||||
- \b standpipe - 0.0 (all contents may be dumped)
|
- \b standpipe - 0.0 (all contents may be dumped)
|
||||||
- \b priority - 1 (highest feed sequence priority)
|
- \b priority - 1 (highest feed sequence priority)
|
||||||
|
- \b density - 6.6
|
||||||
|
|
||||||
@author Jon Berndt, Dave Culp
|
@author Jon Berndt, Dave Culp
|
||||||
@see Akbar, Raza et al. "A Simple Analysis of Fuel Addition to the CWT of
|
@see Akbar, Raza et al. "A Simple Analysis of Fuel Addition to the CWT of
|
||||||
|
@ -226,10 +229,18 @@ public:
|
||||||
@return the capacity of the tank in pounds. */
|
@return the capacity of the tank in pounds. */
|
||||||
double GetCapacity(void) {return Capacity;}
|
double GetCapacity(void) {return Capacity;}
|
||||||
|
|
||||||
|
/** Gets the capacity of the tank.
|
||||||
|
@return the capacity of the tank in gallons. */
|
||||||
|
double GetCapacityGallons(void) {return Capacity/Density;}
|
||||||
|
|
||||||
/** Gets the contents of the tank.
|
/** Gets the contents of the tank.
|
||||||
@return the contents of the tank in pounds. */
|
@return the contents of the tank in pounds. */
|
||||||
double GetContents(void) const {return Contents;}
|
double GetContents(void) const {return Contents;}
|
||||||
|
|
||||||
|
/** Gets the contents of the tank.
|
||||||
|
@return the contents of the tank in gallons. */
|
||||||
|
double GetContentsGallons(void) const {return Contents/Density;}
|
||||||
|
|
||||||
/** Gets the temperature of the fuel.
|
/** Gets the temperature of the fuel.
|
||||||
The temperature of the fuel is calculated if an initial tempearture is
|
The temperature of the fuel is calculated if an initial tempearture is
|
||||||
given in the configuration file.
|
given in the configuration file.
|
||||||
|
@ -258,6 +269,7 @@ public:
|
||||||
|
|
||||||
double Fill(double amount);
|
double Fill(double amount);
|
||||||
void SetContents(double amount);
|
void SetContents(double amount);
|
||||||
|
void SetContentsGallons(double gallons);
|
||||||
void SetTemperature(double temp) { Temperature = temp; }
|
void SetTemperature(double temp) { Temperature = temp; }
|
||||||
void SetStandpipe(double amount) { Standpipe = amount; }
|
void SetStandpipe(double amount) { Standpipe = amount; }
|
||||||
void SetSelected(bool sel) { sel==true ? SetPriority(1):SetPriority(0); }
|
void SetSelected(bool sel) { sel==true ? SetPriority(1):SetPriority(0); }
|
||||||
|
|
Loading…
Add table
Reference in a new issue