From d88ac0b93ca09405cb33ddf09674031bef9f9f10 Mon Sep 17 00:00:00 2001 From: galanca Date: Mon, 17 Apr 2023 18:10:43 -0600 Subject: [PATCH 1/6] Create wdy_TaDbAvgMth method to calculate a given month dry bulb temperature. --- src/CNRECS.DEF | 2 +- src/wfpak.cpp | 25 ++++++++++++++++++++++--- test/OUTDOORDRYBULB.cse | 24 ++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 test/OUTDOORDRYBULB.cse diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index 897c104ad..1b43e319f 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_taDbAvgMth // 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..2afc576fe 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_taDbAvgMth; // 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_TaDbAvgMth( int month, const int* monthLenghts ); #if 0 RC wdy_PrepareWDSLRDAY( WDSLRDAY& wdsd, int dayTy, int jDay); #endif @@ -661,11 +663,11 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdy_tMainsMin = 999.f; int yrDays = wdy_YrDays(); // TODO: handle leap year - static const int monLens[ 13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; + static const int monLens[ 13] = { 0,31,28 + wdy_isLeap,31,30,31,30,31,31,30,31,30,31 }; 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; iDay Date: Mon, 17 Apr 2023 18:20:11 -0600 Subject: [PATCH 2/6] Fix method name. --- src/wfpak.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wfpak.cpp b/src/wfpak.cpp index 2afc576fe..c2153fa8a 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -667,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]; for (iDay=0; iDay Date: Mon, 24 Apr 2023 07:32:23 -0600 Subject: [PATCH 3/6] Change name of taDbAvgMth to taDbAvgMonth. --- src/CNRECS.DEF | 2 +- src/wfpak.cpp | 23 ++++++++++++----------- test/OUTDOORDRYBULB.cse | 4 ++-- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index 1b43e319f..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_taDbAvgMth // current month average DB , 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 c2153fa8a..46fc2a72f 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -410,7 +410,7 @@ friend WFILE; float wdd_taDbAvg07; // 7 day float wdd_taDbAvg14; // 14 day float wdd_taDbAvg31; // 31 day - float wdd_taDbAvgMth; // this month mean dry bulb air temp, F + float wdd_taDbAvgMonth; // this month mean dry bulb air temp, F // TDV elect statistics float wdd_tdvElecPk; // peak for cur day @@ -566,7 +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_TaDbAvgMth( int month, const int* monthLenghts ); + float wdy_TaDbAvgMonth( int month, const int* monthLenghts ); #if 0 RC wdy_PrepareWDSLRDAY( WDSLRDAY& wdsd, int dayTy, int jDay); #endif @@ -663,11 +663,11 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdy_tMainsMin = 999.f; int yrDays = wdy_YrDays(); // TODO: handle leap year - static const int monLens[ 13] = { 0,31,28 + wdy_isLeap,31,30,31,30,31,31,30,31,30,31 }; + static const int monLens[ 13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int iDay; int jDay = 0; for (iMon=1; iMon<=12; iMon++) - { int monLen = monLens[ iMon]; + { int monLen = monLens[ iMon] + (wdy_isLeap && iMon==2); for (iDay=0; iDay Date: Mon, 24 Apr 2023 08:14:58 -0600 Subject: [PATCH 4/6] Modify calcualtion of TaDbAvgMonth so that a function is not require. --- src/wfpak.cpp | 7 +++++-- test/OUTDOORDRYBULB.cse | 42 +++++++++++++++++++++++++---------------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/wfpak.cpp b/src/wfpak.cpp index 46fc2a72f..4d6e1f0be 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -714,9 +714,11 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. jDay = 0; WDDAY* wddRank[366]; // pointers to days re rank sort wddRank[365] = NULL; // insurance, unused unless leap year + int monthDayStart{ 0 }, monthDayEnd{ 0 }; for (iMon=1; iMon<=12; iMon++) { int monLen = monLens[ iMon] + (wdy_isLeap && iMon == 2); - float TaDbAvgMonth = wdy_TaDbAvgMonth(iMon, monLens); + monthDayEnd += monLen; + float TaDbAvgMonth = wdy_TaDbAvg(monthDayStart, monthDayEnd);//wdy_TaDbAvgMonth(iMon, monLens); for (iDay=0; iDay Date: Mon, 24 Apr 2023 08:46:40 -0600 Subject: [PATCH 5/6] Fix last day of the month not getting the correct average. --- src/wfpak.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wfpak.cpp b/src/wfpak.cpp index 4d6e1f0be..0277a0c84 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -715,6 +715,7 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. WDDAY* wddRank[366]; // pointers to days re rank sort wddRank[365] = NULL; // insurance, unused unless leap year int monthDayStart{ 0 }, monthDayEnd{ 0 }; + float prevTaDbAvgMonth{ 0 }; for (iMon=1; iMon<=12; iMon++) { int monLen = monLens[ iMon] + (wdy_isLeap && iMon == 2); monthDayEnd += monLen; @@ -728,7 +729,7 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdd.wdd_taDbAvg07 = wdy_TaDbAvg( jDay-7, jDay-1); wdd.wdd_taDbAvg14 = wdy_TaDbAvg( jDay-14, jDay-1); wdd.wdd_taDbAvg31 = wdy_TaDbAvg( jDay-31, jDay-1); - wdd.wdd_taDbAvgMonth = TaDbAvgMonth; + wdd.wdd_taDbAvgMonth = jDay - 1 != monthDayStart? TaDbAvgMonth: prevTaDbAvgMonth; wdd.wdd_tGrnd = CalcGroundTemp( jDay, // day of year wdy_taDbAvg[ 0], // air temp annual mean, F @@ -747,6 +748,7 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdy_tMainsMin = wdd.wdd_tMains; } monthDayStart = monthDayEnd; + prevTaDbAvgMonth = TaDbAvgMonth; wdy_tMainsAvg[ 0] += wdy_tMainsAvg[ iMon]; wdy_tMainsAvg[ iMon] /= monLen; } From cf9ee870b9935d66ebb497dafeeff4b9234a27ee Mon Sep 17 00:00:00 2001 From: galanca Date: Mon, 24 Apr 2023 09:12:35 -0600 Subject: [PATCH 6/6] Remove prevTaDbAvgMonth. --- src/wfpak.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wfpak.cpp b/src/wfpak.cpp index 0277a0c84..df1c9533c 100644 --- a/src/wfpak.cpp +++ b/src/wfpak.cpp @@ -715,7 +715,6 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. WDDAY* wddRank[366]; // pointers to days re rank sort wddRank[365] = NULL; // insurance, unused unless leap year int monthDayStart{ 0 }, monthDayEnd{ 0 }; - float prevTaDbAvgMonth{ 0 }; for (iMon=1; iMon<=12; iMon++) { int monLen = monLens[ iMon] + (wdy_isLeap && iMon == 2); monthDayEnd += monLen; @@ -729,7 +728,9 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdd.wdd_taDbAvg07 = wdy_TaDbAvg( jDay-7, jDay-1); wdd.wdd_taDbAvg14 = wdy_TaDbAvg( jDay-14, jDay-1); wdd.wdd_taDbAvg31 = wdy_TaDbAvg( jDay-31, jDay-1); - wdd.wdd_taDbAvgMonth = jDay - 1 != monthDayStart? TaDbAvgMonth: prevTaDbAvgMonth; + wdd.wdd_taDbAvgMonth = jDay == 1 || jDay - 1 != monthDayStart ? + TaDbAvgMonth : + wddRank[ jDay-2]->wdd_taDbAvgMonth; wdd.wdd_tGrnd = CalcGroundTemp( jDay, // day of year wdy_taDbAvg[ 0], // air temp annual mean, F @@ -748,7 +749,6 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. wdy_tMainsMin = wdd.wdd_tMains; } monthDayStart = monthDayEnd; - prevTaDbAvgMonth = TaDbAvgMonth; wdy_tMainsAvg[ 0] += wdy_tMainsAvg[ iMon]; wdy_tMainsAvg[ iMon] /= monLen; }