Skip to content

Commit 04178d2

Browse files
authored
Merge pull request #110 from cse-sim/reportinfil
Distinct UZ and CZ interzone afCats
2 parents 9ba17dd + 64da42c commit 04178d2

File tree

7 files changed

+1279
-1238
lines changed

7 files changed

+1279
-1238
lines changed

src/CGCOMP.CPP

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,8 @@ float TOPRAT::tp_WindPresV( // wind velocity pressure
260260
///////////////////////////////////////////////////////////////////////////////
261261
/*static*/ const int AFMTR_IVL::NAFCATS
262262
= (sizeof(AFMTR_IVL) - offsetof( AFMTR_IVL, amt_total)) / sizeof(float);
263-
// NAFCATS s/b same as AFCAT choices + 1 (for total)
264-
static_assert(AFMTR_IVL::NAFCATS == C_AFCAT_COUNT+1, "Inconsistent AFMTR constants");
263+
// NAFCATS s/b same as AFCAT choices + 1 (for total) - 1 (for C_AFCAT_NONE)
264+
static_assert(AFMTR_IVL::NAFCATS == C_AFCAT_COUNT+1-1, "Inconsistent AFMTR constants");
265265
//-----------------------------------------------------------------------------
266266
void AFMTR_IVL::amt_Copy( // copy
267267
const AFMTR_IVL* sIvl, // source
@@ -1050,14 +1050,14 @@ void IZXRAT::iz_SetupAfMtrs()
10501050
{
10511051
// Air flow category
10521052
if (!iz_CanHaveAFCat())
1053-
iz_afCat = -1;
1053+
iz_afCat = C_AFCAT_NONE;
10541054
else if (!IsSet(IZXRAT_AFCAT))
10551055
iz_afCat = iz_AfCatDefault(); // default category (may return -1)
10561056

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

10821082
} // IZXRAT::iz_SetupAfMtrs
10831083
//-----------------------------------------------------------------------------
1084+
BOOL IZXRAT::iz_IsIZUZ() const // true iff interzone connected to unconditioned
1085+
{
1086+
const ZNR* zp = ZrB.GetAtSafe(iz_zi2);
1087+
return zp && zp->zn_IsUZ();
1088+
1089+
} // IZXRAT::iz_IsIZUZ
1090+
//-----------------------------------------------------------------------------
10841091
AFCAT IZXRAT::iz_AfCatDefault() const
10851092
{
10861093
AFCAT afCat;
10871094
if (!iz_CanHaveAFCat())
1088-
afCat = -1; // not trackable
1095+
afCat = C_AFCAT_NONE; // not trackable
10891096
else if (iz_IsSysAir())
10901097
afCat = C_AFCAT_HVAC;
10911098
else if (iz_IsDuctLk())
10921099
afCat = C_AFCAT_DUCTLK;
10931100
else if (iz_IsHERV())
1094-
afCat = iz_IsHERVIZ() ? C_AFCAT_FANIZ : C_AFCAT_FANEX;
1095-
else if (iz_IsExterior())
1096-
afCat = iz_IsFixedFlow() ? C_AFCAT_FANEX : C_AFCAT_INFILEX;
1101+
afCat = C_AFCAT_FANEX;
10971102
else
1098-
afCat = iz_IsFixedFlow() ? C_AFCAT_FANIZ : C_AFCAT_INFILIZ;
1103+
{ const static int afCats[3][3] =
1104+
{ { C_AFCAT_FANEX, C_AFCAT_VNTEX, C_AFCAT_INFEX },
1105+
{ C_AFCAT_FANUZ, C_AFCAT_VNTUZ, C_AFCAT_INFUZ },
1106+
{ C_AFCAT_FANCZ, C_AFCAT_VNTCZ, C_AFCAT_INFCZ }
1107+
};
1108+
// fan / vent / infil
1109+
// Note: vent guess is approx, explicit izAFCat input may be necessary
1110+
int izMode = iz_IsFixedFlow() ? 0 : iz_MightBeNatVent() ? 1 : 2;
1111+
// exterior / uncond zone / cond zone
1112+
int izLoc = iz_IsExterior() ? 0 : iz_IsIZUZ() ? 1 : 2;
1113+
afCat = afCats[izLoc][izMode];
1114+
}
10991115

11001116
return afCat;
11011117

@@ -1171,7 +1187,17 @@ RC IZXRAT::iz_SetupNonAirNet() // interzone transfer one-time initialization
11711187
return RCOK;
11721188
} // IZXRAT::iz_SetupNonAirNet
11731189
//-----------------------------------------------------------------------------
1190+
bool IZXRAT::iz_MightBeNatVent() const // detect possible controlled nat vent
1191+
// returns true iff this looks like typical controlled vent (e.g. openable window)
1192+
// used re default iz_afCat
1193+
{
1194+
bool ventIsh = !iz_IsFixedFlow() && iz_a1 == 0.f && IsSet(IZXRAT_A2);
1195+
1196+
return ventIsh;
1197+
} // IZXRAT::iz_MightBeVent
1198+
//-----------------------------------------------------------------------------
11741199
bool IZXRAT::iz_HasVentEffect() const // determine whether this IZXRAT can "vent"
1200+
// can vary during run due to expressions
11751201
// returns 1 iff iz vent mode (iz_ad[ 1]) differs from infil-only iz_ad[ 0]
11761202
{
11771203
bool bVentEffect =

src/CGRESULT.CPP

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -248,27 +248,33 @@ static COLDEF afMtrColdef[] =
248248
{ "Day", 8 | 4, 2, 0, USE_NEXT_ARG, CVI },
249249
{ "Hr", 8 | 4, 2, 0, USE_NEXT_ARG, CVI },
250250
{ "Subhr", 8 | 4, 1, 0, USE_NEXT_ARG, CVS }, // ..
251-
{ "Tot+", 0, 5, D, oAFMt0(amt_total), CV1 },
252-
{ "Unkn+", 0, 5, D, oAFMt0(amt_unknown),CV1 },
253-
{ "InfX+", 0, 5, D, oAFMt0(amt_infilEx),CV1 },
254-
{ "VntX+", 0, 5, D, oAFMt0(amt_ventEx), CV1 },
251+
{ "Tot+", 0, 5, D, oAFMt0(amt_total), CV1 },
252+
{ "Unkn+", 0, 5, D, oAFMt0(amt_unknown), CV1 },
253+
{ "InfX+", 0, 5, D, oAFMt0(amt_infEx), CV1 },
254+
{ "VntX+", 0, 5, D, oAFMt0(amt_vntEx), CV1 },
255255
{ "FanX+", 0, 5, D, oAFMt0(amt_fanEx), CV1 },
256-
{ "InfZ+", 0, 5, D, oAFMt0(amt_infilIz),CV1 },
257-
{ "VntZ+", 0, 5, D, oAFMt0(amt_ventIz), CV1 },
258-
{ "FanZ+", 0, 5, D, oAFMt0(amt_fanIz), CV1 },
259-
{ "Duct+", 0, 5, D, oAFMt0(amt_ductLk), CV1 },
260-
{ "HVAC+", 0, 5, D, oAFMt0(amt_hvac), CV1 },
261-
{ "Tot-", 0, 6, D, oAFMt1(amt_total), CV1 },
262-
{ "Unkn-", 0, 6, D, oAFMt1(amt_unknown),CV1 },
263-
{ "InfX-", 0, 6, D, oAFMt1(amt_infilEx),CV1 },
264-
{ "VntX-", 0, 6, D, oAFMt1(amt_ventEx), CV1 },
256+
{ "InfU+", 0, 5, D, oAFMt0(amt_infUz), CV1 },
257+
{ "VntU+", 0, 5, D, oAFMt0(amt_vntUz), CV1 },
258+
{ "FanU+", 0, 5, D, oAFMt0(amt_fanUz), CV1 },
259+
{ "InfC+", 0, 5, D, oAFMt0(amt_infCz), CV1 },
260+
{ "VntC+", 0, 5, D, oAFMt0(amt_vntCz), CV1 },
261+
{ "FanC+", 0, 5, D, oAFMt0(amt_fanCz), CV1 },
262+
{ "Duct+", 0, 5, D, oAFMt0(amt_ductLk),CV1 },
263+
{ "HVAC+", 0, 5, D, oAFMt0(amt_hvac), CV1 },
264+
{ "Tot-", 0, 6, D, oAFMt1(amt_total), CV1 },
265+
{ "Unkn-", 0, 6, D, oAFMt1(amt_unknown), CV1 },
266+
{ "InfX-", 0, 6, D, oAFMt1(amt_infEx), CV1 },
267+
{ "VntX-", 0, 6, D, oAFMt1(amt_vntEx), CV1 },
265268
{ "FanX-", 0, 6, D, oAFMt1(amt_fanEx), CV1 },
266-
{ "InfZ-", 0, 6, D, oAFMt1(amt_infilIz),CV1 },
267-
{ "VntZ-", 0, 6, D, oAFMt1(amt_ventIz), CV1 },
268-
{ "FanZ-", 0, 6, D, oAFMt1(amt_fanIz), CV1 },
269-
{ "Duct-", 0, 6, D, oAFMt1(amt_ductLk), CV1 },
270-
{ "HVAC-", 0, 6, D, oAFMt1(amt_hvac), CV1 },
271-
{ 0, 0, 0, 0, 0, CV1 }
269+
{ "InfU-", 0, 6, D, oAFMt1(amt_infUz), CV1 },
270+
{ "VntU-", 0, 6, D, oAFMt1(amt_vntUz), CV1 },
271+
{ "FanU-", 0, 6, D, oAFMt1(amt_fanUz), CV1 },
272+
{ "InfC-", 0, 6, D, oAFMt1(amt_infCz), CV1 },
273+
{ "VntC-", 0, 6, D, oAFMt1(amt_vntCz), CV1 },
274+
{ "FanC-", 0, 6, D, oAFMt1(amt_fanCz), CV1 },
275+
{ "Duct-", 0, 6, D, oAFMt1(amt_ductLk),CV1 },
276+
{ "HVAC-", 0, 6, D, oAFMt1(amt_hvac), CV1 },
277+
{ 0, 0, 0, 0, 0, CV1 }
272278
};
273279
#undef D
274280
#undef oAFMt0

src/CNCULT.CPP

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,7 @@ CULT( "izZn1", DAT, IZXRAT_ZI1, RQD, 0, VEOI, TYREF, &ZiB, 0.f,
15331533
CULT( "izZn2", DAT, IZXRAT_ZI2, 0, 0, VEOI, TYREF, &ZiB, 0.f, N, N),
15341534
CULT( "izHConst", DAT, IZXRAT_UA, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
15351535
CULT( "izNVType", DAT, IZXRAT_NVCNTRL,0, 0, VEOI, TYCH, 0, C_IZNVTYCH_NONE, N, N),
1536-
CULT( "izAFCat", DAT, IZXRAT_AFCAT, 0, 0, VEOI, TYCH, 0, -1, N, N),
1536+
CULT( "izAFCat", DAT, IZXRAT_AFCAT, 0, 0, VEOI, TYCH, 0, 0, N, N),
15371537
CULT( "izALo", DAT, IZXRAT_A1, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
15381538
CULT( "izAHi", DAT, IZXRAT_A2, 0, 0, VHRLY, TYFL, 0, 0.f, N, N),
15391539
CULT( "izL1", DAT, IZXRAT_L1, 0, 0, VEOI, TYFL, 0, 0.f, N, N),

src/CNDTYPES.DEF

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -583,14 +583,18 @@ PIPESEGP -- "class PIPESEG*" 4 none
583583
// CAUTION: AFMTR_IVL record (cnrecs.def) member ordering MATCHES order of choices.
584584
*choicb AFCAT {
585585
// UNKNOWN = 0
586-
INFILEX "InfilEx"
587-
VENTEX "VentEx"
586+
INFEX "InfilEx"
587+
VNTEX "VentEx"
588588
FANEX "FanEx"
589-
INFILIZ "InfilIz"
590-
VENTIZ "VentIz"
591-
FANIZ "FanIz"
589+
INFUZ "InfilUz"
590+
VNTUZ "VentUz"
591+
FANUZ "FanUz"
592+
INFCZ "InfilCz"
593+
VNTCZ "VentCz"
594+
FANCZ "FanCz"
592595
DUCTLK "DuctLk"
593596
HVAC "HVAC"
597+
NONE "None"
594598
COUNT "*Count"
595599
}
596600

src/CNRECS.DEF

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2775,6 +2775,7 @@ RECORD IZXRAT "izXfer" *RAT // interzone heat transfers: conductive and/or vent.
27752775
*declare "void iz_SetupAfMtrs();"
27762776
*declare "RC iz_SetupNonAirNet();"
27772777
*declare "bool iz_HasVentEffect() const;"
2778+
*declare "bool iz_MightBeNatVent() const;"
27782779
*declare "RC iz_BegHour();"
27792780
*declare "RC iz_BegSubhr();"
27802781
*declare "void iz_SetupPresDep();"
@@ -2790,9 +2791,10 @@ RECORD IZXRAT "izXfer" *RAT // interzone heat transfers: conductive and/or vent.
27902791
*declare "BOOL iz_IsAirNet() const { return iz_nvcntrl > C_IZNVTYCH_TWOWAY; }"
27912792
*declare "BOOL iz_CanHaveAFCat() const { return iz_IsAirNet(); }"
27922793
*declare "BOOL iz_IsExterior() const { return iz_nvcntrl == C_IZNVTYCH_ANEXT || iz_nvcntrl == C_IZNVTYCH_ANEXTFAN || iz_nvcntrl == C_IZNVTYCH_ANEXTFLOW; }"
2793-
*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; }"
2794+
*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(); }"
27942795
*declare "BOOL iz_IsHERV() const { return iz_nvcntrl == C_IZNVTYCH_ANHERV; }"
2795-
*declare "BOOL iz_IsHERVIZ() const { return iz_IsHERV() && iz_zi1 != iz_zi2; }"
2796+
*declare "BOOL iz_IsHERVIZ() const { return iz_IsHERV() && iz_zi2 != 0 && iz_zi1 != iz_zi2; }"
2797+
*declare "BOOL iz_IsIZUZ() const;"
27962798
*declare "BOOL iz_IsFan() const { return iz_nvcntrl == C_IZNVTYCH_ANIZFAN || iz_nvcntrl == C_IZNVTYCH_ANEXTFAN; }"
27972799
*declare "BOOL iz_HasFan() const { return iz_IsFan() || iz_IsHERV(); }"
27982800
*declare "BOOL iz_IsFlow() const { return iz_nvcntrl == C_IZNVTYCH_ANIZFLOW || iz_nvcntrl == C_IZNVTYCH_ANEXTFLOW; }"
@@ -3419,12 +3421,15 @@ RECORD AFMTR_IVL "Airflow meter interval sub" *SUBSTRUCT // interval substruct
34193421
// CAUTION: order of members MATCHES DTAFCAT
34203422
// for subscripting (in cgcomp,cgresult.cpp) by category
34213423
FLOAT amt_unknown // unknown (= AFCAT 0, no associated choice)
3422-
FLOAT amt_infilEx // air flow by category
3423-
FLOAT amt_ventEx
3424+
FLOAT amt_infEx // air flow by category
3425+
FLOAT amt_vntEx
34243426
FLOAT amt_fanEx
3425-
FLOAT amt_infilIz
3426-
FLOAT amt_ventIz
3427-
FLOAT amt_fanIz
3427+
FLOAT amt_infUz
3428+
FLOAT amt_vntUz
3429+
FLOAT amt_fanUz
3430+
FLOAT amt_infCz
3431+
FLOAT amt_vntCz
3432+
FLOAT amt_fanCz
34283433
FLOAT amt_ductLk
34293434
FLOAT amt_hvac
34303435
*END // AFMTR_IVL

test/DHWDU.cse

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2275,7 +2275,7 @@ IZXFER "Conditioned-WnLU"
22752275
izHD = 5.37
22762276
izNVEff = 0.5
22772277
izCpr = 0.6
2278-
izAfCat = VentEx
2278+
// izAfCat = VentEx
22792279

22802280
IZXFER "Conditioned-WnLS"
22812281
izNVType = "AIRNETEXT"

0 commit comments

Comments
 (0)