Skip to content

Commit 2d8c946

Browse files
committed
tdvElecPkRank; HPWH Colmax CxA20 model
1 parent ce85568 commit 2d8c946

File tree

4 files changed

+30
-75
lines changed

4 files changed

+30
-75
lines changed

src/CGWTHR.CPP

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,9 +469,9 @@ void WDHR::wd_FillFromDESCOND( // overwrite/adjust hourly data for design condi
469469
else
470470
wd_glrad = wd_bmrad = wd_dfrad = 0.f;
471471

472-
// Remaining items: use weather file values
473-
// wd_tGrnd, wd_tMains, wd_tdvElec, wd_tdvFuel, wd_tdvElecPk, wd_tdvElecAvg,
474-
// wd_tdvElecPvPk, wd_tdvElecAvg01
472+
// Remaining items: use weather/tdv file values
473+
// wd_tGrnd, wd_tMains, wd_tdvElec, wd_tdvFuel, wd_tdvElecPk, wd_tdvElecPkRank,
474+
// wd_tdvElecAvg, wd_tdvElecPvPk, wd_tdvElecAvg01
475475

476476
} // WDHR::wd_FillFromDESCOND
477477
//===========================================================================

src/CNRECS.DEF

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,9 +821,11 @@ RECORD WDHR "wfdata sub" *SUBSTRUCT // hourly data substructure for WFDATA
821821

822822
// derived (computed) electricity TDV values
823823
// values updated at standard time day beg / same all day
824-
// *except* wd_tdvElecPk is updated at hr=23 iff DST
824+
// *except* at hr=23 iff DST
825825
*h float wd_tdvElecPk // current day peak TDVelec (includes future hours)
826826
// updated at hr=23 iff DST
827+
*h SI wd_tdvElecPkRank // current day wd_tdvElecPk rank within year (1-365/366)
828+
// (largest wd_tdvElecPk=1, next=2, etc.)
827829
*h float wd_tdvElecAvg // current day avg TDVelec (includes future hours)
828830
*h float wd_tdvElecPvPk // previous-day peak TDVelec
829831
*h float wd_tdvElecAvg01 // previous-day avg TDVelec (not including current day)

src/WFPAK.CPP

Lines changed: 23 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -334,42 +334,6 @@ void WDHR::wd_Init( // initialize all members
334334
}
335335
} // WDHR::wd_Init
336336
//------------------------------------------------------------------------------
337-
#if 0
338-
void WDHR::wd_ClearDerived( // init derived values
339-
int options /*=0*/) // options
340-
// 0: init to 0.
341-
// 1: init all to "missing" (-999.f)
342-
// 2: init all to UNSET
343-
{
344-
float unsetf;
345-
NANDAT unset( UNSET);
346-
V unsetf = V unset;
347-
int bUnset = ISUNSET( unset);
348-
int bUnsetf = ISUNSET( unsetf);
349-
float v;
350-
if (options == 2)
351-
v = unsetf;
352-
else
353-
v = options==0 ? 0.f : -999.f;
354-
355-
wd_taDbPk =
356-
wd_taDbAvg =
357-
wd_taDbPvPk =
358-
wd_taDbAvg01 =
359-
wd_taDbAvg07 =
360-
wd_taDbAvg14 =
361-
wd_taDbAvg31 =
362-
363-
wd_tdvElecPk =
364-
wd_tdvElecAvg =
365-
wd_tdvElecPvPk =
366-
wd_tdvElecAvg01 =
367-
368-
wd_tGrnd =
369-
wd_tMains = v;
370-
} // WDHR::wd_ClearDerived
371-
#endif
372-
//----------------------------------------------------------------------------
373337
WDHR& WDHR::Copy(
374338
const WDHR& wdhr, // source
375339
int options /*=0*/) // option bits
@@ -447,6 +411,7 @@ friend WFILE;
447411

448412
// TDV elect statistics
449413
float wdd_tdvElecPk; // peak for cur day
414+
int wdd_tdvElecPkRank; // rank within year of wdd_tdvElecPk (1-366)
450415
float wdd_tdvElecAvg; // avg for cur day
451416
float wdd_tdvElecPvPk; // peak for prior day
452417
float wdd_tdvElecAvg01; // avg for print day
@@ -458,6 +423,11 @@ public:
458423
void wdd_Init();
459424
int wdd_Compare( const WDHR* wdHr) const;
460425
void wdd_Set24( WDHR* wdHr, int options=0) const;
426+
static int wdd_TdvPkCompare(const void* p1, const void* p2)
427+
{ const WDDAY* pD1 = *(WDDAY **)p1;
428+
const WDDAY* pD2 = *(WDDAY **)p2;
429+
return -1*LTEQGT( pD1->wdd_tdvElecPk, pD2->wdd_tdvElecPk);
430+
}
461431
}; // class WDDAY
462432
//----------------------------------------------------------------------------
463433
struct VHR // sort helper for wdy_Stats
@@ -510,12 +480,8 @@ RC WFILE::wf_FillWDYEAR( // read and unpack weather data for entire file
510480
taDbAvgYr = wf_pWDY->wdy_taDbAvg[ 0];
511481
tMainsAvgYr = wf_pWDY->wdy_tMainsAvg[ 0];
512482

513-
#if 1 // always fill, 3-5-2014
514-
int options = 0;
515-
#else
516-
x int options = wFileFormat == CSW; // CSW: fill missing only
517-
x // others: fill always
518-
#endif
483+
// fill hour values from daily
484+
int options = 0; // wdd_Set24: fill always
519485
int yrLen = wf_pWDY->wdy_isLeap ? 366 : 365;
520486
int jD;
521487
for (jD=1; jD <= yrLen; jD++)
@@ -608,11 +574,14 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc.
608574
float taDbRngYr // range based on monthly means
609575
= VMax( wdy_taDbAvg+1, 12) - VMin( wdy_taDbAvg+1, 12);
610576
jDay = 0;
577+
WDDAY* wddRank[366]; // pointers to days re rank sort
578+
wddRank[365] = NULL; // insurance, unused unless leap year
611579
for (iMon=1; iMon<=12; iMon++)
612580
{ int monLen = monLens[ iMon] + (wdy_isLeap && iMon==2);
613581
for (iDay=0; iDay<monLen; iDay++)
614582
{ jDay++;
615583
WDDAY& wdd = wdy_Day( jDay);
584+
wddRank[ jDay-1] = &wdd;
616585
// lagged average dry-bulb temps: values do not include current day
617586
// wdd.wdd_taDbAvg01 = wdy_TaDbAvg( jDay-1, jDay-1) -- see above
618587
wdd.wdd_taDbAvg07 = wdy_TaDbAvg( jDay-7, jDay-1);
@@ -638,6 +607,13 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc.
638607
}
639608
wdy_tMainsAvg[ 0] /= yrLen;
640609

610+
// sort wddRank pointers by decreasing wdd_tdvElecPk
611+
qsort( wddRank, yrLen, sizeof(const WDDAY*), WDDAY::wdd_TdvPkCompare);
612+
613+
// set wdy_day ranks via now-rank-ordered pointers
614+
for (int i = 1; i <= yrLen; i++)
615+
wddRank[ i-1]->wdd_tdvElecPkRank = i;
616+
641617
return rc;
642618
} // WDYEAR::wdy_Fill
643619
//-----------------------------------------------------------------------------
@@ -707,46 +683,21 @@ RC WDYEAR::wdy_TransferHr( // transfer cached data to application
707683
// Ignored if WF_DSNDAY|WF_FORCEDREAD
708684
{
709685
pwd->Copy( wdy_Hr( jDay, iHr), (erOp&WF_SAVESLRGEOM) != 0);
710-
#if 1
711686
if (erOp&WF_DSTFIX)
712687
{ if (iHr == 23)
713688
{ // hr 23: clock time is beg of 1st hour of next day
714689
// use selected daily values from next day
715690
WDDAY& wdd = wdy_Day( jDay+1);
716-
#if 1
717691
pwd->wd_taDbPvPk = wdd.wdd_taDbPvPk;
718692
pwd->wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk;
719-
#else
720-
pwd->wd_SetDayValues( wdd);
721-
#endif
722693
}
723694
pwd->wd_ShiftTdvElecHrRankForDST(); // shift TDV rank hrs to DST
724695
// to be consistent with $hour
725696
// in expressions
726697
}
727-
#elif 0
728-
if ( iHr == 23 && (erOp&WF_DSTFIX))
729-
{ WDDAY& wdd = wf_pWDY->wdy_Day( jDay+1);
730-
pwd->wd_taDbPk = wdd.wdd_taDbPk;
731-
pwd->wd_taDbAvg = wdd.wdd_taDbAvg;
732-
pwd->wd_taDbPvPk = wdd.wdd_taDbPvPk;
733-
pwd->wd_taDbAvg01 = wdd.wdd_taDbAvg01;
734-
pwd->wd_taDbAvg07 = wdd.wdd_taDbAvg07;
735-
pwd->wd_taDbAvg14 = wdd.wdd_taDbAvg14;
736-
pwd->wd_taDbAvg31 = wdd.wdd_taDbAvg31;
737-
pwd->wd_tGrnd = wdd.wdd_tGrnd;
738-
pwd->wd_tMains = wdd.wdd_tMains;
739-
#if 0
740-
pwd->wd_tdvElecPk = wdd.wdd_tdvElecPk;
741-
pwd->wd_tdvElecAvg = wdd.wdd_tdvElecAvg;
742-
pwd->wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk;
743-
pwd->wd_tdvElecAvg01= wdd.wdd_tdvElecAvg01;
744-
#endif
745-
}
746-
#endif
747-
return RCOK;
748-
} // WDYEAR::wd_TransferHr
749-
//-----------------------------------------------------------------------------
698+
return RCOK;
699+
} // WDYEAR::wdy_TransferHr
700+
//=============================================================================
750701
void WDDAY::wdd_Init()
751702
{
752703
wdd_taDbPk = 0.f;
@@ -760,6 +711,7 @@ void WDDAY::wdd_Init()
760711
wdd_taDbAvg31 = 0.f;
761712

762713
wdd_tdvElecPk = 0.f;
714+
wdd_tdvElecPkRank = 0;
763715
wdd_tdvElecAvg = 0.f;
764716
wdd_tdvElecPvPk = 0.f;
765717
wdd_tdvElecAvg01 = 0.f;
@@ -825,6 +777,7 @@ void WDHR::wd_SetDayValues( // set daily members for this hour
825777
wd_tGrnd = wdd.wdd_tGrnd;
826778
wd_tMains = wdd.wdd_tMains;
827779
wd_tdvElecPk = wdd.wdd_tdvElecPk;
780+
wd_tdvElecPkRank = wdd.wdd_tdvElecPkRank;
828781
wd_tdvElecAvg = wdd.wdd_tdvElecAvg;
829782
wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk;
830783
wd_tdvElecAvg01= wdd.wdd_tdvElecAvg01;

vendor/HPWHsim

0 commit comments

Comments
 (0)