void FGAtmosphere::Turbulence(void)
{
switch (turbType) {
- case ttBerndt:
+ case ttBerndt: {
vDirectiondAccelDt(eX) = 1 - 2.0*(((double)(rand()))/RAND_MAX);
vDirectiondAccelDt(eY) = 1 - 2.0*(((double)(rand()))/RAND_MAX);
vDirectiondAccelDt(eZ) = 1 - 2.0*(((double)(rand()))/RAND_MAX);
MagnitudedAccelDt = 1 - 2.0*(((double)(rand()))/RAND_MAX) - Magnitude;
MagnitudeAccel += MagnitudedAccelDt*rate*State->Getdt();
Magnitude += MagnitudeAccel*rate*State->Getdt();
+
+ // Fade the magnitude within two wingspans
+ // of the ground (WAG)
+ double AdjustedMagnitude = Magnitude;
+ double AdjustedMagnitudeAccel = MagnitudeAccel;
+ double HOverBMAC = Position->GetHOverBMAC();
+ if (HOverBMAC < 2.0) {
+ AdjustedMagnitude *= (HOverBMAC / 2.0);
+ AdjustedMagnitudeAccel *= (HOverBMAC / 2.0);
+ }
vDirectiondAccelDt.Normalize();
vDirectionAccel += vDirectiondAccelDt*rate*State->Getdt();
vDirection += vDirectionAccel*rate*State->Getdt();
vDirection.Normalize();
- vTurbulence = TurbGain*Magnitude * vDirection;
- vTurbulenceGrad = TurbGain*MagnitudeAccel * vDirection;
+ vTurbulence = TurbGain*AdjustedMagnitude * vDirection;
+ vTurbulenceGrad = TurbGain*AdjustedMagnitudeAccel * vDirection;
vBodyTurbGrad = State->GetTl2b()*vTurbulenceGrad;
vTurbPQR(eP) = vBodyTurbGrad(eY)/Aircraft->GetWingSpan();
vTurbPQR(eR) = vBodyTurbGrad(eX)/10.0;
break;
+ }
default:
break;
}