00001
00010 #ifndef _WATERHEATER_H
00011 #define _WATERHEATER_H
00012
00013 #include "residential.h"
00014 #include "residential_enduse.h"
00015
00016 class waterheater : public residential_enduse {
00017 private:
00018 double standby_load;
00019 public:
00020 typedef enum {
00021 ONENODE,
00022 TWONODE,
00023 NONE,
00024 } WHMODEL;
00025 typedef enum {
00026 DEPLETING,
00027 RECOVERING,
00028 STABLE,
00029 } WHQFLOW;
00030 typedef enum {
00031 INSIDE,
00032 GARAGE,
00033 } WHLOCATION;
00034 typedef enum {
00035 FULL,
00036 PARTIAL,
00037 EMPTY,
00038 } WHQSTATE;
00039 typedef enum {
00040 ELECTRIC,
00041 GASHEAT
00042 } HEATMODE;
00043
00044
00045 double time_to_transition;
00046
00047
00048 double Tset_curtail;
00049 double Tinlet;
00050 WHLOCATION location;
00051 HEATMODE heat_mode;
00052
00053
00054 double area;
00055 double height;
00056 double Ton;
00057 double Toff;
00058 double Cw;
00059
00060
00061 double h;
00062 double Tlower;
00063 double Tlower_old;
00064 double Tupper;
00065 double Tupper_old;
00066 double Twater;
00067 double Tw;
00068 double Tw_old;
00069
00070
00071 bool heat_needed;
00072
00073 public:
00074 double tank_volume;
00075 double tank_UA;
00076 double tank_diameter;
00077 double water_demand;
00078 double water_demand_old;
00079 double heating_element_capacity;
00080 double tank_setpoint;
00081 double thermostat_deadband;
00082 double *pTair;
00083 double *pTout;
00084
00085 double actual_load;
00086
00087
00088 public:
00089 static CLASS *oclass, *pclass;
00090 static waterheater *defaults;
00091
00092 waterheater(MODULE *mod);
00093 ~waterheater(void);
00094 int create();
00095 int init(OBJECT *parent);
00096 int isa(char *classname);
00097 void thermostat(TIMESTAMP t0, TIMESTAMP t1);
00098 TIMESTAMP presync(TIMESTAMP t0, TIMESTAMP t1);
00099 TIMESTAMP sync(TIMESTAMP t0, TIMESTAMP t1);
00100 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00101 int commit();
00102
00103
00104 public:
00105 WHMODEL current_model;
00106 WHQFLOW load_state;
00107
00108 WHQSTATE tank_state(void);
00109 void set_time_to_transition(void);
00110 WHQFLOW set_current_model_and_load_state(void);
00111 void update_T_and_or_h(double);
00112
00113 double dhdt(double h);
00114 double actual_kW(void);
00115 double new_time_1node(double T0, double T1);
00116 double new_temp_1node(double T0, double delta_t);
00117 double new_time_2zone(double h0, double h1);
00118 double new_h_2zone(double h0, double delta_t);
00119
00120 double get_Tambient(WHLOCATION water_heater_location);
00121 typedef enum {MODEL_NOT_1ZONE=0, MODEL_NOT_2ZONE=1} WRONGMODEL;
00122 void wrong_model(WRONGMODEL msg);
00123 };
00124
00125 #endif
00126