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
44 changes: 35 additions & 9 deletions src/CGCOMP.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,8 @@ float TOPRAT::tp_WindPresV( // wind velocity pressure
///////////////////////////////////////////////////////////////////////////////
/*static*/ const int AFMTR_IVL::NAFCATS
= (sizeof(AFMTR_IVL) - offsetof( AFMTR_IVL, amt_total)) / sizeof(float);
// NAFCATS s/b same as AFCAT choices + 1 (for total)
static_assert(AFMTR_IVL::NAFCATS == C_AFCAT_COUNT+1, "Inconsistent AFMTR constants");
// NAFCATS s/b same as AFCAT choices + 1 (for total) - 1 (for C_AFCAT_NONE)
static_assert(AFMTR_IVL::NAFCATS == C_AFCAT_COUNT+1-1, "Inconsistent AFMTR constants");
//-----------------------------------------------------------------------------
void AFMTR_IVL::amt_Copy( // copy
const AFMTR_IVL* sIvl, // source
Expand Down Expand Up @@ -1050,14 +1050,14 @@ void IZXRAT::iz_SetupAfMtrs()
{
// Air flow category
if (!iz_CanHaveAFCat())
iz_afCat = -1;
iz_afCat = C_AFCAT_NONE;
else if (!IsSet(IZXRAT_AFCAT))
iz_afCat = iz_AfCatDefault(); // default category (may return -1)

// AFMTR ptrs: NULL if no meter specified -> no air flow accounting
// one pointer for positive flows, one for negative
iz_pAfMtr1 = iz_pAfMtr2 = NULL; // insurance
if (iz_afCat >= 0)
if (iz_afCat != C_AFCAT_NONE)
{ // set up ptrs to AFMTR(s)
const ZNR* zp;
if (iz_zi1 > 0)
Expand All @@ -1081,21 +1081,37 @@ void IZXRAT::iz_SetupAfMtrs()

} // IZXRAT::iz_SetupAfMtrs
//-----------------------------------------------------------------------------
BOOL IZXRAT::iz_IsIZUZ() const // true iff interzone connected to unconditioned
{
const ZNR* zp = ZrB.GetAtSafe(iz_zi2);
return zp && zp->zn_IsUZ();

} // IZXRAT::iz_IsIZUZ
//-----------------------------------------------------------------------------
AFCAT IZXRAT::iz_AfCatDefault() const
{
AFCAT afCat;
if (!iz_CanHaveAFCat())
afCat = -1; // not trackable
afCat = C_AFCAT_NONE; // not trackable
else if (iz_IsSysAir())
afCat = C_AFCAT_HVAC;
else if (iz_IsDuctLk())
afCat = C_AFCAT_DUCTLK;
else if (iz_IsHERV())
afCat = iz_IsHERVIZ() ? C_AFCAT_FANIZ : C_AFCAT_FANEX;
else if (iz_IsExterior())
afCat = iz_IsFixedFlow() ? C_AFCAT_FANEX : C_AFCAT_INFILEX;
afCat = C_AFCAT_FANEX;
else
afCat = iz_IsFixedFlow() ? C_AFCAT_FANIZ : C_AFCAT_INFILIZ;
{ const static int afCats[3][3] =
{ { C_AFCAT_FANEX, C_AFCAT_VNTEX, C_AFCAT_INFEX },
{ C_AFCAT_FANUZ, C_AFCAT_VNTUZ, C_AFCAT_INFUZ },
{ C_AFCAT_FANCZ, C_AFCAT_VNTCZ, C_AFCAT_INFCZ }
};
// fan / vent / infil
// Note: vent guess is approx, explicit izAFCat input may be necessary
int izMode = iz_IsFixedFlow() ? 0 : iz_MightBeNatVent() ? 1 : 2;
// exterior / uncond zone / cond zone
int izLoc = iz_IsExterior() ? 0 : iz_IsIZUZ() ? 1 : 2;
afCat = afCats[izLoc][izMode];
}

return afCat;

Expand Down Expand Up @@ -1171,7 +1187,17 @@ RC IZXRAT::iz_SetupNonAirNet() // interzone transfer one-time initialization
return RCOK;
} // IZXRAT::iz_SetupNonAirNet
//-----------------------------------------------------------------------------
bool IZXRAT::iz_MightBeNatVent() const // detect possible controlled nat vent
// returns true iff this looks like typical controlled vent (e.g. openable window)
// used re default iz_afCat
{
bool ventIsh = !iz_IsFixedFlow() && iz_a1 == 0.f && IsSet(IZXRAT_A2);

return ventIsh;
} // IZXRAT::iz_MightBeVent
//-----------------------------------------------------------------------------
bool IZXRAT::iz_HasVentEffect() const // determine whether this IZXRAT can "vent"
// can vary during run due to expressions
// returns 1 iff iz vent mode (iz_ad[ 1]) differs from infil-only iz_ad[ 0]
{
bool bVentEffect =
Expand Down
44 changes: 25 additions & 19 deletions src/CGRESULT.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -248,27 +248,33 @@ static COLDEF afMtrColdef[] =
{ "Day", 8 | 4, 2, 0, USE_NEXT_ARG, CVI },
{ "Hr", 8 | 4, 2, 0, USE_NEXT_ARG, CVI },
{ "Subhr", 8 | 4, 1, 0, USE_NEXT_ARG, CVS }, // ..
{ "Tot+", 0, 5, D, oAFMt0(amt_total), CV1 },
{ "Unkn+", 0, 5, D, oAFMt0(amt_unknown),CV1 },
{ "InfX+", 0, 5, D, oAFMt0(amt_infilEx),CV1 },
{ "VntX+", 0, 5, D, oAFMt0(amt_ventEx), CV1 },
{ "Tot+", 0, 5, D, oAFMt0(amt_total), CV1 },
{ "Unkn+", 0, 5, D, oAFMt0(amt_unknown), CV1 },
{ "InfX+", 0, 5, D, oAFMt0(amt_infEx), CV1 },
{ "VntX+", 0, 5, D, oAFMt0(amt_vntEx), CV1 },
{ "FanX+", 0, 5, D, oAFMt0(amt_fanEx), CV1 },
{ "InfZ+", 0, 5, D, oAFMt0(amt_infilIz),CV1 },
{ "VntZ+", 0, 5, D, oAFMt0(amt_ventIz), CV1 },
{ "FanZ+", 0, 5, D, oAFMt0(amt_fanIz), CV1 },
{ "Duct+", 0, 5, D, oAFMt0(amt_ductLk), CV1 },
{ "HVAC+", 0, 5, D, oAFMt0(amt_hvac), CV1 },
{ "Tot-", 0, 6, D, oAFMt1(amt_total), CV1 },
{ "Unkn-", 0, 6, D, oAFMt1(amt_unknown),CV1 },
{ "InfX-", 0, 6, D, oAFMt1(amt_infilEx),CV1 },
{ "VntX-", 0, 6, D, oAFMt1(amt_ventEx), CV1 },
{ "InfU+", 0, 5, D, oAFMt0(amt_infUz), CV1 },
{ "VntU+", 0, 5, D, oAFMt0(amt_vntUz), CV1 },
{ "FanU+", 0, 5, D, oAFMt0(amt_fanUz), CV1 },
{ "InfC+", 0, 5, D, oAFMt0(amt_infCz), CV1 },
{ "VntC+", 0, 5, D, oAFMt0(amt_vntCz), CV1 },
{ "FanC+", 0, 5, D, oAFMt0(amt_fanCz), CV1 },
{ "Duct+", 0, 5, D, oAFMt0(amt_ductLk),CV1 },
{ "HVAC+", 0, 5, D, oAFMt0(amt_hvac), CV1 },
{ "Tot-", 0, 6, D, oAFMt1(amt_total), CV1 },
{ "Unkn-", 0, 6, D, oAFMt1(amt_unknown), CV1 },
{ "InfX-", 0, 6, D, oAFMt1(amt_infEx), CV1 },
{ "VntX-", 0, 6, D, oAFMt1(amt_vntEx), CV1 },
{ "FanX-", 0, 6, D, oAFMt1(amt_fanEx), CV1 },
{ "InfZ-", 0, 6, D, oAFMt1(amt_infilIz),CV1 },
{ "VntZ-", 0, 6, D, oAFMt1(amt_ventIz), CV1 },
{ "FanZ-", 0, 6, D, oAFMt1(amt_fanIz), CV1 },
{ "Duct-", 0, 6, D, oAFMt1(amt_ductLk), CV1 },
{ "HVAC-", 0, 6, D, oAFMt1(amt_hvac), CV1 },
{ 0, 0, 0, 0, 0, CV1 }
{ "InfU-", 0, 6, D, oAFMt1(amt_infUz), CV1 },
{ "VntU-", 0, 6, D, oAFMt1(amt_vntUz), CV1 },
{ "FanU-", 0, 6, D, oAFMt1(amt_fanUz), CV1 },
{ "InfC-", 0, 6, D, oAFMt1(amt_infCz), CV1 },
{ "VntC-", 0, 6, D, oAFMt1(amt_vntCz), CV1 },
{ "FanC-", 0, 6, D, oAFMt1(amt_fanCz), CV1 },
{ "Duct-", 0, 6, D, oAFMt1(amt_ductLk),CV1 },
{ "HVAC-", 0, 6, D, oAFMt1(amt_hvac), CV1 },
{ 0, 0, 0, 0, 0, CV1 }
};
#undef D
#undef oAFMt0
Expand Down
2 changes: 1 addition & 1 deletion src/CNCULT.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -1533,7 +1533,7 @@ CULT( "izZn1", DAT, IZXRAT_ZI1, RQD, 0, VEOI, TYREF, &ZiB, 0.f,
CULT( "izZn2", DAT, IZXRAT_ZI2, 0, 0, VEOI, TYREF, &ZiB, 0.f, N, N),
CULT( "izHConst", DAT, IZXRAT_UA, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
CULT( "izNVType", DAT, IZXRAT_NVCNTRL,0, 0, VEOI, TYCH, 0, C_IZNVTYCH_NONE, N, N),
CULT( "izAFCat", DAT, IZXRAT_AFCAT, 0, 0, VEOI, TYCH, 0, -1, N, N),
CULT( "izAFCat", DAT, IZXRAT_AFCAT, 0, 0, VEOI, TYCH, 0, 0, N, N),
CULT( "izALo", DAT, IZXRAT_A1, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
CULT( "izAHi", DAT, IZXRAT_A2, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
CULT( "izL1", DAT, IZXRAT_L1, 0, 0, VEOI, TYFL, 0, 0.f, N, N),
Expand Down
14 changes: 9 additions & 5 deletions src/CNDTYPES.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -583,14 +583,18 @@ PIPESEGP -- "class PIPESEG*" 4 none
// CAUTION: AFMTR_IVL record (cnrecs.def) member ordering MATCHES order of choices.
*choicb AFCAT {
// UNKNOWN = 0
INFILEX "InfilEx"
VENTEX "VentEx"
INFEX "InfilEx"
VNTEX "VentEx"
FANEX "FanEx"
INFILIZ "InfilIz"
VENTIZ "VentIz"
FANIZ "FanIz"
INFUZ "InfilUz"
VNTUZ "VentUz"
FANUZ "FanUz"
INFCZ "InfilCz"
VNTCZ "VentCz"
FANCZ "FanCz"
DUCTLK "DuctLk"
HVAC "HVAC"
NONE "None"
COUNT "*Count"
}

Expand Down
19 changes: 12 additions & 7 deletions src/CNRECS.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -2775,6 +2775,7 @@ RECORD IZXRAT "izXfer" *RAT // interzone heat transfers: conductive and/or vent.
*declare "void iz_SetupAfMtrs();"
*declare "RC iz_SetupNonAirNet();"
*declare "bool iz_HasVentEffect() const;"
*declare "bool iz_MightBeNatVent() const;"
*declare "RC iz_BegHour();"
*declare "RC iz_BegSubhr();"
*declare "void iz_SetupPresDep();"
Expand All @@ -2790,9 +2791,10 @@ RECORD IZXRAT "izXfer" *RAT // interzone heat transfers: conductive and/or vent.
*declare "BOOL iz_IsAirNet() const { return iz_nvcntrl > C_IZNVTYCH_TWOWAY; }"
*declare "BOOL iz_CanHaveAFCat() const { return iz_IsAirNet(); }"
*declare "BOOL iz_IsExterior() const { return iz_nvcntrl == C_IZNVTYCH_ANEXT || iz_nvcntrl == C_IZNVTYCH_ANEXTFAN || iz_nvcntrl == C_IZNVTYCH_ANEXTFLOW; }"
*declare "BOOL iz_IsAirNetIZ() const { return iz_nvcntrl == C_IZNVTYCH_ANIZ || iz_nvcntrl == C_IZNVTYCH_ANIZFAN || iz_nvcntrl == C_IZNVTYCH_ANIZFLOW || iz_nvcntrl == C_IZNVTYCH_ANHORIZ; }"
*declare "BOOL iz_IsAirNetIZ() const { return iz_nvcntrl == C_IZNVTYCH_ANIZ || iz_nvcntrl == C_IZNVTYCH_ANIZFAN || iz_nvcntrl == C_IZNVTYCH_ANIZFLOW || iz_nvcntrl == C_IZNVTYCH_ANHORIZ || iz_IsHERVIZ(); }"
*declare "BOOL iz_IsHERV() const { return iz_nvcntrl == C_IZNVTYCH_ANHERV; }"
*declare "BOOL iz_IsHERVIZ() const { return iz_IsHERV() && iz_zi1 != iz_zi2; }"
*declare "BOOL iz_IsHERVIZ() const { return iz_IsHERV() && iz_zi2 != 0 && iz_zi1 != iz_zi2; }"
*declare "BOOL iz_IsIZUZ() const;"
*declare "BOOL iz_IsFan() const { return iz_nvcntrl == C_IZNVTYCH_ANIZFAN || iz_nvcntrl == C_IZNVTYCH_ANEXTFAN; }"
*declare "BOOL iz_HasFan() const { return iz_IsFan() || iz_IsHERV(); }"
*declare "BOOL iz_IsFlow() const { return iz_nvcntrl == C_IZNVTYCH_ANIZFLOW || iz_nvcntrl == C_IZNVTYCH_ANEXTFLOW; }"
Expand Down Expand Up @@ -3419,12 +3421,15 @@ RECORD AFMTR_IVL "Airflow meter interval sub" *SUBSTRUCT // interval substruct
// CAUTION: order of members MATCHES DTAFCAT
// for subscripting (in cgcomp,cgresult.cpp) by category
FLOAT amt_unknown // unknown (= AFCAT 0, no associated choice)
FLOAT amt_infilEx // air flow by category
FLOAT amt_ventEx
FLOAT amt_infEx // air flow by category
FLOAT amt_vntEx
FLOAT amt_fanEx
FLOAT amt_infilIz
FLOAT amt_ventIz
FLOAT amt_fanIz
FLOAT amt_infUz
FLOAT amt_vntUz
FLOAT amt_fanUz
FLOAT amt_infCz
FLOAT amt_vntCz
FLOAT amt_fanCz
FLOAT amt_ductLk
FLOAT amt_hvac
*END // AFMTR_IVL
Expand Down
2 changes: 1 addition & 1 deletion test/DHWDU.cse
Original file line number Diff line number Diff line change
Expand Up @@ -2275,7 +2275,7 @@ IZXFER "Conditioned-WnLU"
izHD = 5.37
izNVEff = 0.5
izCpr = 0.6
izAfCat = VentEx
// izAfCat = VentEx

IZXFER "Conditioned-WnLS"
izNVType = "AIRNETEXT"
Expand Down
Loading