diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index 897c104ad..cc7e4362f 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -848,7 +848,7 @@ RECORD WDHR "wfdata sub" *SUBSTRUCT // hourly data substructure for WFDATA *h float wd_taDbAvg07 // trailing 7-day avg DB (not including current day), F *h float wd_taDbAvg14 // trailing 14-day avg DB (not including current day), F *h float wd_taDbAvg31 // trailing 31-day avg DB (not including current day), F - + *h float wd_taDbAvgMonth // current month average DB, F // derived (computed) electricity TDV values // values updated at standard time day beg / same all day diff --git a/src/wfpak.cpp b/src/wfpak.cpp index a23b1613b..df1c9533c 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -410,6 +410,7 @@ friend WFILE; float wdd_taDbAvg07; // 7 day float wdd_taDbAvg14; // 14 day float wdd_taDbAvg31; // 31 day + float wdd_taDbAvgMonth; // this month mean dry bulb air temp, F // TDV elect statistics float wdd_tdvElecPk; // peak for cur day @@ -565,6 +566,7 @@ friend struct WDSLRDAY; void wdy_Stats( int jDay, double& taDbMean, double& taDbMax, double& tdvElecMean, double& tdvElecMax, UCH tdvElecHrRank[ 24]) const; float wdy_TaDbAvg( int jDay1, int jDay2); + float wdy_TaDbAvgMonth( int month, const int* monthLenghts ); #if 0 RC wdy_PrepareWDSLRDAY( WDSLRDAY& wdsd, int dayTy, int jDay); #endif @@ -665,7 +667,7 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. int iDay; int jDay = 0; for (iMon=1; iMon<=12; iMon++) - { int monLen = monLens[ iMon] + (wdy_isLeap && iMon==2); + { int monLen = monLens[ iMon] + (wdy_isLeap && iMon==2); for (iDay=0; iDaywdd_taDbAvgMonth; wdd.wdd_tGrnd = CalcGroundTemp( jDay, // day of year wdy_taDbAvg[ 0], // air temp annual mean, F @@ -740,6 +748,7 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. if (wdd.wdd_tMains < wdy_tMainsMin) wdy_tMainsMin = wdd.wdd_tMains; } + monthDayStart = monthDayEnd; wdy_tMainsAvg[ 0] += wdy_tMainsAvg[ iMon]; wdy_tMainsAvg[ iMon] /= monLen; } @@ -807,6 +816,19 @@ float WDYEAR::wdy_TaDbAvg( // multi-day average dry bulb return float( taDbSum / (jDay2 - jDay1 + 1)); } // WDYEAR::wdy_TaDbAvg //----------------------------------------------------------------------------- +float WDYEAR::wdy_TaDbAvgMonth( + int month, // Month of the year, this should be between 1 and 13 + const int* monthLenghts) // Array containing the length of each month should be of size 13 +// Returns: the average dry bulb value for given month +{ + int startMonthDay = 0; + for (int currentMonth = 1; currentMonth < month; currentMonth++) { + startMonthDay += *(monthLenghts+currentMonth) + (wdy_isLeap && currentMonth == 2); + } + int endMonthDay = startMonthDay + *(monthLenghts + month); + return wdy_TaDbAvg(startMonthDay, endMonthDay); +} +//----------------------------------------------------------------------------- RC WDYEAR::wdy_TransferHr( // transfer cached data to application int jDay, // day sought (1-365/366) // caller handles leap year issues (see wf_Read() WF_USELEAP) @@ -1283,6 +1305,7 @@ void WDDAY::wdd_Init() wdd_taDbAvg07 = 0.f; wdd_taDbAvg14 = 0.f; wdd_taDbAvg31 = 0.f; + wdd_taDbAvgMonth = 0.f; wdd_tdvElecPk = 0.f; wdd_tdvElecPkRank = 0; @@ -1346,6 +1369,7 @@ void WDHR::wd_SetDayValues( // set daily members for this hour wd_taDbAvg07 = wdd.wdd_taDbAvg07; wd_taDbAvg14 = wdd.wdd_taDbAvg14; wd_taDbAvg31 = wdd.wdd_taDbAvg31; + wd_taDbAvgMonth = wdd.wdd_taDbAvgMonth; wd_tGrnd = wdd.wdd_tGrnd; wd_tMains = wdd.wdd_tMains; wd_tdvElecPk = wdd.wdd_tdvElecPk; @@ -1368,6 +1392,7 @@ void WDHR::wd_SetDayValuesIfMissing( // set missing daily members SETIF( wd_taDbAvg07, wdd.wdd_taDbAvg07) SETIF( wd_taDbAvg14, wdd.wdd_taDbAvg14) SETIF( wd_taDbAvg31, wdd.wdd_taDbAvg31) + SETIF( wd_taDbAvgMonth, wdd.wdd_taDbAvgMonth) SETIF( wd_tGrnd, wdd.wdd_tGrnd) SETIF( wd_tMains, wdd.wdd_tMains) SETIF( wd_tdvElecPk, wdd.wdd_tdvElecPk) diff --git a/test/OUTDOORDRYBULB.cse b/test/OUTDOORDRYBULB.cse new file mode 100644 index 000000000..7c31f12aa --- /dev/null +++ b/test/OUTDOORDRYBULB.cse @@ -0,0 +1,34 @@ +//WfName="Boulder.epw" +WfName="Bishop.epw" + + REPORT + rpType=UDT + rpCpl = 200 + reportcol colVal=$Month colHead="Month" + reportcol colVal=@weatherNextHour.taDbAvgMonth colhead="Outdoor Drybulb monthly average" + rpFreq=DAY + rpDayBeg=Jan 1 + rpDayEnd=Dec 31 + endreport + +//EXPORTFILE "OutdoorDryBulbHOUR" +// xfFileName="OutdoorDryBulbHOUR" +// xfFileStat=OVERWRITE + +//EXPORT exExportFile="OutdoorDryBulbHOUR" exType=UDT exFreq=HOUR exTitle="Drybulb" exDayBeg=jan 1 exDayEnd=dec 31 exHeader=ColumnsOnly +// ExportCol colhead="Day" colVal=@Top.dateStr +// ExportCol colhead="Hour" colVal=@Top.iHr +// ExportCol colhead="Outdoor Drybulb" colVal=@Top.tDbOHrAv +// ExportCol colhead="Outdoor Drybulb monthly average" colVal=@weatherNextHour.taDbAvgMonth + +//EXPORTFILE "OutdoorDryBulbMONTH" +// xfFileName="OutdoorDryBulbMONTHLY" +// xfFileStat=OVERWRITE + +//EXPORT exExportFile="OutdoorDryBulbMONTH" exType=UDT exFreq=MONTH exTitle="Drybulb" exDayBeg=jan 1 exDayEnd=dec 31 exHeader=ColumnsOnly +// ExportCol colhead="Day" colVal=@Top.dateStr +// ExportCol colhead="Hour" colVal=@Top.iHr +// ExportCol colhead="Outdoor Drybulb" colVal=@Top.tDbOHrAv +// ExportCol colhead="Outdoor Drybulb monthly average" colVal=@weatherNextHour.taDbAvgMonth + +RUN \ No newline at end of file