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 FORTRAN,
00024 NONE,
00025 } WHMODEL;
00026 typedef enum {
00027 DEPLETING,
00028 RECOVERING,
00029 STABLE,
00030 } WHQFLOW;
00031 typedef enum {
00032 INSIDE,
00033 GARAGE,
00034 } WHLOCATION;
00035 typedef enum {
00036 FULL,
00037 PARTIAL,
00038 EMPTY,
00039 } WHQSTATE;
00040 typedef enum {
00041 ELECTRIC,
00042 GASHEAT,
00043 HEAT_PUMP
00044 } HEATMODE;
00045
00046
00047 double time_to_transition;
00048
00049
00050 double Tset_curtail;
00051 double Tinlet;
00052 enumeration location;
00053 enumeration heat_mode;
00054 enumeration current_tank_state;
00055
00056
00057 double area;
00058 double height;
00059 double Ton;
00060 double Toff;
00061 double Cw;
00062
00063
00064 double h;
00065 double Tlower;
00066 double Tlower_old;
00067 double Tupper;
00068 double Tupper_old;
00069 double Twater;
00070 double Tw;
00071 double Tw_old;
00072 double Tcontrol;
00073
00074
00075 bool heat_needed;
00076 double is_waterheater_on;
00077 public:
00078 double tank_volume;
00079 double tank_UA;
00080 double tank_diameter;
00081 double tank_height;
00082 double water_demand;
00083 double water_demand_old;
00084 double heating_element_capacity;
00085 double tank_setpoint;
00086 double thermostat_deadband;
00087 double *pTair;
00088 double *pTout;
00089 double *pRH;
00090 double HP_COP;
00091 double gas_fan_power;
00092 double gas_standby_power;
00093
00094 double nominal_voltage;
00095 double actual_load;
00096 double actual_voltage;
00097 double prev_load;
00098 complex waterheater_actual_power;
00099
00100 public:
00101 double dr_signal;
00102 double simulation_time;
00103 double fwh_cop_current;
00104 double operating_mode;
00105
00106 public:
00107
00108 double sensor_position[2];
00109 double heater_element_power[2];
00110 double heater_size[2];
00111 double heater_element_position[2];
00112 double upper_element_activation_temp_offset;
00113 double compressor_power_capacity;
00114 double compressor_activation_temp_offset;
00115 double tank_heat_loss_rate;
00116 double upper_fraction;
00117 double lower_fraction;
00118
00119
00120 double thermal_conductivity;
00121 double convective_coefficient;
00122 double water_heat_capacity;
00123 double water_density;
00124
00125
00126 double lowest_ambient_temperature_limit;
00127 double highest_ambient_temperature_limit;
00128 double lowest_water_temperature_limit;
00129 double activation_temperature_offset;
00130 double ambient_air_dry_bulb_temp;
00131 double ambient_air_wet_bulb_temp;
00132 double temp_set[2];
00133 int coarse_tank_grid;
00134 int fine_tank_grid;
00135 int ncomp;
00136 int nheat[2];
00137 int heat_up;
00138 double init_tank_temp[144];
00139
00140
00141 double ambient_temp;
00142 double inlet_water_flow;
00143 double inlet_water_flow_threshold;
00144 double ambient_rh;
00145
00146
00147 double fwh_power;
00148 double fwh_power_now;
00149 double tank_water_temp[144];
00150 double fwh_cop;
00151 double fwh_energy;
00152
00153 TIMESTAMP fwh_sim_time;
00154
00155 public:
00156 static CLASS *oclass, *pclass;
00157 static waterheater *defaults;
00158
00159 waterheater(MODULE *mod);
00160 ~waterheater(void);
00161 int create();
00162 int init(OBJECT *parent);
00163 int isa(char *classname);
00164 void thermostat(TIMESTAMP t0, TIMESTAMP t1);
00165 TIMESTAMP presync(TIMESTAMP t0, TIMESTAMP t1);
00166 TIMESTAMP sync(TIMESTAMP t0, TIMESTAMP t1);
00167 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00168 TIMESTAMP commit();
00169
00170
00171 public:
00172 enumeration current_model;
00173 enumeration load_state;
00174
00175 enumeration tank_state(void);
00176 void set_time_to_transition(void);
00177 enumeration set_current_model_and_load_state(void);
00178 void update_T_and_or_h(double);
00179
00180 double dhdt(double h);
00181 double actual_kW(void);
00182 double new_time_1node(double T0, double T1);
00183 double new_temp_1node(double T0, double delta_t);
00184 double new_time_2zone(double h0, double h1);
00185 double new_h_2zone(double h0, double delta_t);
00186
00187 double get_Tambient(enumeration water_heater_location);
00188 typedef enum {MODEL_NOT_1ZONE=0, MODEL_NOT_2ZONE=1} WRONGMODEL;
00189 void wrong_model(WRONGMODEL msg);
00190 };
00191
00192 #endif
00193