PropEngine* thruster = new PropEngine(prop, eng, moment);
_airplane.addThruster(thruster, mass, cg);
+ // Set the stops (fine = minimum pitch, coarse = maximum pitch)
+ float fine_stop = attrf(a, "fine-stop", 0.25f);
+ float coarse_stop = attrf(a, "coarse-stop", 4.0f);
+ prop->setStops(fine_stop, coarse_stop);
+
if(a->hasAttribute("takeoff-power")) {
float power0 = attrf(a, "takeoff-power") * HP2W;
float omega0 = attrf(a, "takeoff-rpm") * RPM2RAD;
bool goingUp = false;
float step = 10;
- while(true) {
+
+ // If we cannot manage this in 100 iterations, give up.
+ for (int n = 0; n < 100; n++) {
float ptau, thrust;
_prop->calc(_rho, speed, _omega * _gearRatio, &thrust, &ptau);
_eng->calc(_pressure, _temp, _omega);
float density = Atmosphere::getStdDensity(0);
_tc0 = (torque * gamma) / (0.5f * density * V2 * _f0);
}
+
+void Propeller::setStops(float fine_stop, float coarse_stop)
+{
+ _fine_stop = fine_stop;
+ _coarse_stop = coarse_stop;
+}
void Propeller::modPitch(float mod)
{
_j0 *= mod;
- if(_j0 < 0.25f*_baseJ0) _j0 = 0.25f*_baseJ0;
- if(_j0 > 4*_baseJ0) _j0 = 4*_baseJ0;
+ if(_j0 < _fine_stop*_baseJ0) _j0 = _fine_stop*_baseJ0;
+ if(_j0 > _coarse_stop*_baseJ0) _j0 = _coarse_stop*_baseJ0;
}
void Propeller::setManualPitch()
// For manual pitch, exponentially modulate the J0 value between
// 0.25 and 4. A prop pitch of 0.5 results in no change from the
// base value.
+ // TODO: integrate with _fine_stop and _coarse_stop variables
if (_manual)
_j0 = _baseJ0 * Math::pow(2, 2 - 4*_proppitch);
// course.
Propeller(float radius, float v, float omega, float rho, float power);
+ void setStops (float fine_stop, float coarse_stop);
+
void setTakeoff(float omega0, float power0);
void modPitch(float mod);
float _lambdaPeak; // constant, ~0.759835;
float _beta; // constant, ~1.48058;
float _tc0; // thrust "coefficient" at takeoff
+ float _fine_stop; // ratio for minimum pitch (high RPM)
+ float _coarse_stop; // ratio for maximum pitch (low RPM)
bool _matchTakeoff; // Does _tc0 mean anything?
bool _manual; // manual pitch mode
float _proppitch; // prop pitch control setting (0 ~ 1.0)