From 7ac4f5b6788151f8b890081008033be1f6225492 Mon Sep 17 00:00:00 2001 From: Chip Barnaby Date: Thu, 27 Feb 2020 16:12:22 -0500 Subject: [PATCH 1/3] sb_zi fixes; XSURF cleanup --- src/CNCULT.CPP | 34 ++++++++++++++++++++++++++++---- src/CNCULT3.CPP | 48 +++++++++++++++++++++++++++++++--------------- src/CNLOADS.CPP | 22 ++++++--------------- src/CNRECS.DEF | 2 ++ src/Foundation.cpp | 10 ++-------- 5 files changed, 73 insertions(+), 43 deletions(-) diff --git a/src/CNCULT.CPP b/src/CNCULT.CPP index 8e1c7e2bb..27789ffa8 100644 --- a/src/CNCULT.CPP +++ b/src/CNCULT.CPP @@ -580,6 +580,10 @@ RC SFI::sf_CkfWINDOW( options; RC rc = RCOK; sfClass = sfcWINDOW; + FixUp(); +#if defined( _DEBUG) + Validate(); +#endif x.xs_modelr = C_SFMODELCH_QUICK; return rc; } // SFI::sf_ChkWINDOW @@ -647,6 +651,11 @@ RC SFI::sf_CkfDOOR( { options; sfClass = sfcDOOR; // assign class + FixUp(); +#if defined( _DEBUG) + Validate(0x100); +#endif + RC rc = RCOK; // sf_Ckf: require construction or u value, not both @@ -716,9 +725,13 @@ RC SFI::sf_CkfSURF( // surface checker { BOOL bRunCheck = (options&1) != 0; sfClass = sfcSURF; + if (options & 1) + { + FixUp(); #if defined( _DEBUG) - Validate(); + Validate(0x100); #endif + } RC rc = RCOK; BOO xcSet = IsSet( SFX( SFEXCND)); // nz if sfExCnd given by user (a choice type: no exprs @@ -1045,14 +1058,27 @@ CULT() /*------------------------ PERIM command (for zone) ------------------------ + Any number allowed. + Input now to PRI; later XSURFs are chained to ZNR record. */ +//----------------------------------------------------------------------------- +RC prStarCkf(CULT *c, /*SFI* */ void *p, void *p2, void *p3) /*ARGSUSED*/ - Any number allowed. - Input now to PRI; later XSURFs are chained to ZNR record. */ +// called at end of surface object entry. +// ALSO called from sf_topSf1() at RUN, to issue msgs otherwise lost +// if surface is part of DEFTYPE ZONE and not ALTERed at TYPE use +// (suppress msgs here during deftype if correctible at TYPE use). -static CULT perT[] = //------------------------------------ PERIM command table +// ONLY argument 'p' is used. +{ + int options = c == NULL; // sf_topSf1 call has no CULT + return ((PRI*)p)->pr_Ckf(options); +} // sfStarCkf +//----------------------------------------------------------------------------- +static CULT perT[] = { // id cs fn f uc evf ty b dfls p2 ckf //-------- ---- ------------------- ------------- -- ------ ----- ------ -------------------- --- ---- +CULT( "*", STAR, 0, 0, 0, 0, 0, 0, 0.f, N, prStarCkf), CULT( "*", STAR, 0, 0, 0, 0, 0, 0, 0.f, N, N), CULT( "prZone", DAT, PRI_OWNTI, NO_INP|RDFLIN, 0, 0, TYREF, &ZiB, 0.f, N, N), //TYIREF-->TYREF 10-9-92 CULT( "prXtype", DAT, PRI_X+XSURF_TY, NO_INP, 0, 0, TYSI, 0, v CTPERIM,0.f, N, N), //CTPERIM: cnguts.h. diff --git a/src/CNCULT3.CPP b/src/CNCULT3.CPP index d346d76b7..084ec764d 100644 --- a/src/CNCULT3.CPP +++ b/src/CNCULT3.CPP @@ -2101,6 +2101,17 @@ PRI::PRI( basAnc* b, TI i, SI noZ /*=0*/) // called from basAnc::reAl() and this c'tor, Copy() { x.xs_Init( this); } // PRI::FixUp +//----------------------------------------------------------------------------- +RC PRI::pr_Ckf( + int options) // 1 +{ + RC rc = RCOK; + FixUp(); + + return rc; +} // PRI::pr_Ckf +/////////////////////////////////////////////////////////////////////////////// + //============================================================================= XSRAT::XSRAT( basAnc* b, TI i, SI noZ /*=0*/) : record( b, i, noZ) @@ -2133,7 +2144,7 @@ XSRAT::XSRAT( basAnc* b, TI i, SI noZ /*=0*/) rc |= errCrit( WRN, "XSRAT::Validate: Bad XSURF pParent"); } if (rc == RCOK) - RC rc = x.xs_Validate( options); + rc = x.xs_Validate( options); return rc; } // XSRAT::Validate //============================================================================= @@ -2239,8 +2250,6 @@ RC XSURF::xs_Validate( { if (xs_msi) rc |= errCrit( WRN, "XSURF '%s': Unexpected mass %d for non-CTMXWALL", xs_Name(), xs_msi); } - - } // ASHWAT back pointer should always be good if present for (int iFA=0; iFA<2; iFA++) @@ -2407,8 +2416,10 @@ void XSURF::xs_SetRunConstants() } #endif - xs_sbcI.sb_SetRunConstants( dbPrint); - xs_sbcO.sb_SetRunConstants( dbPrint); + if (!xs_IsPerim()) + { xs_sbcI.sb_SetRunConstants(dbPrint); + xs_sbcO.sb_SetRunConstants(dbPrint); + } xs_DeleteFENAW(); // insurance if (xs_IsASHWAT()) @@ -2661,15 +2672,16 @@ void SBC::sb_SetCoeffs( // set convective and radiant coefficients // NOTE: Some values pre-set in sb_SetRunConstants for some cases. // Do not add general inits here w/o review - - if (sb_zi) // if exposed to zone + if (sb_pXS->xs_IsPerim()) + sb_qrAbs = 0.; + else if (sb_zi) // if exposed to zone { // boundary is adjacent to zone // sb_txa, sb_txr set at end of prior step - if (sb_pXS->xs_ty != CTKIVA) + if (!sb_pXS->xs_IsKiva()) { sb_HCZone(); // convection sb_hxa = sb_hcMult * (sb_hcNat + sb_hcFrc); - sb_hxr = sb_frRad*pow3(DegFtoR(0.5*(sb_tSrf + sb_txr))); + sb_hxr = sb_frRad * pow3(DegFtoR(0.5*(sb_tSrf + sb_txr))); } sb_qrAbs = area > 0. ? sb_sgTarg.st_tot / area : 0.; } @@ -2693,7 +2705,7 @@ void SBC::sb_SetCoeffs( // set convective and radiant coefficients + sb_cTGrnd * Wthr.d.wd_tGrnd) * sb_rGrnd; sb_txr = sb_txa; // no radiation, set sb_txr as insurance } - else if (sb_pXS->sfExCnd==C_EXCNDCH_ADIABATIC) + else if (sb_pXS->sfExCnd==C_EXCNDCH_ADIABATIC || sb_pXS->xs_IsPerim()) { sb_hcNat = sb_hcFrc = sb_hxr = sb_hxa = 0.; } else @@ -2980,16 +2992,13 @@ x printf( "Hit\n"); } case C_CONVMODELCH_TARP: - { - - sb_hcNat = sb_hcConst[TD>0.] * pow(fabs(TD), 1. / 3.); + { sb_hcNat = sb_hcConst[TD>0.] * pow(fabs(TD), 1. / 3.); sb_hcFrc = 0.f; break; } case C_CONVMODELCH_MILLS: { - // get nat conv h for underside of roof construction: // Ref: A.F. Mills, "Heat Transfer", '92; Eq 4.85 & 4.86. // applied to hot all roofs facing downward, and to cold roof facing downward if Theta < 60 deg. @@ -3043,7 +3052,6 @@ x printf( "Hit\n"); break; } - case C_CONVMODELCH_INPUT: sb_hcNat = 1.f; sb_hcFrc = 0.f; @@ -3246,6 +3254,16 @@ TI XSURF::xs_GetZi( // get zone idx return zi; } // XSURF::xs_GetZi //----------------------------------------------------------------------------- +int XSURF::xs_IsPerim() const // nz iff this is a PERIMETER +{ + return xs_ty == CTPERIM; +} // XSURF::xs_IsPerim +//----------------------------------------------------------------------------- +int XSURF::xs_IsKiva() const // nz iff surface uses Kiva ground conduction +{ + return xs_ty == CTKIVA; +} // XSURF::xs_IsKiva +//----------------------------------------------------------------------------- int XSURF::xs_IsASHWAT() const // nz iff this is an ASHWAT window { return xs_fenModel == C_FENMODELCH_ASHWAT; diff --git a/src/CNLOADS.CPP b/src/CNLOADS.CPP index e87e67f7d..d28383aaf 100644 --- a/src/CNLOADS.CPP +++ b/src/CNLOADS.CPP @@ -4418,17 +4418,12 @@ static RC loadsSurfaces( // surface runtime simulation TMRSTART( TMR_AWTOT); // total ASHWAT time (incl setup) // see also TMR_AWCALC - RLUP (XsB, xr) - { if (xr->x.xs_IsASHWAT()) - rc |= xr->x.xs_ASHWAT(); - } + RLUPC(XsB, xr, xr->x.xs_IsASHWAT()) + rc |= xr->x.xs_ASHWAT(); TMRSTOP( TMR_AWTOT); - RLUP(XsB, xr) - { if (xr->x.xs_ty != CTMXWALL) - { rc |= xr->x.xs_SubhrQS(); - } - } + RLUPC(XsB, xr, xr->x.xs_ty != CTMXWALL) + rc |= xr->x.xs_SubhrQS(); } float dur, tDbO; @@ -4444,16 +4439,11 @@ static RC loadsSurfaces( // surface runtime simulation // masses TMRSTART( TMR_COND); MSRAT* mse; - RLUP( MsR, mse) // for mse = MSRAT record 1 to n (cnglob.h) - { - if (subhrly != mse->isSubhrly) - continue; // skip masses for wrong interval - - if (mse->ms_isFD) + RLUPC( MsR, mse, subhrly == mse->isSubhrly) // do matching interval + { if (mse->ms_isFD) mse->ms_StepFD(); // FD (forward_difference) model is only subhourly else mse->ms_StepMX( dur, tDbO); - } // mass loop TMRSTOP( TMR_COND); diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index 9b5b5c89b..dd425ba67 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -1177,6 +1177,7 @@ RECORD XSURF "xsurf sub" *SUBSTRUCT // for PRI, SFI, XSRAT. *declare "int xs_HasControlledShade() const;" *declare "int xs_IsDelayed() const { return xs_msi != 0; }" *declare "int xs_IsKiva() const;" + *declare "int xs_IsPerim() const;" *declare "int xs_CanBeSGTarget() const;" *declare "int xs_Class() const;" *declare "int xs_TyFromTilt() const;" @@ -1267,6 +1268,7 @@ RECORD PRI "perimeter" *RAT // perimeter input RAT *excon *ovrcopy + *declare "RC pr_Ckf( int options);" *declare "void FixUp();" // virtual fixup after basAnc reAl // .ownTi (base class) is zone subscript *r *hide *noname *nest XSURF x // hs info (struct above). diff --git a/src/Foundation.cpp b/src/Foundation.cpp index 6f912a9ec..1701434ce 100644 --- a/src/Foundation.cpp +++ b/src/Foundation.cpp @@ -163,15 +163,9 @@ ZNR* KIVA::kv_GetZone() const { return ZrB.GetAt(XsB.GetAt(kv_floor)->x.xs_sbcI.sb_zi); // Zone at inside surface } - -int XSURF::xs_IsKiva() const -{ - return xs_ty == CTKIVA; -} - RC XSRAT::xr_ApplyKivaResults() { - if (x.xs_ty == CTKIVA) + if (x.xs_IsKiva()) { auto& sbc = x.xs_sbcI; @@ -192,7 +186,7 @@ RC XSRAT::xr_ApplyKivaResults() RC XSRAT::xr_KivaZoneAccum() { - if (x.xs_ty == CTKIVA) + if (x.xs_IsKiva()) { auto& sbc = x.xs_sbcI; ZNR& z = ZrB[sbc.sb_zi]; From ce855683237cbecc1b509439cb2b256dc2f262c5 Mon Sep 17 00:00:00 2001 From: Chip Barnaby Date: Wed, 4 Mar 2020 09:00:56 -0500 Subject: [PATCH 2/3] Add HPWHSim Colmax CxA-20 --- src/CNDTYPES.DEF | 1 + src/DHWCalc.cpp | 1 + src/WFPAK.CPP | 4 ++-- vendor/HPWHsim | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/CNDTYPES.DEF b/src/CNDTYPES.DEF index b659e03f8..d5497f669 100644 --- a/src/CNDTYPES.DEF +++ b/src/CNDTYPES.DEF @@ -405,6 +405,7 @@ PIPESEGP -- "class PIPESEG*" 4 none AOSMITHSHPT50 "AOSmithSHPT50" // AOSmith add'l models (added 3-24-2017) AOSMITHSHPT66 "AOSmithSHPT66" AOSMITHSHPT80 "AOSmithSHPT80" + COLMACCXA20 "ColmacCxA20" // Colmac CxA-20 modular HPWH } *choicb DHWEUCH { // hot end uses diff --git a/src/DHWCalc.cpp b/src/DHWCalc.cpp index 4a95ee1fd..97fc30e10 100644 --- a/src/DHWCalc.cpp +++ b/src/DHWCalc.cpp @@ -2159,6 +2159,7 @@ RC HPWHLINK::hw_InitPreset( // set up HPWH from model type choice : ashpTy == C_WHASHPTYCH_AOSMITHHPTU80DR ? HPWH::MODELS_AOSmithHPTU80_DR : ashpTy == C_WHASHPTYCH_SANDEN40 ? HPWH::MODELS_Sanden40 : ashpTy == C_WHASHPTYCH_SANDEN80 ? HPWH::MODELS_Sanden80 + : ashpTy == C_WHASHPTYCH_COLMACCXA20 ? HPWH::MODELS_CxA_20 : ashpTy == C_WHASHPTYCH_GE2012 ? HPWH::MODELS_GE2012 : ashpTy == C_WHASHPTYCH_GE2014 ? HPWH::MODELS_GE2014 : ashpTy == C_WHASHPTYCH_GE2014_80 ? HPWH::MODELS_GE2014_80 diff --git a/src/WFPAK.CPP b/src/WFPAK.CPP index 013b0508f..00a3cd933 100644 --- a/src/WFPAK.CPP +++ b/src/WFPAK.CPP @@ -1887,7 +1887,7 @@ RC WFILE::wf_CSWRead( // read and unpack data from CSW return rc; } // WFILE::wf_CSWRead //------------------------------------------------------------------------------ -RC WFILE::wf_TDVOpen( // open California CSW weather file +RC WFILE::wf_TDVOpen( // open California Time of Day Valuation (TDV) file const char* TDVfName, // pathName of file to open int erOp) @@ -1918,7 +1918,7 @@ RC WFILE::wf_TDVOpen( // open California CSW weather file //---------------------------------------------------------------------------- void WFILE::wf_TDVInitHdrInfo() { memset( wf_TDVFileTimeStamp, 0, sizeof( wf_TDVFileTimeStamp)); - memset( wf_TDVFileTitle, 0, sizeof( wf_TDVFileTimeStamp)); + memset( wf_TDVFileTitle, 0, sizeof( wf_TDVFileTitle)); } // WFILE::wf_TDVInitHdrInfo //---------------------------------------------------------------------------- RC WFILE::wf_TDVReadHdr( int erOp) // read / decode TDV file header diff --git a/vendor/HPWHsim b/vendor/HPWHsim index af15cf303..016fa1e27 160000 --- a/vendor/HPWHsim +++ b/vendor/HPWHsim @@ -1 +1 @@ -Subproject commit af15cf303716102cfe219eb3e1140382cee5c3c2 +Subproject commit 016fa1e27f939973f220677fb49a0ef0e18d2998 From 2d8c94656d5461e2a8b0413ed41ebb747ff964b1 Mon Sep 17 00:00:00 2001 From: Chip Barnaby Date: Wed, 4 Mar 2020 15:19:55 -0500 Subject: [PATCH 3/3] tdvElecPkRank; HPWH Colmax CxA20 model --- src/CGWTHR.CPP | 6 ++-- src/CNRECS.DEF | 4 ++- src/WFPAK.CPP | 93 +++++++++++++------------------------------------- vendor/HPWHsim | 2 +- 4 files changed, 30 insertions(+), 75 deletions(-) diff --git a/src/CGWTHR.CPP b/src/CGWTHR.CPP index dc31a048a..5a5e54138 100644 --- a/src/CGWTHR.CPP +++ b/src/CGWTHR.CPP @@ -469,9 +469,9 @@ void WDHR::wd_FillFromDESCOND( // overwrite/adjust hourly data for design condi else wd_glrad = wd_bmrad = wd_dfrad = 0.f; - // Remaining items: use weather file values - // wd_tGrnd, wd_tMains, wd_tdvElec, wd_tdvFuel, wd_tdvElecPk, wd_tdvElecAvg, - // wd_tdvElecPvPk, wd_tdvElecAvg01 + // Remaining items: use weather/tdv file values + // wd_tGrnd, wd_tMains, wd_tdvElec, wd_tdvFuel, wd_tdvElecPk, wd_tdvElecPkRank, + // wd_tdvElecAvg, wd_tdvElecPvPk, wd_tdvElecAvg01 } // WDHR::wd_FillFromDESCOND //=========================================================================== diff --git a/src/CNRECS.DEF b/src/CNRECS.DEF index dd425ba67..c238fb7bd 100644 --- a/src/CNRECS.DEF +++ b/src/CNRECS.DEF @@ -821,9 +821,11 @@ RECORD WDHR "wfdata sub" *SUBSTRUCT // hourly data substructure for WFDATA // derived (computed) electricity TDV values // values updated at standard time day beg / same all day - // *except* wd_tdvElecPk is updated at hr=23 iff DST + // *except* at hr=23 iff DST *h float wd_tdvElecPk // current day peak TDVelec (includes future hours) // updated at hr=23 iff DST + *h SI wd_tdvElecPkRank // current day wd_tdvElecPk rank within year (1-365/366) + // (largest wd_tdvElecPk=1, next=2, etc.) *h float wd_tdvElecAvg // current day avg TDVelec (includes future hours) *h float wd_tdvElecPvPk // previous-day peak TDVelec *h float wd_tdvElecAvg01 // previous-day avg TDVelec (not including current day) diff --git a/src/WFPAK.CPP b/src/WFPAK.CPP index 00a3cd933..b15230c82 100644 --- a/src/WFPAK.CPP +++ b/src/WFPAK.CPP @@ -334,42 +334,6 @@ void WDHR::wd_Init( // initialize all members } } // WDHR::wd_Init //------------------------------------------------------------------------------ -#if 0 -void WDHR::wd_ClearDerived( // init derived values - int options /*=0*/) // options - // 0: init to 0. - // 1: init all to "missing" (-999.f) - // 2: init all to UNSET -{ - float unsetf; - NANDAT unset( UNSET); - V unsetf = V unset; - int bUnset = ISUNSET( unset); - int bUnsetf = ISUNSET( unsetf); - float v; - if (options == 2) - v = unsetf; - else - v = options==0 ? 0.f : -999.f; - - wd_taDbPk = - wd_taDbAvg = - wd_taDbPvPk = - wd_taDbAvg01 = - wd_taDbAvg07 = - wd_taDbAvg14 = - wd_taDbAvg31 = - - wd_tdvElecPk = - wd_tdvElecAvg = - wd_tdvElecPvPk = - wd_tdvElecAvg01 = - - wd_tGrnd = - wd_tMains = v; -} // WDHR::wd_ClearDerived -#endif -//---------------------------------------------------------------------------- WDHR& WDHR::Copy( const WDHR& wdhr, // source int options /*=0*/) // option bits @@ -447,6 +411,7 @@ friend WFILE; // TDV elect statistics float wdd_tdvElecPk; // peak for cur day + int wdd_tdvElecPkRank; // rank within year of wdd_tdvElecPk (1-366) float wdd_tdvElecAvg; // avg for cur day float wdd_tdvElecPvPk; // peak for prior day float wdd_tdvElecAvg01; // avg for print day @@ -458,6 +423,11 @@ public: void wdd_Init(); int wdd_Compare( const WDHR* wdHr) const; void wdd_Set24( WDHR* wdHr, int options=0) const; + static int wdd_TdvPkCompare(const void* p1, const void* p2) + { const WDDAY* pD1 = *(WDDAY **)p1; + const WDDAY* pD2 = *(WDDAY **)p2; + return -1*LTEQGT( pD1->wdd_tdvElecPk, pD2->wdd_tdvElecPk); + } }; // class WDDAY //---------------------------------------------------------------------------- struct VHR // sort helper for wdy_Stats @@ -510,12 +480,8 @@ RC WFILE::wf_FillWDYEAR( // read and unpack weather data for entire file taDbAvgYr = wf_pWDY->wdy_taDbAvg[ 0]; tMainsAvgYr = wf_pWDY->wdy_tMainsAvg[ 0]; -#if 1 // always fill, 3-5-2014 - int options = 0; -#else -x int options = wFileFormat == CSW; // CSW: fill missing only -x // others: fill always -#endif + // fill hour values from daily + int options = 0; // wdd_Set24: fill always int yrLen = wf_pWDY->wdy_isLeap ? 366 : 365; int jD; for (jD=1; jD <= yrLen; jD++) @@ -608,11 +574,14 @@ RC WDYEAR::wdy_Fill( // read weather data for entire file; compute averages etc. float taDbRngYr // range based on monthly means = VMax( wdy_taDbAvg+1, 12) - VMin( wdy_taDbAvg+1, 12); jDay = 0; + WDDAY* wddRank[366]; // pointers to days re rank sort + wddRank[365] = NULL; // insurance, unused unless leap year for (iMon=1; iMon<=12; iMon++) { int monLen = monLens[ iMon] + (wdy_isLeap && iMon==2); for (iDay=0; iDaywdd_tdvElecPkRank = i; + return rc; } // WDYEAR::wdy_Fill //----------------------------------------------------------------------------- @@ -707,46 +683,21 @@ RC WDYEAR::wdy_TransferHr( // transfer cached data to application // Ignored if WF_DSNDAY|WF_FORCEDREAD { pwd->Copy( wdy_Hr( jDay, iHr), (erOp&WF_SAVESLRGEOM) != 0); -#if 1 if (erOp&WF_DSTFIX) { if (iHr == 23) { // hr 23: clock time is beg of 1st hour of next day // use selected daily values from next day WDDAY& wdd = wdy_Day( jDay+1); -#if 1 pwd->wd_taDbPvPk = wdd.wdd_taDbPvPk; pwd->wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk; -#else - pwd->wd_SetDayValues( wdd); -#endif } pwd->wd_ShiftTdvElecHrRankForDST(); // shift TDV rank hrs to DST // to be consistent with $hour // in expressions } -#elif 0 - if ( iHr == 23 && (erOp&WF_DSTFIX)) - { WDDAY& wdd = wf_pWDY->wdy_Day( jDay+1); - pwd->wd_taDbPk = wdd.wdd_taDbPk; - pwd->wd_taDbAvg = wdd.wdd_taDbAvg; - pwd->wd_taDbPvPk = wdd.wdd_taDbPvPk; - pwd->wd_taDbAvg01 = wdd.wdd_taDbAvg01; - pwd->wd_taDbAvg07 = wdd.wdd_taDbAvg07; - pwd->wd_taDbAvg14 = wdd.wdd_taDbAvg14; - pwd->wd_taDbAvg31 = wdd.wdd_taDbAvg31; - pwd->wd_tGrnd = wdd.wdd_tGrnd; - pwd->wd_tMains = wdd.wdd_tMains; -#if 0 - pwd->wd_tdvElecPk = wdd.wdd_tdvElecPk; - pwd->wd_tdvElecAvg = wdd.wdd_tdvElecAvg; - pwd->wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk; - pwd->wd_tdvElecAvg01= wdd.wdd_tdvElecAvg01; -#endif - } -#endif - return RCOK; -} // WDYEAR::wd_TransferHr -//----------------------------------------------------------------------------- + return RCOK; +} // WDYEAR::wdy_TransferHr +//============================================================================= void WDDAY::wdd_Init() { wdd_taDbPk = 0.f; @@ -760,6 +711,7 @@ void WDDAY::wdd_Init() wdd_taDbAvg31 = 0.f; wdd_tdvElecPk = 0.f; + wdd_tdvElecPkRank = 0; wdd_tdvElecAvg = 0.f; wdd_tdvElecPvPk = 0.f; wdd_tdvElecAvg01 = 0.f; @@ -825,6 +777,7 @@ void WDHR::wd_SetDayValues( // set daily members for this hour wd_tGrnd = wdd.wdd_tGrnd; wd_tMains = wdd.wdd_tMains; wd_tdvElecPk = wdd.wdd_tdvElecPk; + wd_tdvElecPkRank = wdd.wdd_tdvElecPkRank; wd_tdvElecAvg = wdd.wdd_tdvElecAvg; wd_tdvElecPvPk = wdd.wdd_tdvElecPvPk; wd_tdvElecAvg01= wdd.wdd_tdvElecAvg01; diff --git a/vendor/HPWHsim b/vendor/HPWHsim index 016fa1e27..2036d468b 160000 --- a/vendor/HPWHsim +++ b/vendor/HPWHsim @@ -1 +1 @@ -Subproject commit 016fa1e27f939973f220677fb49a0ef0e18d2998 +Subproject commit 2036d468ba667e0fbdda3cc20a34f125b589409b