From 90f498be4de88cd334440e2a7760589a1a293386 Mon Sep 17 00:00:00 2001 From: ehofman <ehofman> Date: Thu, 14 Aug 2008 14:16:50 +0000 Subject: [PATCH] Sync. with JSBSim CVS --- src/FDM/JSBSim/input_output/FGXMLElement.cpp | 8 +++--- src/FDM/JSBSim/models/FGLGear.cpp | 8 +++--- src/FDM/JSBSim/models/propulsion/FGPiston.cpp | 27 ++++++++++--------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/FDM/JSBSim/input_output/FGXMLElement.cpp b/src/FDM/JSBSim/input_output/FGXMLElement.cpp index fdb98d8e0..697577f5b 100755 --- a/src/FDM/JSBSim/input_output/FGXMLElement.cpp +++ b/src/FDM/JSBSim/input_output/FGXMLElement.cpp @@ -92,8 +92,8 @@ Element::Element(string nm) convert["LBS/FT/SEC"]["N/M/SEC"] = 14.5939; convert["N/M/SEC"]["LBS/FT/SEC"] = 1.0/convert["LBS/FT/SEC"]["N/M/SEC"]; // Damping force (Square Law) - convert["LBS/FT/SEC2"]["N/M/SEC2"] = 14.5939; - convert["N/M/SEC2"]["LBS/FT/SEC2"] = 1.0/convert["LBS/FT/SEC2"]["N/M/SEC2"]; + convert["LBS/FT2/SEC2"]["N/M2/SEC2"] = 47.880259; + convert["N/M2/SEC2"]["LBS/FT2/SEC2"] = 1.0/convert["LBS/FT2/SEC2"]["N/M2/SEC2"]; // Power convert["WATTS"]["HP"] = 0.001341022; convert["HP"]["WATTS"] = 1.0/convert["WATTS"]["HP"]; @@ -158,8 +158,8 @@ Element::Element(string nm) convert["LBS/FT/SEC"]["LBS/FT/SEC"] = 1.00; convert["N/M/SEC"]["N/M/SEC"] = 1.00; // Damping force (Square law) - convert["LBS/FT/SEC2"]["LBS/FT/SEC2"] = 1.00; - convert["N/M/SEC2"]["N/M/SEC2"] = 1.00; + convert["LBS/FT2/SEC2"]["LBS/FT2/SEC2"] = 1.00; + convert["N/M2/SEC2"]["N/M2/SEC2"] = 1.00; // Power convert["HP"]["HP"] = 1.00; convert["WATTS"]["WATTS"] = 1.00; diff --git a/src/FDM/JSBSim/models/FGLGear.cpp b/src/FDM/JSBSim/models/FGLGear.cpp index dc4bcc6cb..c1110dca6 100644 --- a/src/FDM/JSBSim/models/FGLGear.cpp +++ b/src/FDM/JSBSim/models/FGLGear.cpp @@ -86,8 +86,8 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : Exec(fdmex), if (el->FindElement("damping_coeff")) { dampCoeff = el->FindElement("damping_coeff"); if (dampCoeff->GetAttributeValue("type") == "SQUARE") { - eDampType = dtSquare; // default is dtLinear - bDamp = el->FindElementValueAsNumberConvertTo("damping_coeff", "LBS/FT/SEC2"); + eDampType = dtSquare; + bDamp = el->FindElementValueAsNumberConvertTo("damping_coeff", "LBS/FT2/SEC2"); } else { bDamp = el->FindElementValueAsNumberConvertTo("damping_coeff", "LBS/FT/SEC"); } @@ -96,8 +96,8 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : Exec(fdmex), if (el->FindElement("damping_coeff_rebound")) { dampCoeffRebound = el->FindElement("damping_coeff_rebound"); if (dampCoeffRebound->GetAttributeValue("type") == "SQUARE") { - eDampTypeRebound = dtSquare; // default is dtLinear - bDampRebound = el->FindElementValueAsNumberConvertTo("damping_coeff_rebound", "LBS/FT/SEC2"); + eDampTypeRebound = dtSquare; + bDampRebound = el->FindElementValueAsNumberConvertTo("damping_coeff_rebound", "LBS/FT2/SEC2"); } else { bDampRebound = el->FindElementValueAsNumberConvertTo("damping_coeff_rebound", "LBS/FT/SEC"); } diff --git a/src/FDM/JSBSim/models/propulsion/FGPiston.cpp b/src/FDM/JSBSim/models/propulsion/FGPiston.cpp index 2297ebaef..a68f0a9b0 100644 --- a/src/FDM/JSBSim/models/propulsion/FGPiston.cpp +++ b/src/FDM/JSBSim/models/propulsion/FGPiston.cpp @@ -235,9 +235,9 @@ Manifold_Pressure_Lookup = new RatedAltitude[2] = el->FindElementValueAsNumberConvertTo("ratedaltitude3", "FT"); } char property_name[80]; - snprintf(property_name, 80, "/engines/engine[%d]/power_hp", engine_number); + snprintf(property_name, 80, "propulsion/engine[%d]/power_hp", EngineNumber); PropertyManager->Tie(property_name, &HP); - snprintf(property_name, 80, "/engines/engine[%d]/bsfc", engine_number); + snprintf(property_name, 80, "propulsion/engine[%d]/bsfc", EngineNumber); PropertyManager->Tie(property_name, &BSFC); minMAP = MinManifoldPressure_inHg * inhgtopa; // inHg to Pa @@ -299,10 +299,6 @@ Manifold_Pressure_Lookup = new FGPiston::~FGPiston() { char property_name[80]; - snprintf(property_name, 80, "/engines/engine[%d]/power_hp", EngineNumber); - PropertyManager->Untie(property_name); - snprintf(property_name, 80, "/engines/engine[%d]/bsfc", EngineNumber); - PropertyManager->Untie(property_name); delete Lookup_Combustion_Efficiency; delete Power_Mixture_Correlation; @@ -513,7 +509,8 @@ void FGPiston::doBoostControl(void) void FGPiston::doMAP(void) { - suction_loss = pow( ThrottlePos*0.98, RPM/MaxRPM ); + suction_loss = RPM > 0.0 ? ThrottlePos * MaxRPM / RPM : 1.0; + if (suction_loss > 1.0) suction_loss = 1.0; MAP = p_amb * suction_loss; if(Boosted) { @@ -540,7 +537,7 @@ void FGPiston::doMAP(void) } } // Boost the manifold pressure. - MAP += MAP * BoostMul[BoostSpeed] * RPM/MaxRPM; + MAP += MAP * BoostMul[BoostSpeed] * suction_loss * RPM/RatedRPM[BoostSpeed]; // Now clip the manifold pressure to BCV or Wastegate setting. if(bTakeoffPos) { if(MAP > TakeoffMAP[BoostSpeed]) { @@ -577,7 +574,7 @@ void FGPiston::doAirFlow(void) rho_air = p_amb / (R_air * T_amb); double displacement_SI = Displacement * in3tom3; double swept_volume = (displacement_SI * (RPM/60)) / 2; - double v_dot_air = swept_volume * volumetric_efficiency; + double v_dot_air = swept_volume * volumetric_efficiency * suction_loss; double rho_air_manifold = MAP / (R_air * T_amb); m_dot_air = v_dot_air * rho_air_manifold; @@ -627,14 +624,18 @@ void FGPiston::doEnginePower(void) double T_amb_sea_lev_degF = KelvinToFahrenheit(288); // FIXME: this needs to be generalized - double ME, Adjusted_BSFC; // Convienience term for use in the calculations + double ME, friction, percent_RPM; // Convienience term for use in the calculations ME = Mixture_Efficiency_Correlation->GetValue(m_dot_fuel/m_dot_air); - Adjusted_BSFC = (1/ThrottlePos) * BSFC; - Percentage_Power = 1.000; + + percent_RPM = RPM/MaxRPM; + friction = 1 - (percent_RPM * percent_RPM * percent_RPM * percent_RPM/10); + if (friction < 0 ) friction = 0; + Percentage_Power = friction; if ( Magnetos != 3 ) Percentage_Power *= SparkFailDrop; - HP = (FuelFlow_gph * 6.0 / Adjusted_BSFC )* ME * suction_loss * Percentage_Power; + + HP = (FuelFlow_gph * 6.0 / BSFC )* ME * suction_loss * Percentage_Power; } else {