#ifndef SIMGRID_PLUGINS_BATTERY_HPP_
#define SIMGRID_PLUGINS_BATTERY_HPP_
+#include <cmath>
#include <memory>
#include <simgrid/kernel/resource/Model.hpp>
#include <simgrid/s4u/Activity.hpp>
class Handler {
friend Battery;
+ public:
+ enum Persistancy { PERSISTANT, ONESHOT };
+
private:
double state_of_charge_;
Flow flow_;
double time_delta_ = -1;
std::function<void()> callback_;
- bool repeat_;
+ Persistancy persistancy_;
public:
- Handler(double state_of_charge, Flow flow, bool repeat, std::function<void()> callback);
- static std::shared_ptr<Handler> init(double state_of_charge, Flow flow, bool repeat,
+ Handler(double state_of_charge, Flow flow, Persistancy p, std::function<void()> callback);
+ static std::shared_ptr<Handler> init(double state_of_charge, Flow flow, Persistancy p,
std::function<void()> callback);
/** @ingroup plugin_battery
* @return true if its a recurrent Handler.
* @note For Battery::Handler objects
*/
- bool get_repeat() { return repeat_; }
+ Persistancy get_persistancy() { return persistancy_; }
};
private:
static std::shared_ptr<BatteryModel> battery_model_;
std::string name_;
- double nominal_charge_power_w_;
- double nominal_discharge_power_w_;
- double charge_efficiency_;
- double discharge_efficiency_;
- double initial_capacity_wh_;
- double energy_budget_j_;
-
- std::map<const s4u::Host*, bool> host_loads_ = {};
- std::map<const std::string, double> named_loads_ = {};
+ double nominal_charge_power_w_ = -INFINITY;
+ double nominal_discharge_power_w_ = INFINITY;
+ double charge_efficiency_ = 1;
+ double discharge_efficiency_ = 1;
+ double initial_capacity_wh_ = 0;
+ double energy_budget_j_ = 0;
+
+ std::map<const s4u::Host*, bool> host_loads_ = {};
+ std::map<const std::string, std::pair<bool, double>> named_loads_ = {};
std::vector<std::shared_ptr<Handler>> handlers_;
- double capacity_wh_;
- double energy_stored_j_;
+ double capacity_wh_ = 0;
+ double energy_stored_j_ = 0;
double energy_provided_j_ = 0;
double energy_consumed_j_ = 0;
double last_updated_ = 0;
+ explicit Battery();
explicit Battery(const std::string& name, double state_of_charge, double nominal_charge_power_w,
double nominal_discharge_power_w, double charge_efficiency, double discharge_efficiency,
double initial_capacity_wh, int cycles);
#endif
public:
+ static BatteryPtr init();
static BatteryPtr init(const std::string& name, double state_of_charge, double nominal_charge_power_w,
double nominal_discharge_power_w, double charge_efficiency, double discharge_efficiency,
double initial_capacity_wh, int cycles);
void set_load(const std::string& name, double power_w);
+ void set_load(const std::string& name, bool active);
void connect_host(s4u::Host* host, bool active = true);
+ std::string get_name() {return name_;}
double get_state_of_charge();
double get_state_of_health();
double get_capacity();
double get_energy_provided();
double get_energy_consumed();
double get_energy_stored(std::string unit = "J");
- std::shared_ptr<Handler> schedule_handler(double state_of_charge, Flow flow, bool repeat,
+ std::shared_ptr<Handler> schedule_handler(double state_of_charge, Flow flow, Handler::Persistancy p,
std::function<void()> callback);
std::vector<std::shared_ptr<Handler>> get_handlers();
void delete_handler(std::shared_ptr<Handler> handler);