00001
00009 #ifndef _CLIMATE_H
00010 #define _CLIMATE_H
00011
00012 #include <stdarg.h>
00013 #include "gridlabd.h"
00014 #include "solar_angles.h"
00015 #include "weather_reader.h"
00016 #include "csv_reader.h"
00017
00018 typedef enum{
00019 CP_H = 0,
00020 CP_N = 1,
00021 CP_NE = 2,
00022 CP_E = 3,
00023 CP_SE = 4,
00024 CP_S = 5,
00025 CP_SW = 6,
00026 CP_W = 7,
00027 CP_NW = 8,
00028 CP_LAST = 9
00029 } COMPASS_PTS;
00030
00031 typedef enum{
00032 CI_NONE = 0,
00033 CI_LINEAR,
00034 CI_QUADRATIC
00035 } CLIMATE_INTERPOLATE;
00036
00037
00038
00039 typedef struct s_tmy {
00040 double temp;
00041 double temp_raw;
00042 double rh;
00043 double dnr;
00044 double dhr;
00045 double ghr;
00046 double solar[CP_LAST];
00047 double solar_raw;
00048 double windspeed;
00049 double rainfall;
00050 double snowdepth;
00051 } TMYDATA;
00052
00062 class tmy2_reader{
00063 private:
00064
00065 char data_city[75];
00066 char data_state[3];
00067 int lat_degrees;
00068 int lat_minutes;
00069 int long_degrees;
00070 int long_minutes;
00071 double low_temp;
00072 double high_temp;
00073 double peak_solar;
00074
00075 FILE *fp;
00076 char buf[500];
00077
00078 public:
00079 int tz_offset;
00080 tmy2_reader(){}
00081
00082 void close();
00083
00092 int open(const char *file);
00093
00097 int next();
00098
00109 int header_info(char* city, char* state, int* degrees, int* minutes, int* long_deg, int* long_min);
00110
00123 int read_data(double *dnr, double *dhr, double *ghr, double *tdb, double *rh, int* month, int* day, int* hour, double *wind=0,double *precip=0, double *snowDepth=0);
00124
00127 double calc_solar(COMPASS_PTS cpt, short doy, double lat, double sol_time, double dnr, double dhr, double ghr, double gnd_ref, double vert_angle);
00128
00129 };
00130
00131
00132
00133 class climate {
00134 public:
00135 char32 city;
00136 char1024 tmyfile;
00137 OBJECT *reader;
00138 double temperature;
00139 double temperature_raw;
00140 double humidity;
00141 double solar_flux[CP_LAST];
00142 double solar_direct;
00143 double solar_diffuse;
00144 double solar_global;
00145 double solar_raw;
00146 double wind_speed;
00147 double wind_dir;
00148 double wind_gust;
00149 double rainfall;
00150 double snowdepth;
00151 double ground_reflectivity;
00152 struct {
00153 double low;
00154 double low_day;
00155 double high;
00156 double high_day;
00157 double solar;
00158 } record;
00159 CLIMATE_INTERPOLATE interpolate;
00160 private:
00161 enum READERTYPE {
00162 RT_NONE,
00163 RT_TMY2,
00164 RT_CSV,
00165 } reader_type;
00166 SolarAngles *sa;
00167 tmy2_reader file;
00168 weather_reader *reader_hndl;
00169 TMYDATA *tmy;
00170 public:
00171 static CLASS *oclass;
00172 static climate *defaults;
00173 public:
00174 climate(MODULE *module);
00175 int create(void);
00176 int init(OBJECT *parent);
00177 TIMESTAMP sync(TIMESTAMP t0);
00178 };
00179
00180 #endif
00181