RollingForce = ((1.0 - TirePressureNorm) * 30 + vLocalForce(eZ) * BrakeFCoeff) * sign;
SideForce = vLocalForce(eZ) * FCoeff;
- // Transform these forces back to the local reference frame.
-
- vLocalForce(eX) = RollingForce*CosWheel - SideForce*SinWheel;
- vLocalForce(eY) = SideForce*CosWheel + RollingForce*SinWheel;
-
- // Transform the forces back to the body frame and compute the moment.
-
- vForce = Propagate->GetTl2b() * vLocalForce;
-
// Lag and attenuate the XY-plane forces dependent on velocity. This code
// uses a lag filter, C/(s + C) where "C" is the filter coefficient. When
// "C" is chosen at the frame rate (in Hz), the jittering is significantly
// If a coefficient is set to something equal to or less than zero, the
// filter is bypassed.
- if (LongForceLagFilterCoeff > 0) vForce(eX) = LongForceFilter.execute(vForce(eX));
- if (LatForceLagFilterCoeff > 0) vForce(eY) = LatForceFilter.execute(vForce(eY));
+ if (LongForceLagFilterCoeff > 0) RollingForce = LongForceFilter.execute(RollingForce);
+ if (LatForceLagFilterCoeff > 0) SideForce = LatForceFilter.execute(SideForce);
- if ((fabs(RollingWhlVel) <= RFRV) && RFRV > 0) vForce(eX) *= fabs(RollingWhlVel)/RFRV;
- if ((fabs(SideWhlVel) <= SFRV) && SFRV > 0) vForce(eY) *= fabs(SideWhlVel)/SFRV;
+ if ((fabs(RollingWhlVel) <= RFRV) && RFRV > 0) RollingForce *= fabs(RollingWhlVel)/RFRV;
+ if ((fabs(SideWhlVel) <= SFRV) && SFRV > 0) SideForce *= fabs(SideWhlVel)/SFRV;
+
+ // Transform these forces back to the local reference frame.
+
+ vLocalForce(eX) = RollingForce*CosWheel - SideForce*SinWheel;
+ vLocalForce(eY) = SideForce*CosWheel + RollingForce*SinWheel;
+
+ // Transform the forces back to the body frame and compute the moment.
+
+ vForce = Propagate->GetTl2b() * vLocalForce;
// End section for attentuating gear jitter
WOW = false;
compressLength = 0.0;
+ compressSpeed = 0.0;
+
+ // No wheel conditions
+ SideWhlVel = WheelSlip = 0.0;
- // No wheel conditons
- RollingWhlVel = SideWhlVel = WheelSlip = 0.0;
+ // Let wheel spin down slowly
+ RollingWhlVel -= 13.0*dT;
+ if (RollingWhlVel < 0.0) RollingWhlVel = 0.0;
// Return to neutral position between 1.0 and 0.8 gear pos.
SteerAngle *= max(GetGearUnitPos()-0.8, 0.0)/0.2;
GearUp = true;
WOW = false;
GearDown = false;
+ RollingWhlVel = 0.0;
} else if (gearPos > 0.99) {
GearDown = true;
GearUp = false;
string FGElectric::GetEngineLabels(string delimeter)
{
- return ""; // currently no labels are returned for this engine
+ std::ostringstream buf;
+
+ buf << Name << " HP (engine " << EngineNumber << ")" << delimeter
+ << Thruster->GetThrusterLabels(EngineNumber, delimeter);
+
+ return buf.str();
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
string FGElectric::GetEngineValues(string delimeter)
{
- return ""; // currently no values are returned for this engine
+ std::ostringstream buf;
+
+ buf << HP << delimeter
+ << Thruster->GetThrusterValues(EngineNumber, delimeter);
+
+ return buf.str();
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
vH(eY) = 0.0;
vH(eZ) = 0.0;
+ vH = Transform()*vH; // Transform rotational momentum to rotated frame (if any)
+
if (omega > 0.0) ExcessTorque = GearRatio * PowerAvailable / omega;
else ExcessTorque = GearRatio * PowerAvailable / 1.0;
if (RPM < 1.0) RPM = 0; // Engine friction stops rotation arbitrarily at 1 RPM.
- vMn = fdmex->GetPropagate()->GetPQR()*vH + vTorque;
+ // Transform Torque and momentum prior to this equation, as PQR is used in this
+ // equation and cannot be transformed itself.
+ vMn = fdmex->GetPropagate()->GetPQR()*vH + Transform()*vTorque;
return Thrust; // return thrust in pounds
}
if (el->FindElement("idlen1"))
IdleN1 = el->FindElementValueAsNumber("idlen1");
if (el->FindElement("idlen2"))
- IdleN2 = el->FindElementValueAsNumber("idlen1");
+ IdleN2 = el->FindElementValueAsNumber("idlen2");
if (el->FindElement("maxn1"))
MaxN1 = el->FindElementValueAsNumber("maxn1");
if (el->FindElement("maxn2"))