From 17c80dc005ddfd8aa2b4b80c3eed43918458d6cf Mon Sep 17 00:00:00 2001 From: Cristiano Tapparello Date: Fri, 11 Mar 2016 15:04:49 -0500 Subject: [PATCH] energy: Fixes for negative remaining energy and bug 2310 --- src/energy/model/basic-energy-source.cc | 15 ++++++++++----- src/energy/model/li-ion-energy-source.cc | 17 ++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/energy/model/basic-energy-source.cc b/src/energy/model/basic-energy-source.cc index 70fb65fe7..2a05042a8 100644 --- a/src/energy/model/basic-energy-source.cc +++ b/src/energy/model/basic-energy-source.cc @@ -207,10 +207,6 @@ BasicEnergySource::HandleEnergyDrainedEvent (void) NS_LOG_FUNCTION (this); NS_LOG_DEBUG ("BasicEnergySource:Energy depleted!"); NotifyEnergyDrained (); // notify DeviceEnergyModel objects - if (m_remainingEnergyJ <= 0) - { - m_remainingEnergyJ = 0; // energy never goes below 0 - } } void @@ -230,7 +226,16 @@ BasicEnergySource::CalculateRemainingEnergy (void) NS_ASSERT (duration.GetSeconds () >= 0); // energy = current * voltage * time double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds (); - m_remainingEnergyJ -= energyToDecreaseJ; + + if (m_remainingEnergyJ < energyToDecreaseJ) + { + m_remainingEnergyJ = 0; // energy never goes below 0 + } + else + { + m_remainingEnergyJ -= energyToDecreaseJ; + } + NS_LOG_DEBUG ("BasicEnergySource:Remaining energy = " << m_remainingEnergyJ); } diff --git a/src/energy/model/li-ion-energy-source.cc b/src/energy/model/li-ion-energy-source.cc index 6a290783e..84a2d6bfb 100644 --- a/src/energy/model/li-ion-energy-source.cc +++ b/src/energy/model/li-ion-energy-source.cc @@ -253,8 +253,6 @@ void LiIonEnergySource::DoDispose (void) { NS_LOG_FUNCTION (this); - // calculate remaining energy at the end of simulation - CalculateRemainingEnergy (); BreakDeviceEnergyModelRefCycle (); // break reference cycle } @@ -266,10 +264,6 @@ LiIonEnergySource::HandleEnergyDrainedEvent (void) NS_LOG_DEBUG ("LiIonEnergySource:Energy depleted at node #" << GetNode ()->GetId ()); NotifyEnergyDrained (); // notify DeviceEnergyModel objects - if (m_remainingEnergyJ <= 0) - { - m_remainingEnergyJ = 0; // energy never goes below 0 - } } @@ -282,7 +276,16 @@ LiIonEnergySource::CalculateRemainingEnergy (void) NS_ASSERT (duration.GetSeconds () >= 0); // energy = current * voltage * time double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds (); - m_remainingEnergyJ -= energyToDecreaseJ; + + if (m_remainingEnergyJ < energyToDecreaseJ) + { + m_remainingEnergyJ = 0; // energy never goes below 0 + } + else + { + m_remainingEnergyJ -= energyToDecreaseJ; + } + m_drainedCapacity += (totalCurrentA * duration.GetSeconds () / 3600); // update the supply voltage m_supplyVoltageV = GetVoltage (totalCurrentA);