Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/CGWTHR.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -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
//===========================================================================
Expand Down
34 changes: 30 additions & 4 deletions src/CNCULT.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
48 changes: 33 additions & 15 deletions src/CNCULT3.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
//=============================================================================
Expand Down Expand Up @@ -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++)
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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.;
}
Expand All @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -3043,7 +3052,6 @@ x printf( "Hit\n");
break;
}


case C_CONVMODELCH_INPUT:
sb_hcNat = 1.f;
sb_hcFrc = 0.f;
Expand Down Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions src/CNDTYPES.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 6 additions & 16 deletions src/CNLOADS.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);

Expand Down
6 changes: 5 additions & 1 deletion src/CNRECS.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -1177,6 +1179,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;"
Expand Down Expand Up @@ -1267,6 +1270,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).
Expand Down
1 change: 1 addition & 0 deletions src/DHWCalc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 2 additions & 8 deletions src/Foundation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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];
Expand Down
Loading