* under the terms of the license (GNU LGPL) which comes with this package. */
#include "simgrid/plugins/photovoltaic.hpp"
-#include "simgrid/s4u.hpp"
#include "simgrid/plugins/solar_panel.hpp"
+#include "simgrid/s4u.hpp"
#include <simgrid/s4u/Actor.hpp>
XBT_LOG_NEW_DEFAULT_CATEGORY(solar_panel_simple, "Messages specific for this s4u example");
{
auto solar_panel = simgrid::plugins::SolarPanel::init("Solar Panel", 10, 0.9, 10, 0, 1e3);
simgrid::s4u::this_actor::sleep_for(1);
- XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(), solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(), solar_panel->get_power());
-
+ XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(),
+ solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(),
+ solar_panel->get_power());
+
solar_panel->set_area(20);
simgrid::s4u::this_actor::sleep_for(1);
- XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(), solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(), solar_panel->get_power());
+ XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(),
+ solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(),
+ solar_panel->get_power());
solar_panel->set_conversion_efficiency(0.8);
simgrid::s4u::this_actor::sleep_for(1);
- XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(), solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(), solar_panel->get_power());
+ XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(),
+ solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(),
+ solar_panel->get_power());
solar_panel->set_solar_irradiance(20);
simgrid::s4u::this_actor::sleep_for(1);
- XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(), solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(), solar_panel->get_power());
+ XBT_INFO("%s: area: %fm² efficiency: %f irradiance: %fW/m² power: %fW", solar_panel->get_cname(),
+ solar_panel->get_area(), solar_panel->get_conversion_efficiency(), solar_panel->get_solar_irradiance(),
+ solar_panel->get_power());
}
int main(int argc, char* argv[])
std::string name_;
double area_m2_;
double conversion_efficiency_;
- double solar_irradiance_w_per_m2_ ;
+ double solar_irradiance_w_per_m2_;
double min_power_w_;
double max_power_w_;
double power_w_ = 0;
double last_updated_ = 0;
- explicit SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
+ explicit SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2,
+ double min_power_w, double max_power_w);
static void init_plugin();
void update();
#endif
public:
-
- static SolarPanelPtr init(const std::string& name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
+ static SolarPanelPtr init(const std::string& name, double area_m2, double conversion_efficiency,
+ double solar_irradiance_w_per_m2, double min_power_w, double max_power_w);
SolarPanelPtr set_name(std::string name);
SolarPanelPtr set_area(double area_m2);
SolarPanelPtr set_max_power(double power_w);
std::string get_name() { return name_; }
- const char* get_cname() { return name_.c_str();}
- double get_area() { return area_m2_;}
+ const char* get_cname() { return name_.c_str(); }
+ double get_area() { return area_m2_; }
double get_conversion_efficiency() { return conversion_efficiency_; }
double get_solar_irradiance() { return solar_irradiance_w_per_m2_; }
double get_min_power() { return min_power_w_; }
#include "src/kernel/resource/CpuImpl.hpp"
#include "src/simgrid/module.hpp"
-
SIMGRID_REGISTER_PLUGIN(solar_panel, "Solar Panel management", nullptr)
/** @defgroup plugin_solar_panel Plugin Solar Panel
irradiance and conversion factor.
The power model is taken from the paper `"Reinforcement Learning Based Load Balancing for
-Geographically Distributed Data Centres" <https://dro.dur.ac.uk/33395/1/33395.pdf?DDD280+kkgc95+vbdv77>`_ by Max Mackie et. al.
+Geographically Distributed Data Centres" <https://dro.dur.ac.uk/33395/1/33395.pdf?DDD280+kkgc95+vbdv77>`_ by Max Mackie
+et. al.
Solar Panel
....................
-A solar panel has an area :math:`A` in m², a conversion efficiency :math:`\eta` and a solar irradiance :math:`S` in W/m².
-The power generated :math:`P` in W by a solar panel is given by the following equation:
+A solar panel has an area :math:`A` in m², a conversion efficiency :math:`\eta` and a solar irradiance :math:`S` in
+W/m². The power generated :math:`P` in W by a solar panel is given by the following equation:
.. math::
power_w = 0;
if (power_w_ > max_power_w_)
power_w = max_power_w_;
- power_w_ = power_w;
+ power_w_ = power_w;
last_updated_ = now;
});
}
-SolarPanel::SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w)
+SolarPanel::SolarPanel(std::string name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2,
+ double min_power_w, double max_power_w)
: name_(name)
, area_m2_(area_m2)
, conversion_efficiency_(conversion_efficiency)
, max_power_w_(max_power_w)
{
xbt_assert(area_m2 >= 0, " : area must be >= 0 (provided: %f)", area_m2);
- xbt_assert(conversion_efficiency >= 0 and conversion_efficiency <= 1, " : conversion efficiency must be in [0,1] (provided: %f)", conversion_efficiency);
- xbt_assert(solar_irradiance_w_per_m2 >= 0, " : solar irradiance must be >= 0 (provided: %f)", solar_irradiance_w_per_m2);
+ xbt_assert(conversion_efficiency >= 0 and conversion_efficiency <= 1,
+ " : conversion efficiency must be in [0,1] (provided: %f)", conversion_efficiency);
+ xbt_assert(solar_irradiance_w_per_m2 >= 0, " : solar irradiance must be >= 0 (provided: %f)",
+ solar_irradiance_w_per_m2);
xbt_assert(min_power_w >= 0, " : minimal power must be >= 0 (provided: %f)", min_power_w);
xbt_assert(max_power_w > 0, " : maximal power must be > 0 (provided: %f)", max_power_w);
- xbt_assert(max_power_w > min_power_w, " : maximal power must be above minimal power (provided: %f, %f)", max_power_w, min_power_w);
+ xbt_assert(max_power_w > min_power_w, " : maximal power must be above minimal power (provided: %f, %f)", max_power_w,
+ min_power_w);
}
/** @ingroup plugin_solar_panel
* @param max_power_w The maximal power delivered by the Solar Panel in W (> 0 and > min_power_w).
* @return A SolarPanelPtr pointing to the new SolarPanel.
*/
-SolarPanelPtr SolarPanel::init(const std::string& name, double area_m2, double conversion_efficiency, double solar_irradiance_w_per_m2, double min_power_w, double max_power_w)
+SolarPanelPtr SolarPanel::init(const std::string& name, double area_m2, double conversion_efficiency,
+ double solar_irradiance_w_per_m2, double min_power_w, double max_power_w)
{
static bool plugin_inited = false;
if (not plugin_inited) {
init_plugin();
plugin_inited = true;
}
- auto solar_panel = SolarPanelPtr(new SolarPanel(name, area_m2, conversion_efficiency, solar_irradiance_w_per_m2, min_power_w, max_power_w));
+ auto solar_panel = SolarPanelPtr(
+ new SolarPanel(name, area_m2, conversion_efficiency, solar_irradiance_w_per_m2, min_power_w, max_power_w));
solar_panel_model_->add_solar_panel(solar_panel);
return solar_panel;
}
*/
SolarPanelPtr SolarPanel::set_name(std::string name)
{
- kernel::actor::simcall_answered([this, name] {name_ = name;});
+ kernel::actor::simcall_answered([this, name] { name_ = name; });
return this;
}
SolarPanelPtr SolarPanel::set_area(double area_m2)
{
xbt_assert(area_m2 >= 0, " : area must be > 0 (provided: %f)", area_m2);
- kernel::actor::simcall_answered([this, area_m2] {area_m2_ = area_m2;});
+ kernel::actor::simcall_answered([this, area_m2] { area_m2_ = area_m2; });
return this;
}
SolarPanelPtr SolarPanel::set_conversion_efficiency(double e)
{
xbt_assert(e >= 0 and e <= 1, " : conversion efficiency must be in [0,1] (provided: %f)", e);
- kernel::actor::simcall_answered([this, e] {conversion_efficiency_ = e;});
+ kernel::actor::simcall_answered([this, e] { conversion_efficiency_ = e; });
return this;
}
*/
SolarPanelPtr SolarPanel::set_solar_irradiance(double solar_irradiance_w_per_m2)
{
- xbt_assert(solar_irradiance_w_per_m2 >= 0, " : solar irradiance must be >= 0 (provided: %f)", solar_irradiance_w_per_m2);
- kernel::actor::simcall_answered([this, solar_irradiance_w_per_m2] {solar_irradiance_w_per_m2_ = solar_irradiance_w_per_m2;});
+ xbt_assert(solar_irradiance_w_per_m2 >= 0, " : solar irradiance must be >= 0 (provided: %f)",
+ solar_irradiance_w_per_m2);
+ kernel::actor::simcall_answered(
+ [this, solar_irradiance_w_per_m2] { solar_irradiance_w_per_m2_ = solar_irradiance_w_per_m2; });
return this;
}
SolarPanelPtr SolarPanel::set_min_power(double power_w)
{
xbt_assert(power_w >= 0, " : minimal power must be >= 0 (provided: %f)", power_w);
- xbt_assert(max_power_w_ > power_w, " : maximal power must be above minimal power (provided: %f, max: %f)", power_w, max_power_w_);
- kernel::actor::simcall_answered([this, power_w] {min_power_w_ = power_w;});
+ xbt_assert(max_power_w_ > power_w, " : maximal power must be above minimal power (provided: %f, max: %f)", power_w,
+ max_power_w_);
+ kernel::actor::simcall_answered([this, power_w] { min_power_w_ = power_w; });
return this;
}
SolarPanelPtr SolarPanel::set_max_power(double power_w)
{
xbt_assert(power_w > 0, " : maximal power must be > 0 (provided: %f)", power_w);
- xbt_assert(min_power_w_ < power_w, " : maximal power must be above minimal power (provided: %f, min: %f)", power_w, min_power_w_);
- kernel::actor::simcall_answered([this, power_w] {max_power_w_ = power_w;});
+ xbt_assert(min_power_w_ < power_w, " : maximal power must be above minimal power (provided: %f, min: %f)", power_w,
+ min_power_w_);
+ kernel::actor::simcall_answered([this, power_w] { max_power_w_ = power_w; });
return this;
}