00001
00008 #ifndef _eventgen_H
00009 #define _eventgen_H
00010
00011 #include <stdarg.h>
00012 #include "gridlabd.h"
00013 #include "reliability.h"
00014
00015 EXPORT SIMULATIONMODE interupdate_eventgen(OBJECT *obj, unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val);
00016
00017
00018
00019
00020 typedef enum {
00021 UNIFORM=0,
00022 NORMAL=1,
00023 LOGNORMAL=2,
00024 BERNOULLI=3,
00025 PARETO=4,
00026 EXPONENTIAL=5,
00027 RAYLEIGH=6,
00028 WEIBULL=7,
00029 GAMMA=8,
00030 BETA=9,
00031 TRIANGLE=10,
00032 NONE=11,
00033 } DISTTYPE;
00034
00035 typedef struct s_objevtdetails {
00036 OBJECT *obj_of_int;
00037 OBJECT *obj_made_int;
00038 TIMESTAMP fail_time;
00039 unsigned int fail_time_ns;
00040 double fail_time_dbl;
00041 TIMESTAMP rest_time;
00042 unsigned int rest_time_ns;
00043 double rest_time_dbl;
00044 TIMESTAMP fail_length;
00045 unsigned int fail_length_ns;
00046 double fail_length_dbl;
00047 TIMESTAMP rest_length;
00048 unsigned int rest_length_ns;
00049 double rest_length_dbl;
00050 bool in_fault;
00051 int implemented_fault;
00052 int customers_affected;
00053 int customers_affected_sec;
00054 } OBJEVENTDETAILS;
00055
00056 typedef struct s_relevantstruct {
00057 OBJEVENTDETAILS objdetails;
00058 char32 event_type;
00059 struct s_relevantstruct *prev;
00060 struct s_relevantstruct *next;
00061 } RELEVANTSTRUCT;
00062
00063 class eventgen : public gld_object {
00064 private:
00065 double curr_fail_dist_params[2];
00066 double curr_rest_dist_params[2];
00067 enumeration curr_fail_dist;
00068 enumeration curr_rest_dist;
00069 TIMESTAMP max_outage_length;
00070 TIMESTAMP next_event_time;
00071 double next_event_time_dbl;
00072 OBJECT *metrics_obj_hdr;
00073 int curr_time_interrupted;
00074 int curr_time_interrupted_sec;
00075 bool diff_count_needed;
00076 gld_property *secondary_interruption_cnt;
00077 bool fault_implement_mode;
00078 char *time_token(char *start_token, TIMESTAMP *time_val, unsigned int *micro_time_val, double *dbl_time_val);
00079 char *obj_token(char *start_token, OBJECT **obj_val);
00080 double glob_min_timestep;
00081 bool off_nominal_time;
00082 bool deltamode_inclusive;
00083 int last_switch_state;
00085 void do_event(TIMESTAMP t1_ts, double t1_dbl, bool entry_type);
00086 void regen_events(TIMESTAMP t1_ts, double t1_dbl);
00088 FUNCTIONADDR metrics_object_event_ended;
00089 FUNCTIONADDR metrics_object_event_ended_sec;
00090 FUNCTIONADDR metrics_get_interrupted_count;
00091 FUNCTIONADDR metrics_get_interrupted_count_sec;
00093 public:
00094 RELEVANTSTRUCT Unhandled_Events;
00095 enumeration failure_dist;
00096 enumeration restore_dist;
00097 char1024 target_group;
00098 char256 fault_type;
00099 double fail_dist_params[2];
00100 double rest_dist_params[2];
00101 double max_outage_length_dbl;
00102 OBJEVENTDETAILS *UnreliableObjs;
00103 int UnreliableObjCount;
00104 int max_simult_faults;
00105 int faults_in_prog;
00106 char1024 manual_fault_list;
00107 char256 controlled_switch;
00108 int switch_state;
00109 void gen_random_time(enumeration rand_dist_type, double param_1, double param_2, TIMESTAMP *event_time, unsigned int *event_nanoseconds, double *event_double);
00110 int add_unhandled_event(OBJECT *obj_to_fault, char *event_type, TIMESTAMP fail_time, TIMESTAMP rest_length, int implemented_fault, bool fault_state);
00111 SIMULATIONMODE inter_deltaupdate(unsigned int64 delta_time, unsigned long dt, unsigned int iteration_count_val);
00112 public:
00113
00114 eventgen(MODULE *module);
00115 int create(void);
00116 int init(OBJECT *parent);
00117 TIMESTAMP presync(TIMESTAMP t0, TIMESTAMP t1);
00118 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00119 public:
00120 static CLASS *oclass;
00121 static eventgen *defaults;
00122
00123 };
00124
00125
00126 EXPORT int add_event(OBJECT *event_obj, OBJECT *obj_to_fault, char *event_type, TIMESTAMP fail_time, TIMESTAMP rest_length, int implemented_fault, bool fault_state);
00127 #endif
00128