diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs index 0e203fd5002a91a514f0b840ee19b7f1f2182e97..e0ffe91dc587eb0389b359a0220f2c388c2e9d68 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs @@ -55,9 +55,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override void DoWriteModalResults(IModalDataContainer container) { - var avgAngularVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0; - container[ModalResultField.P_clutch_out] = CurrentState.OutTorque * avgAngularVelocity; - container[ModalResultField.P_clutch_loss] = (CurrentState.InTorque - CurrentState.OutTorque) * avgAngularVelocity; + if (PreviousState.InAngularVelocity == null || CurrentState.InAngularVelocity == null) { + container[ModalResultField.P_clutch_out] = 0.SI<Watt>(); + container[ModalResultField.P_clutch_loss] = 0.SI<Watt>(); + } else { + var avgAngularVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0; + container[ModalResultField.P_clutch_out] = CurrentState.OutTorque * avgAngularVelocity; + container[ModalResultField.P_clutch_loss] = (CurrentState.InTorque - CurrentState.OutTorque) * avgAngularVelocity; + } } protected override void DoCommitSimulationStep() @@ -87,6 +92,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var retval = IdleController.Request(absTime, dt, torque, null, dryRun); retval.ClutchPowerRequest = 0.SI<Watt>(); + CurrentState.SetState(0.SI<NewtonMeter>(), retval.EngineSpeed, torque, retval.EngineSpeed); return retval; } if (IdleController != null) { @@ -96,10 +102,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl PerSecond angularVelocityIn; AddClutchLoss(torque, angularVelocity, out torqueIn, out angularVelocityIn); - CurrentState.SetState(torqueIn, angularVelocityIn, torqueIn, angularVelocity); + CurrentState.SetState(torqueIn, angularVelocityIn, torque, angularVelocity); var retVal = NextComponent.Request(absTime, dt, torqueIn, angularVelocityIn, dryRun); - retVal.ClutchPowerRequest = torque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0; + + retVal.ClutchPowerRequest = torque * + ((PreviousState.OutAngularVelocity ?? 0.SI<PerSecond>()) + CurrentState.OutAngularVelocity) / 2.0; return retVal; } @@ -108,6 +116,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl NewtonMeter torqueIn; PerSecond engineSpeedIn; AddClutchLoss(torque, angularVelocity, out torqueIn, out engineSpeedIn); + PreviousState.SetState(torqueIn, angularVelocity, torque, angularVelocity); var retVal = NextComponent.Initialize(torqueIn, engineSpeedIn); retVal.ClutchPowerRequest = torque * angularVelocity;