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
9 changes: 5 additions & 4 deletions src/CNRECS.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -3680,7 +3680,6 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
// includes rs_fEffH modification if any
// 0 = ASHP compressor is unavailable (due to lockout, )
*s *e FLOAT rs_capHtFS // current step full speed primary heating capacity, Btuh
// if known; used only for CHDHW
*s *e FLOAT rs_capHt // current step current speed net primary heating capacity, Btuh
// includes fan heat and strip/furn defrost makeup heat
// = fan heat only if compressor unavailable
Expand Down Expand Up @@ -3840,10 +3839,12 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
*s *e FLOAT rs_PLR // current step part load ratio = sensible load / full-speed sensible capacity
*s *e FLOAT rs_runF // primary (e.g. compressor) run fraction
*s *e FLOAT rs_speedF // primary (compressor) current speed fraction
// = current net cap / full speed net cap
// fixed speed: 1; var spd: <= 1 per load
// for CHDWH = current net cap / full speed net cap
// for variable speed = n/N (between 1/N and 1.0), where n is the modulated speed of the coil
// for fixed speed = 1
*s *e FLOAT rs_speedFMin // primary (compressor) current minimum speed fraction
// fixed speed: 1; var spd: < 1 per min current min cap
// fixed speed: 1
// variable speed: 1/N (N = number of coil speeds)
*s *e FLOAT rs_runFAux // auxiliary run fraction
*s *e DBL rs_outSen // average primary (compressor, burner, coil, ) sensible heat delivery rate for last subhr, Btuh
// (includes runF/speedF, does not include fan, defrost, or aux heat)
Expand Down
42 changes: 22 additions & 20 deletions src/cnloads.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3851,14 +3851,13 @@ void RSYS::rs_HeatingOutletAirState(
if (auszMode == rsmHEAT)
{ if (Top.tp_pass1A)
{ // autosize warmup: assume fixed temp rise at room (duct losses and fan details ignored)
rs_capHt = rs_asOut.as_CalcQSen2(rs_asRet.as_tdb + rs_tdDesH, rs_amf);
rs_capHtFS= rs_capHt = rs_asOut.as_CalcQSen2(rs_asRet.as_tdb + rs_tdDesH, rs_amf);
rs_effHt = 1.f; // need nz value, else ASHP assumes compressor off
}
else if (rs_IsASHP())
{ // ASHP heat autosize (based on rs_capH)
rs_effHt = 1.f;
rs_capHt = rs_capH;
rs_capAuxH = rs_capH; // same cap for aux during autosizing
rs_capHtFS = rs_capHt = rs_capAuxH = rs_capH; // same cap for aux during autosizing
// used below if needed

}
Expand Down Expand Up @@ -3887,26 +3886,30 @@ void RSYS::rs_HeatingOutletAirState(

rs_capHt = capHtGross * rs_fCondCap + rs_fanPwr;
rs_inpHt = inpHtGross * rs_fCondInp + rs_fanPwr;

if (rs_speedF == 1.f)
rs_capHtFS = rs_capHt;

}
else if (rs_IsWSHP())
{
const float airMassFlowF = 1.f; // temporary assumption
/*rc |=*/ WSHPPerf.whp_HeatingFactors(rs_fCondCap, rs_fCondInp, rs_tdbOut, rs_tdbCoilIn, airMassFlowF);
float capHtGross = (rs_capH - rs_fanHRtdH) * rs_fCondCap;
rs_capHt = capHtGross + rs_fanPwr; // net capacity
rs_capHtFS = rs_capHt = capHtGross + rs_fanPwr; // net capacity
float inpX = (capHtGross / rs_COP47) * rs_fCondInp; // gross input power
rs_effHt = capHtGross / inpX * rs_fEffH; // adjusted gross efficiency
}
else if (rs_IsCHDHW())
{
rs_capHt = rs_CurCapHtCHDHW(rs_speedF);
// rs_capHtFS set in rs_CurCapHtCHDHW
rs_effHt = 1.f;
}
else
{ // not heat pump of any type
rs_effHt = rs_IsFanCoil() ? 1.f : rs_AFUE * rs_fEffH;
rs_capHt = rs_capH; // includes fan heat
rs_capHtFS = rs_capHt = rs_capH; // includes fan heat
}
}

Expand Down Expand Up @@ -4209,8 +4212,8 @@ x rs_asOut = asSav;
rs_asOut.as_Set(50., .001);
#endif

// speedF?
rs_capSenNetFS = rs_capSenCt / (rs_speedF > 0.f ? rs_speedF : 1.f) + rs_fanPwr; // net full speed sensible capacity
if (rs_speedF == 1.f)
rs_capSenNetFS = rs_capSenCt + rs_fanPwr; // net full speed sensible capacity

#if defined( _DEBUG)
if (!Top.isWarmup)
Expand Down Expand Up @@ -5428,10 +5431,7 @@ void RSYS::rs_ClearSubhrResults(
return;

// all modes
#if defined( RSYSLOADF)
rs_loadF =
#endif
rs_PLR = rs_runF = rs_speedF = rs_runFAux = rs_PLF = rs_capSenNetFS = 0.f;
rs_PLR = rs_runF = rs_speedF = rs_runFAux = rs_PLF = rs_capSenNetFS = 0.f;
rs_outSen = rs_outLat = rs_outFan = rs_outAux = rs_outDefrost
= rs_outSenTot = rs_inPrimary = rs_inFan = rs_inAux = rs_inDefrost = 0.;

Expand Down Expand Up @@ -6354,6 +6354,11 @@ RC RSYS::rs_FinalizeSh()
rs_inPrimary = fabs(rs_outSen + rs_outLat)/ max(.01f, rs_effCt * rs_PLF);
}

if (rs_capSenNetFS != 0.f)
{
rs_PLR = rs_znLoad[0] / rs_capSenNetFS; // PLR based on sensible load and FS sensible capacity
}

if (rs_pMtrElec)
{ rs_pMtrElec->H.clg += rs_inPrimary * Top.tp_subhrDur; // compressor energy for step, Btu
rs_pMtrElec->H.fanC += rs_inFan * Top.tp_subhrDur;
Expand Down Expand Up @@ -6396,9 +6401,6 @@ RC RSYS::rs_FinalizeSh()
fFanPwrPrim = 1.f;
}

rs_capSenNetFS = rs_capHt - rs_capDfHt; // net capacity
// includes fan heat; does not include defrost

double outTot = rs_runF * rs_capHt;

rs_outAux = rs_runFAux * rs_capAuxH;
Expand Down Expand Up @@ -6471,7 +6473,6 @@ RC RSYS::rs_FinalizeSh()
}
else
{ // non-ASHP, non-CHDHW
rs_capSenNetFS = rs_capHt; // net capacity, Btuh
double outTot = rs_runF * rs_capHt; // total output (incl fan), Btuh
// rs_outLat = 0.; // total latent output
rs_outFan = min( outTot, rs_runF * rs_fanPwr); // fan output, Btuh
Expand All @@ -6486,7 +6487,11 @@ RC RSYS::rs_FinalizeSh()
rs_inPrimary = rs_outSen / rs_effHt;
}
}

if (rs_capHtFS != 0.f)
{
rs_capSenNetFS = rs_capHtFS;
rs_PLR = rs_znLoad[0] / rs_capHtFS;
}
if (rs_pMtrHeat)
rs_pMtrHeat->H.htg += rs_inPrimary * Top.tp_subhrDur;
rs_inFan = rs_outFan; // fan input, Btuh (in = out, all fan heat into air)
Expand All @@ -6503,10 +6508,7 @@ RC RSYS::rs_FinalizeSh()
}
// else if (rs_Mode == rsmOFF)

if (rs_capSenNetFS != 0.f)
{
rs_PLR = rs_znLoad[0] / rs_capSenNetFS;
}


// parasitic consumption
if (rs_pMtrElec)
Expand Down
128 changes: 86 additions & 42 deletions test/ASHP_DFNG.cse
Original file line number Diff line number Diff line change
Expand Up @@ -1705,48 +1705,92 @@ Report rpType=UDT rpFreq=Year rpHeader=No
reportcol colVal=" Yr" colHead="Month" colWid = 5
RSYSHRCOLS( 1, Y)

#define SYSCOLS( RXCOL, rs, zn) \
RXCOL colHead="mon" colVal=$Month colWid=3 \
RXCOL colHead="day" colVal=$Dayofmonth colWid=3 \
RXCOL colHead="Hr" colVal=@Top.iHr colWid=2 \
RXCOL colHead="Sh" colVal=@Top.iSubHr colWid=2 \
RXCOL colHead="ToDb" colVal=@Top.tDbOSh colWid=4 colDec=1 \
RXCOL colHead="Tzn" colVal=@Zone[zn].tz colWid=5 colDec=2 \
RXCOL colHead="UnMet" colVal=@ZnRes[zn].S.unMetHrDH[ 0] colWid=5 colDec=2 \
RXCOL colHead="capfl" colVal=@RSYS[ rs].capHt colWid=5 colDec=0 \
RXCOL colHead="COPfl" colVal=@RSYS[ rs].effHt colWid=5 colDec=3 \
RXCOL colHead="capF" colVal=@RSYS[ rs].fCondCap colWid=5 colDec=3 \
RXCOL colHead="inpF" colVal=@RSYS[ rs].fCondInp colWid=5 colDec=3 \
RXCOL colHead="PLR" colVal=@RSYS[ rs].plr colWid=5 colDec=3 \
RXCOL colHead="runF" colVal=@RSYS[ rs].runF colWid=5 colDec=3 \
RXCOL colHead="spdF" colVal=@RSYS[ rs].speedF colWid=5 colDec=3 \
RXCOL colHead="PLF" colVal=@RSYS[ rs].plf colWid=5 colDec=3 \
RXCOL colHead="runFAux" colVal=@RSYS[ rs].runFAux colWid=7 colDec=3 \
RXCOL colHead="COPpl" colVal=@RSYS[ rs].COPHtAdj colWid=5 colDec=3 \
RXCOL colHead="qComp" colVal=@RSYS[ rs].outSen colWid=6 colDec=0 \
RXCOL colHead="qAux" colVal=@RSYS[ rs].outAux colWid=6 colDec=0 \
RXCOL colHead="qDef" colVal=@RSYS[ rs].outDefrost colWid=6 colDec=0 \
RXCOL colHead="qFan" colVal=@RSYS[ rs].outFan colWid=6 colDec=0 \
RXCOL colHead="qTot" colVal=@RSYS[ rs].outSenTot colWid=6 colDec=0 \
RXCOL colHead="qsZn" colVal=@ZnRes[zn].S.qsMech*@Top.nSubSteps colWid=6 colDec=0

REPORT rpType=UDT rpFreq=subhour rpDayBeg=jan 4 rpDayEnd=jan 6 rpCpl=-1
SYSCOLS( Reportcol, 1, 1)

REPORT rpType=UDT rpFreq=subhour rpDayBeg=(CD1)-1 rpDayEnd=(CD1) rpCpl=-1
SYSCOLS( Reportcol, 1, 1)


#if 0
EXPORT exType=UDT exFreq=subhour exDayBeg=jan 4 exDayEnd=jan 6
SYSCOLS( Exportcol, 1, 1)

REPORT rpType=UDT rpFreq=subhour rpDayBeg=aug 11 rpDayEnd=aug 11 rpCpl=-1
SYSCOLS( Reportcol, 1, 1)

EXPORT exType=UDT exFreq=subhour exDayBeg=aug 11 exDayEnd=aug 11
SYSCOLS( Exportcol, 1, 1)
#endif
// report columns: RSYS heating subhour details
#define SYSCOLSH( RXCOL, rs, zn, zat, dctTot) \
RXCOL colHead="mon" colVal=$Month colWid=3 \
RXCOL colHead="day" colVal=$Dayofmonth colWid=3 \
RXCOL colHead="Hr" colVal=@Top.iHr colWid=2 \
RXCOL colHead="Sh" colVal=@Top.iSubHr colWid=2 \
RXCOL colHead="ToDb" colVal=@Top.tDbOSh colWid=5 colDec=2 \
RXCOL colHead="Tatt" colVal=@Zone[zat].tz colWid=5 colDec=2 \
RXCOL colHead="Tzn" colVal=@Zone[zn].tz colWid=5 colDec=2 \
RXCOL colHead="Tent" colVal=@RSYS[ rs].asIn.tDb colWid=6 colDec=2 \
RXCOL colHead="Tlv" colVal=@RSYS[ rs].asOut.tDb colWid=6 colDec=2 \
RXCOL colHead="Tsup" colVal=@RSYS[ rs].asSup.tDb colWid=6 colDec=2 \
RXCOL colHead="capHt" colVal=@RSYS[ rs].capHt colWid=5 colDec=0 \
RXCOL colHead="capHtFS" colVal=@RSYS[ rs].capHtFS colWid=7 colDec=0 \
RXCOL colHead="capSenNetFS" colVal=@RSYS[ rs].capSenNetFS colWid=11 colDec=0 \
RXCOL colHead="znLd" colVal=@RSYS[ rs].znLoad[ 0] colWid=5 colDec=0 \
RXCOL colHead="capF" colVal=@RSYS[ rs].fCondCap colWid=5 colDec=3 \
RXCOL colHead="inpF" colVal=@RSYS[ rs].fCondInp colWid=5 colDec=3 \
RXCOL colHead="PLR" colVal=@RSYS[ rs].PLR colWid=5 colDec=3 \
RXCOL colHead="spdF" colVal=@RSYS[ rs].speedF colWid=5 colDec=3 \
RXCOL colHead="runF" colVal=@RSYS[ rs].runF colWid=5 colDec=3 \
RXCOL colHead="PLF" colVal=@RSYS[ rs].plf colWid=5 colDec=3 \
RXCOL colHead="runFAux" colVal=@RSYS[ rs].runFAux colWid=7 colDec=3 \
RXCOL colHead="CFMav" colVal=@Zone[ zn].rsAmfSup/4.5 colWid=5 colDec=1 \
RXCOL colHead="qComp" colVal=@RSYS[ rs].outSen colWid=6 colDec=0 \
RXCOL colHead="qAux" colVal=@RSYS[ rs].outAux colWid=6 colDec=0 \
RXCOL colHead="qDef" colVal=@RSYS[ rs].outDefrost colWid=5 colDec=0 \
RXCOL colHead="qFan" colVal=@RSYS[ rs].outFan colWid=5 colDec=0 \
RXCOL colHead="qNet" colVal=@RSYS[ rs].outSenTot colWid=6 colDec=0 \
RXCOL colHead="qDct" colVal=-@DUCTSEGRES[ dctTot].S.qhTotSen/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qZn" colVal=@Zone[zn].qsHVAC colWid=6 colDec=0 \
RXCOL colHead="qBal1" colVal=@RSYS[ rs].outSenTot-@Zone[zn].qsHVAC-@DUCTSEGRES[ dctTot].S.qhTotSen/@Top.subhrDur colWid=5 colDec=0 \
RXCOL colHead="qBal2" colVal=(@RSYSRES[ rs].S.qhNet-@ZNRES[ zn].S.qshHvac-@DUCTSEGRES[ dctTot].S.qhTotSen)/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="eComp" colVal=@RSYS[rs].inPrimary colWid=5 colDec=0 \
RXCOL colHead="eTot" colVal=@RSYSRES[rs].S.ehTot / @Top.subhrDur colWid=6 colDec = 0 \
RXCOL colHead="COPfs" colVal=@RSYS[ rs].effHt colWid=5 colDec=3 \
RXCOL colHead="COPpl" colVal=@RSYS[ rs].COPHtAdj colWid=5 colDec=3 \
RXCOL colHead="COPov" colVal=abs( @Zone[zn].qsHVAC)/max( 1, @RSYS[rs].inPrimary+@RSYS[rs].inAux+@RSYS[rs].inDefrost+@RSYS[rs].inFan) colWid=5 colDec=3

REPORT rpType=UDT rpFreq=subhour rpDayBeg=jan 4 rpDayEnd=jan 6 rpTitle="RSYS Heating subhour details"
SYSCOLSH( Reportcol, 1, 1, "Attic-atc", 3)

// report columns: RSYS cooling subhour details
#define SYSCOLSC( RXCOL, rs, lm, zn, zat, dctTot) \
RXCOL colHead="mon" colVal=$Month colWid=3 \
RXCOL colHead="day" colVal=$Dayofmonth colWid=3 \
RXCOL colHead="Hr" colVal=@Top.iHr colWid=2 \
RXCOL colHead="Sh" colVal=@Top.iSubHr colWid=2 \
RXCOL colHead="ToDb" colVal=@Top.tDbOSh colWid=5 colDec=2 \
RXCOL colHead="Tatt" colVal=@Zone[zat].tz colWid=5 colDec=2 \
RXCOL colHead="Tzn" colVal=@Zone[zn].tz colWid=5 colDec=2 \
RXCOL colHead="Tent" colVal=@RSYS[ rs].asIn.tDb colWid=6 colDec=2 \
RXCOL colHead="Tlv" colVal=@RSYS[ rs].asOut.tDb colWid=6 colDec=2 \
RXCOL colHead="Tsup" colVal=@RSYS[ rs].asSup.tDb colWid=6 colDec=2 \
RXCOL colHead="UnMet" colVal=@ZnRes[zn].S.unMetHrs[ 1] colWid=5 colDec=2 \
RXCOL colHead="znLd" colVal=@RSYS[ rs].znLoad[ 0] colWid=6 colDec=0 \
RXCOL colHead="capF" colVal=@RSYS[ rs].fCondCap colWid=5 colDec=3 \
RXCOL colHead="inpF" colVal=@RSYS[ rs].fCondInp colWid=5 colDec=3 \
RXCOL colHead="SHR" colVal=@RSYS[ rs].shr colWid=4 colDec=3 \
RXCOL colHead="capSenNetFS" colVal=@RSYS[ rs].capSenNetFS colWid=11 colDec=0 \
RXCOL colHead="capSen" colVal=@RSYS[rs].capSenCt colWid=6 colDec=0 \
RXCOL colHead="capLat" colVal=@RSYS[rs].capLatCt colWid=6 colDec=0 \
RXCOL colHead="capTot" colVal=@RSYS[rs].capTotCt colWid=6 colDec=0 \
RXCOL colHead="PLR" colVal=@RSYS[ rs].PLR colWid=5 colDec=3 \
RXCOL colHead="runF" colVal=@RSYS[ rs].runF colWid=5 colDec=3 \
RXCOL colHead="spdF" colVal=@RSYS[ rs].speedF colWid=5 colDec=3 \
RXCOL colHead="PLF" colVal=@RSYS[ rs].plf colWid=5 colDec=3 \
RXCOL colHead="CFMav" colVal=@Zone[ zn].rsAmfSup/4.5 colWid=5 colDec=1 \
RXCOL colHead="qSCoil" colVal=@RSYS[ rs].outSen colWid=6 colDec=0 \
RXCOL colHead="qSFan" colVal=@RSYS[ rs].outFan colWid=5 colDec=0 \
RXCOL colHead="qSNet" colVal=@RSYS[ rs].outSenTot colWid=6 colDec=0 \
RXCOL colHead="qSNet2" colVal=@RSYSRES[ rs].S.qcSenNet/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qLd" colVal=@LOADMETER[ lm].S.qClg/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qSDct" colVal=@DuctSegRes[ dctTot].S.qcTotSen/@Top.subhrDur colWid=5 colDec=0 \
RXCOL colHead="qsZn1" colVal=@ZnRes[zn].S.qscHVAC/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qsZn2" colVal=@Zone[ zn].qsHVAC colWid=6 colDec=0 \
RXCOL colHead="qBal1" colVal=@RSYS[ rs].outSenTot-@Zone[zn].qsHVAC-@DUCTSEGRES[ dctTot].S.qcTotSen/@Top.subhrDur colWid=5 colDec=0 \
RXCOL colHead="qBal2" colVal=(@RSYSRES[ rs].S.qcSenNet-@ZNRES[ zn].S.qscHvac-@DUCTSEGRES[ dctTot].S.qcTotSen)/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qLat1" colVal=@RSYS[ rs].outLat colWid=6 colDec=0 \
RXCOL colHead="qLat2" colVal=@ZnRes[zn].S.qlMech/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="qtZn" colVal=(@ZnRes[zn].S.qscHvac+@ZnRes[zn].S.qlMech)/@Top.subhrDur colWid=6 colDec=0 \
RXCOL colHead="eComp" colVal=@RSYS[rs].inPrimary colWid=5 colDec=0 \
RXCOL colHead="eTot" colVal=@RSYSRES[rs].S.ecTot/@Top.subhrDur colWid=6 colDec = 0

REPORT rpType=UDT rpFreq=subhour rpDayBeg=(CD1)-1 rpDayEnd=CD1 rpCpl=-1 rpTitle="RSYS cooling subhour details"
SYSCOLSC( Reportcol, 1, 1, 1, "Attic-atc", 3)


RUN
Expand Down
Loading
Loading