From 9cd441a0b06f00af5296c74d394770dc2fea4ae7 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Wed, 3 Apr 2019 19:59:07 +0300 Subject: [PATCH 1/4] energy: update remaining energy even if the simulation has finished Otherwise consumed energy may be estimated incorrectly if it is queried at the end of simulation. --- src/energy/model/basic-energy-source.cc | 6 ------ src/uan/test/uan-energy-model-test.cc | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/energy/model/basic-energy-source.cc b/src/energy/model/basic-energy-source.cc index 0a662b16d..e3bf66b2a 100644 --- a/src/energy/model/basic-energy-source.cc +++ b/src/energy/model/basic-energy-source.cc @@ -154,12 +154,6 @@ BasicEnergySource::UpdateEnergySource (void) NS_LOG_FUNCTION (this); NS_LOG_DEBUG ("BasicEnergySource:Updating remaining energy."); - // do not update if simulation has finished - if (Simulator::IsFinished ()) - { - return; - } - m_energyUpdateEvent.Cancel (); double remainingEnergy = m_remainingEnergyJ; diff --git a/src/uan/test/uan-energy-model-test.cc b/src/uan/test/uan-energy-model-test.cc index 204e90cfa..3cacadccb 100644 --- a/src/uan/test/uan-energy-model-test.cc +++ b/src/uan/test/uan-energy-model-test.cc @@ -199,7 +199,7 @@ AcousticModemEnergyTestCase::DoRun () Ptr src1 = m_gateway->GetObject ()->Get (0); double consumed1 = src1->GetInitialEnergy () - src1->GetRemainingEnergy (); double computed1 = cont2.Get (0)->GetObject ()->GetRxPowerW () * packetDuration * receivedPackets + - cont2.Get (0)->GetObject ()->GetIdlePowerW () * (m_simTime - (double) 2.0 / 3.0 - packetDuration * receivedPackets); + cont2.Get (0)->GetObject ()->GetIdlePowerW () * (m_simTime - packetDuration * receivedPackets); NS_TEST_ASSERT_MSG_EQ_TOL (consumed1, computed1, 1.0e-5, "Incorrect gateway consumed energy!"); @@ -207,7 +207,7 @@ AcousticModemEnergyTestCase::DoRun () Ptr src2 = m_node->GetObject ()->Get (0); double consumed2 = src2->GetInitialEnergy () - src2->GetRemainingEnergy (); double computed2 = cont.Get (0)->GetObject ()->GetTxPowerW () * packetDuration * m_sentPackets + - cont.Get (0)->GetObject ()->GetIdlePowerW () * (m_simTime - 1 - packetDuration * m_sentPackets); + cont.Get (0)->GetObject ()->GetIdlePowerW () * (m_simTime - packetDuration * m_sentPackets); NS_TEST_ASSERT_MSG_EQ_TOL (consumed2, computed2, 1.0e-5, "Incorrect node consumed energy!"); From 1f1f10e13a24b8b01d0e295325f6a72a3bf0bbcd Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Wed, 3 Apr 2019 20:03:42 +0300 Subject: [PATCH 2/4] energy: reschedule UpdateEnergySource only if it has already expired Otherwise, if energy consumption is queried frequently, canceled events are produced. These events take up memory and slow down the simulator. --- src/energy/model/basic-energy-source.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/energy/model/basic-energy-source.cc b/src/energy/model/basic-energy-source.cc index e3bf66b2a..0024d910e 100644 --- a/src/energy/model/basic-energy-source.cc +++ b/src/energy/model/basic-energy-source.cc @@ -154,8 +154,6 @@ BasicEnergySource::UpdateEnergySource (void) NS_LOG_FUNCTION (this); NS_LOG_DEBUG ("BasicEnergySource:Updating remaining energy."); - m_energyUpdateEvent.Cancel (); - double remainingEnergy = m_remainingEnergyJ; CalculateRemainingEnergy (); @@ -176,9 +174,12 @@ BasicEnergySource::UpdateEnergySource (void) NotifyEnergyChanged (); } - m_energyUpdateEvent = Simulator::Schedule (m_energyUpdateInterval, - &BasicEnergySource::UpdateEnergySource, - this); + if (m_energyUpdateEvent.IsExpired ()) + { + m_energyUpdateEvent = Simulator::Schedule (m_energyUpdateInterval, + &BasicEnergySource::UpdateEnergySource, + this); + } } /* From 9eacf6bc38b67f503927f467f65367ba878337cd Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Thu, 4 Apr 2019 14:18:54 +0300 Subject: [PATCH 3/4] Reduce simulation time to 1 second in AnimationRemainingEnergyTestCase Otherwise remaining energy goes below zero. --- src/netanim/test/netanim-test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/netanim/test/netanim-test.cc b/src/netanim/test/netanim-test.cc index d296a34d9..b51828bb6 100644 --- a/src/netanim/test/netanim-test.cc +++ b/src/netanim/test/netanim-test.cc @@ -238,7 +238,7 @@ AnimationRemainingEnergyTestCase::PrepareNetwork (void) // aggregate energy source to node m_nodes.Get (0)->AggregateObject (m_energySource); // once node's energy will be depleted according to the model - Simulator::Stop (Seconds (2)); + Simulator::Stop (Seconds (1)); } void From 99430f7a7751a5f3582b1b8cc2dba7483e8e9d9c Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Thu, 4 Apr 2019 14:56:02 +0300 Subject: [PATCH 4/4] energy: increase tolerance in BasicEnergyUpdateTest --- src/energy/examples/basic-energy-model-test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/energy/examples/basic-energy-model-test.cc b/src/energy/examples/basic-energy-model-test.cc index c64c71f45..1138a8a55 100644 --- a/src/energy/examples/basic-energy-model-test.cc +++ b/src/energy/examples/basic-energy-model-test.cc @@ -74,7 +74,7 @@ private: BasicEnergyUpdateTest::BasicEnergyUpdateTest () { m_timeS = 15.5; // idle for 15 seconds before changing state - m_tolerance = 1.0e-13; // + m_tolerance = 1.0e-5; // } BasicEnergyUpdateTest::~BasicEnergyUpdateTest ()