Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
better comments on examples
[simgrid.git] / examples / cpp / battery-chiller-solar / s4u-battery-chiller-solar.cpp
index 454b259..00fff06 100644 (file)
@@ -66,18 +66,6 @@ static void end_manager(sp::BatteryPtr b)
     b->delete_handler(handler);
 }
 
-static void logger(sp::BatteryPtr battery, sp::SolarPanelPtr solar_panel, sp::ChillerPtr chiller, sg4::Host* host1,
-                   sg4::Host* host2)
-{
-  while (true) {
-    XBT_INFO("SoC: %f Solar_Power: %f E_chiller: %f E_hosts_brown: %f E_hosts_green: %f",
-             battery->get_state_of_charge(), solar_panel->get_power(), chiller->get_energy_consumed(),
-             sg_host_get_consumed_energy(host1) + sg_host_get_consumed_energy(host2) - battery->get_energy_provided(),
-             battery->get_energy_provided());
-    simgrid::s4u::this_actor::sleep_for(100);
-  }
-}
-
 int main(int argc, char* argv[])
 {
   sg4::Engine e(&argc, argv);
@@ -94,6 +82,8 @@ int main(int argc, char* argv[])
   chiller->add_host(myhost2);
   solar_panel->on_this_power_change_cb(
       [battery](sp::SolarPanel* s) { battery->set_load("Solar Panel", s->get_power() * -1); });
+
+  // These handlers connect/disconnect the solar panel and the hosts depending on the state of charge of the battery
   battery->schedule_handler(0.8, sp::Battery::CHARGE, sp::Battery::Handler::PERSISTANT,
                             [battery]() { battery->set_load("Solar Panel", false); });
   battery->schedule_handler(0.75, sp::Battery::DISCHARGE, sp::Battery::Handler::PERSISTANT,
@@ -109,11 +99,17 @@ int main(int argc, char* argv[])
                               battery->connect_host(myhost2);
                             });
 
+  /* Handlers create simulation events preventing the simulation from finishing
+     To avoid this behaviour this actor sleeps for 2 days and then delete all handlers
+  */
+  sg4::Actor::create("end_manager", myhost1, end_manager, battery);
+
+  // This actor updates the solar irradiance of the solar panel
   sg4::Actor::create("irradiance_manager", myhost1, irradiance_manager, solar_panel)->daemonize();
+
+  // These actors start a job on a host for a specific duration
   sg4::Actor::create("host_job_manager", myhost1, host_job_manager, 12 * 60 * 60, 4 * 60 * 60);
   sg4::Actor::create("host_job_manager", myhost2, host_job_manager, 12 * 60 * 60, 4 * 60 * 60);
-  sg4::Actor::create("end_manager", myhost1, end_manager, battery);
-  // sg4::Actor::create("logger", myhost1, logger, battery, solar_panel, chiller, myhost1, myhost2)->daemonize();
 
   e.run();
   XBT_INFO("State of charge of the battery: %0.1f%%", battery->get_state_of_charge() * 100);