00001
00025 #include "WindAzimuth.h"
00026
00027 int GetWindAzimuthFIXEDFromProps(ChHashTable * proptbl, int month, int day, int hour,
00028 unsigned int row, unsigned int col, double * waz) {
00029
00030 static int smonth = 0;
00031 static int sday = 0;
00032 static int shour = 0;
00033 static double swaz = 0.0;
00034 static DblTwoDArray * swaz_tbl = NULL;
00035
00036 KeyVal * entry = NULL;
00037 FILE * fstream = NULL;
00038 int rec;
00039
00040 if ( (smonth != month) || (sday != day) || (shour != hour) ) {
00041
00042 if (swaz_tbl == NULL ) {
00043 *waz = swaz;
00044
00045 if ( ChHashTableRetrieve(proptbl, GetFireProp(PROP_WAZFFILE), (void *)&entry) ) {
00046 ERR_ERROR("Unable to retrieve WIND_AZIMUTH_FIXED_FILE property. \n", ERR_EINVAL);
00047 }
00048
00049 if ( (fstream = fopen((char *) entry->val, "r")) == NULL ) {
00050 ERR_ERROR("Unable to open file containing fixed Wind Azimuths. \n", ERR_EIOFAIL);
00051 }
00052
00053 if ( (swaz_tbl = GetDblTwoDArrayTableFStreamIO(fstream,
00054 WIND_AZIMUTH_SEP_CHARS, WIND_AZIMUTH_WAZ_COMMENT_CHAR)) == NULL ) {
00055 fclose(fstream);
00056 ERR_ERROR("Unable to initialize fixed Wind Azimuth table. \n", ERR_EFAILED);
00057 }
00058 fclose(fstream);
00059 }
00060
00061 row = DBLTWODARRAY_SIZE_ROW(swaz_tbl);
00062 for(rec = 0; rec < row; rec++) {
00063
00064 if ( DBLTWODARRAY_GET_DATA(swaz_tbl, rec, WIND_AZIMUTH_MO_WAZ_TBL_INDEX) == month
00065 && DBLTWODARRAY_GET_DATA(swaz_tbl, rec, WIND_AZIMUTH_DY_WAZ_TBL_INDEX) == day ) {
00066
00067 col = WIND_AZIMUTH_HR_TO_WAZ_TBL_INDEX(hour);
00068 swaz = DBLTWODARRAY_GET_DATA(swaz_tbl, rec, col);
00069 break;
00070 }
00071 }
00072
00073 smonth = month;
00074 sday = day;
00075 shour = hour;
00076 }
00077
00078 *waz = swaz;
00079
00080 return ERR_SUCCESS;
00081 }
00082
00083 int GetWindAzimuthRANDUFromProps(ChHashTable * proptbl, int month, int day, int hour,
00084 unsigned int row, unsigned int col, double * waz) {
00085
00086 static int smonth = 0;
00087 static int sday = 0;
00088 static int shour = 0;
00089 static double swaz = 0.0;
00090
00091
00092 row = col = 0;
00093 if ( proptbl == NULL ) {
00094 ERR_ERROR("Simulation properties table not initialized. \n", ERR_EINVAL);
00095 }
00096
00097 if ( (smonth != month) || (sday != day) || (shour != hour) ) {
00098
00099 swaz = randu(WIND_AZIMUTH_RANDU_MIN_AZ, WIND_AZIMUTH_RANDU_MAX_AZ);
00100
00101 smonth = month;
00102 sday = day;
00103 shour = hour;
00104 }
00105
00106 *waz = swaz;
00107
00108 return ERR_SUCCESS;
00109 }
00110
00111 int GetWindAzimuthRANDHFromProps(ChHashTable * proptbl, int month, int day, int hour,
00112 unsigned int row, unsigned int col, double * waz) {
00113
00114 static int smonth = 0;
00115 static int sday = 0;
00116 static int shour = 0;
00117 static double swaz = 0.0;
00118 static DblTwoDArray * swaz_tbl = NULL;
00119
00120 KeyVal * entry = NULL;
00121 FILE * fstream = NULL;
00122
00123 if ( (smonth != month) || (sday != day) || (shour != hour) ) {
00124
00125 if (swaz_tbl == NULL ) {
00126 *waz = swaz;
00127
00128 if ( ChHashTableRetrieve(proptbl, GetFireProp(PROP_WAZHFILE), (void *)&entry) ) {
00129 ERR_ERROR("Unable to retrieve WIND_AZIMUTH_HISTORICAL_FILE property. \n", ERR_EINVAL);
00130 }
00131
00132 if ( (fstream = fopen((char *) entry->val, "r")) == NULL ) {
00133 ERR_ERROR("Unable to open file containing historical Wind Azimuths. \n", ERR_EIOFAIL);
00134 }
00135
00136 if ( (swaz_tbl = GetDblTwoDArrayTableFStreamIO(fstream,
00137 WIND_AZIMUTH_SEP_CHARS, WIND_AZIMUTH_WAZ_COMMENT_CHAR)) == NULL ) {
00138 fclose(fstream);
00139 ERR_ERROR("Unable to initialize historical Wind Azimuth table. \n", ERR_EFAILED);
00140 }
00141 fclose(fstream);
00142 }
00143
00144 do {
00145
00146
00147
00148
00149 row = randi(0) % DBLTWODARRAY_SIZE_ROW(swaz_tbl);
00150 col = WIND_AZIMUTH_HR_TO_WAZ_TBL_INDEX(hour);
00151
00152 swaz = DBLTWODARRAY_GET_DATA(swaz_tbl, row, col);
00153 } while( swaz == WIND_AZIMUTH_WAZ_NO_DATA_VALUE );
00154
00155 smonth = month;
00156 sday = day;
00157 shour = hour;
00158 }
00159
00160 *waz = swaz;
00161
00162 return ERR_SUCCESS;
00163 }
00164
00165 int GetWindAzimuthSPATIALFromProps(ChHashTable * proptbl, int month, int day, int hour,
00166 unsigned int row, unsigned int col, double * waz) {
00167
00168 month = day = hour = row = col = *waz =0;
00169 if ( proptbl == NULL ) {
00170 ERR_ERROR("Simulation properties table not initialized. \n", ERR_EINVAL);
00171 }
00172
00173 ERR_ERROR("SPATIAL option for WIND_AZIMUTH_TYPE not yet implemented. \n", ERR_EUNIMPL);
00174 }
00175
00176