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
105 changes: 70 additions & 35 deletions src/CNLOADS.CPP
Original file line number Diff line number Diff line change
Expand Up @@ -3134,12 +3134,12 @@ float RSYS::rs_PerfASHP( // ASHP performance (simplified call)
// else model defrost if available
float tdbOut, // outdoor dry bulb, F
float& COP, // returned: compressor-only full speed COP at tdbOut
float fanHAdj) // fan power adjustment, Btuh
float fanHAdj /*=0.f*/) // fan power adjustment, Btuh
// removed from capacity and input (before COP calc)
// returns total heating capacity (compressor + capDefrostHt), Btuh
{
float capHt, inpHt, capDfHt, capHtMin, inpHtMin, capDfHtMin;
float what = rs_PerfASHP2(ashpModel, tdbOut, fanHAdj,
COP = rs_PerfASHP2(ashpModel, tdbOut, fanHAdj,
capHt, inpHt, capDfHt, capHtMin, inpHtMin, capDfHtMin);

return capHt;
Expand Down Expand Up @@ -3167,7 +3167,7 @@ float RSYS::rs_PerfASHP2( // ASHP performance

float COPAdjF /*=1.f*/) // COP adjustment factor
// multiplies final COP result
// returns heating capacity (including defrost if any), Btuh
// returns compressor-only full-speed COP (as adjusted by COPAdjF)
{
capDfHt = 0.f;
BOOL bDoDefrost = (ashpModel & 0x100) == 0
Expand Down Expand Up @@ -3347,10 +3347,7 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
rs_cap17 = max( rs_Cap17RatioASHP()*rs_cap47, 1.f);

if (!IsSet(RSYS_CAP35))
{ rs_cap35 = rs_cap17 + 0.6f * (rs_cap47 - rs_cap17);
if (rs_HasDefrost())
rs_cap35 *= 0.9f; // capacity reduction for defrost
}
rs_cap35 = rs_Cap35Default(rs_cap47, rs_cap17);

#if ASHP_COPREG == 1
// "traditional" model
Expand Down Expand Up @@ -3387,11 +3384,11 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
rs_COP47 = 0.3225f * rs_HSPF + 0.9099f;
if (!IsSet( RSYS_COP17))
rs_COP17 = rs_HSPF < 8
? 0.5183f * rs_HSPF - 1.7244
? 0.5183f * rs_HSPF - 1.7244f
: 0.2186f * rs_HSPF + 0.6734f;
#elif ASHP_COPREG == 6
if (rs_IsPkgRoom())
{ rs_COP17 = 0.6870 * rs_COP47;
{ rs_COP17 = 0.6870f * rs_COP47;
// rs_cap17 set above
}
else if (!rs_IsASHPHydronic())
Expand All @@ -3401,13 +3398,19 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
rs_COP47 = 0.3225f * rs_HSPF + 0.9099f;
if (!IsSet( RSYS_COP17))
{ rs_COP17 = 0.2186f * rs_HSPF + 0.6734f;
RC rc1 = rs_HSPFMatchASHP(); // adjust COP17 to be
// consistent with rs_HSPF
if (rc1 != RCOK // if fail
|| (!rs_isAuszH && rs_COP17 > rs_COP47)) // or unreasonable
// (allow during ausz)
rc = err( "RSYS '%s': No reasonable value found for rsCOP17."
"\n Check rsHSPF and other heating inputs.", name);
int iTry;
RC rc1;
const int nTry = 40;
for (iTry=0; iTry<nTry; iTry++)
{ rc1 = rs_HSPFMatchASHP(); // adjust COP17 to be
// consistent with rs_HSPF
if (rc1 || rs_COP17 < rs_COP47 || IsSet( RSYS_COP47))
break; // accept rs_COP17 if < rs_COP47 or rs_COP47 is fixed
rs_COP47 += 0.1f; // try again with higher rs_COP47
}
if ((rc1 || iTry==nTry) && !rs_isAuszH)
rc |= err("RSYS '%s': No reasonable value found for rsCOP17 and/or rsCOP47."
"\n Check rsHSPF and other heating inputs.", name);
}
}

Expand All @@ -3418,9 +3421,10 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
rs_CalcInputsAndSlopesASHP();

#if 1 && defined( _DEBUG)
// back-calc checks
float COP;
float capHt = rs_PerfASHP(0, 47.f, COP, 0.f);
capHt = rs_PerfASHP(0, 17.f, COP, 0.f);
float capHt = rs_PerfASHP(0, 47.f, COP);
capHt = rs_PerfASHP(0, 17.f, COP);
#endif

return rc;
Expand Down Expand Up @@ -3450,6 +3454,29 @@ x float capRat = 0.6280951f;
return capRat;
} // RSYS::rs_Cap17RatioASHP
//-----------------------------------------------------------------------------
float RSYS::rs_Cap35Default( // default 35 F heating capacity
float cap47, // 47 F heating capacity, any power units
float cap17) const // 17 F heating capacity
// returns 35 F heating capacity, consistent units
{
float cap35 = cap17 + 0.6f * (cap47 - cap17);
if (rs_HasDefrost())
cap35 *= 0.9f; // capacity reduction for defrost
return cap35;
} // RSYS::rs_Cap35Default
//-----------------------------------------------------------------------------
float RSYS::rs_Inp35Default( // default 35 F input power
float inp47, // 47 F input power, any power units
float inp17) const // 17 F input power
// returns 35 F input power, consistent units
{
float inp35 = inp17 + 0.6f * (inp47 - inp17);
if (rs_HasDefrost())
inp35 *= 0.985f; // defrost power reduction
return inp35;
} // RSYS::rs_Inp35Default
//-----------------------------------------------------------------------------
#if 0
float RSYS::rs_RunFAdjustedEffHtASHP()
{
float effHt;
Expand All @@ -3467,6 +3494,7 @@ float RSYS::rs_RunFAdjustedEffHtASHP()
}
return effHt;
} // RSYS::rs_RunFAdjustedEffHtASHP
#endif
//-----------------------------------------------------------------------------
RC RSYS::rs_CalcInputsAndSlopesASHP()
// uses: rs_cap/COP 47/17
Expand All @@ -3476,9 +3504,7 @@ RC RSYS::rs_CalcInputsAndSlopesASHP()
rs_inp17 = rs_cap17 / max( rs_COP17, .1f);

if (!IsSet( RSYS_COP35))
{ rs_inp35 = rs_inp17 + 0.6f * (rs_inp47 - rs_inp17);
if (rs_HasDefrost())
rs_inp35 *= 0.985f; // defrost power reduction
{ rs_inp35 = rs_Inp35Default( rs_inp47, rs_inp17);
rs_COP35 = rs_cap35 / max( rs_inp35, .1f);
}
else
Expand All @@ -3492,21 +3518,31 @@ RC RSYS::rs_CalcInputsAndSlopesASHP()

// similar setup for variable capacity (ASHPVC)
// unused if not ASHPVC
if (rs_runFMin < 1.f)
{ if (!IsSet(RSYS_COPMIN47))
if (rs_IsASHPVC())
{ // min spd capacities
float capMin47 = rs_CapMin47();
float capMin17 = rs_CapMin17();
float capMin35 = rs_Cap35Default(capMin47, capMin17);

// min spd COP and input
if (!IsSet(RSYS_COPMIN47))
rs_COPMin47 = rs_COP47;
if (!IsSet(RSYS_COPMIN35))
rs_COPMin35 = rs_COP35;
if (!IsSet(RSYS_COPMIN17))
rs_COPMin17 = rs_COP17;

float inpMin47 = rs_cap47 * rs_runFMin / max(rs_COPMin47, .1f);
float inpMin35 = rs_cap35 * rs_runFMin / max(rs_COPMin35, .1f);
float inpMin17 = rs_cap17 * rs_runFMin / max(rs_COPMin17, .1f);
float inpMin47 = capMin47 / max(rs_COPMin47, .1f);
float inpMin17 = capMin17 / max(rs_COPMin17, .1f);

float inpMin35;
if (!IsSet(RSYS_COPMIN35))
{ inpMin35 = rs_Inp35Default(inpMin47, inpMin17);
rs_COPMin35 = capMin35 / max(inpMin35, .1f);
}
else
inpMin35 = capMin35 / max(rs_COPMin35, .1f);

rs_ASHPInpMinF[0] = (inpMin47 - inpMin17) / (47.f - 17.f);
rs_ASHPInpMinF[1] = (inpMin35 - inpMin17) / (35.f - 17.f);

rs_ASHPInpMinF[1] = (inpMin35 - inpMin17) / (35.f - 17.f);
}

return RCOK;
Expand Down Expand Up @@ -3874,7 +3910,7 @@ int RSYS::rs_IsModeAvailable(
// set mode-specific air flow
rs_amf = rsMode == rsmHEAT ? rs_amfH
: rsMode == rsmCOOL ? rs_amfC
: rsMode == rsmOAV ? rs_amfOAV
: rsMode == rsmOAV ? rs_amfOAV
: 0.;
if (rs_amf < .0001)
ret = -1; // no air available
Expand Down Expand Up @@ -3999,8 +4035,7 @@ int RSYS::rs_SupplyAirState( // current conditioning capabilities
else if (rs_mode == rsmHEAT)
{ rs_asOut = rs_asIn; // init to entering state
if (auszMode == rsmHEAT && Top.tp_pass1A)
{
// autosize warmup: assume fixed temp rise
{ // autosize warmup: assume fixed temp rise
rs_asOut.as_tdb = rs_asRet.as_tdb + rs_tdDesH;
rs_effHt = 1.; // need nz value, else ASHP assumes compressor off
}
Expand Down Expand Up @@ -4395,13 +4430,13 @@ RC RSYS::rs_FinalizeSh()
rs_PLF = 1.f - rs_CdH * (1.f - runFx);
rs_COPHtAdj = rs_inpHtMin <= 0.f
? 2.5f // rs_inpHtMin can be 0 during autosize
: rs_capHtMin * rs_PLF / rs_inpHtMin;
: rs_FEffH * rs_capHtMin * rs_PLF / rs_inpHtMin;
rs_inPrimary = rs_capHtMin / rs_COPHtAdj;
}
else
{ // variable capacity: intermediate speed
float runFx = (rs_runF - rs_runFMin) / (1.f - rs_runFMin);
rs_inPrimary = rs_inpHt * runFx + rs_inpHtMin * (1.f - runFx);
rs_inPrimary = (rs_inpHt * runFx + rs_inpHtMin * (1.f - runFx)) / rs_FEffH;
rs_COPHtAdj = rs_inPrimary <= 0.f
? 2.5f // rs_inPrimary can be 0 during autosize
: rs_outSen / rs_inPrimary;
Expand Down
8 changes: 7 additions & 1 deletion src/CNRECS.DEF
Original file line number Diff line number Diff line change
Expand Up @@ -3089,7 +3089,7 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
*declare "RC rs_PerfMapAC();"
*declare "RC rs_PerfDataASHP();"
*declare "void rs_PerfDataASHP1( FILE* f, float tDbOut);"
*declare "float rs_PerfASHP( int ashpModel, float tDbOut, float& COP, float fanHAdj);"
*declare "float rs_PerfASHP( int ashpModel, float tDbOut, float& COP, float fanHAdj=0.f);"
*declare "float rs_PerfASHP2( int ashpModel, float tDbOut, float fanHAdj, float& capHt, float& inpHt, float& capDfHt, float& capHtMin, float& inpHtMin, float& capDfHtMin, float COPAdjF=1.f);"
*declare "int rs_IsASHP() const { return rs_type == C_RSYSTYCH_ASHP || rs_type == C_RSYSTYCH_ASHPPKGRM || rs_IsASHPHydronic() || rs_IsASHPVC(); }"
*declare "int rs_IsASHPHydronic() const { return rs_type == C_RSYSTYCH_ASHPHYD; }"
Expand All @@ -3112,6 +3112,8 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
*declare "static float rs_DHR( float capHt);"
*declare "RC rs_SetupASHP();"
*declare "float rs_Cap17RatioASHP() const;"
*declare "float rs_Cap35Default( float cap47, float cap17) const;"
*declare "float rs_Inp35Default( float inp47, float inp17) const;"
*declare "RC rs_CalcInputsAndSlopesASHP();"
*declare "void rs_AuszFinalASHP();"
*declare "float rs_CapEffASHP( float tdbout=-999.f, int ashpModel=0, float fanHRtd=-1.f, float fanHOpr=-1.f, float COPAdjF=-1.f);"
Expand Down Expand Up @@ -3216,6 +3218,8 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
// re ASHPVC (variable capacity)
*f *e FRAC_GZ rs_runFMin; // minimum run fraction fraction
// (cycles below this)
*declare "float rs_CapMin47() const { return rs_cap47*rs_runFMin; }"
*declare "float rs_CapMin17() const { return rs_cap17*rs_runFMin; }"
*f *e FLOAT_GZ rs_COPMin47 // COP at ODB=47 F, min speed
*f *e FLOAT_GZ rs_COPMin35 // ditto 35 F
*f *e FLOAT_GZ rs_COPMin17 // ditto 17 F
Expand Down Expand Up @@ -3303,7 +3307,9 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
*s *e FLOAT rs_SHR; // cooling sensible heat ratio (derived using coil model)

*f FRAC rs_fChg // refrigerant charge factor (default 1, 0.9 or 0.96 for CA compliance)
// multiplies cooling capacity (no effect on heating)
*f FRAC rs_fSize // compressor sizing factor (default 1, 0.95 or 1 for CA compliance)
// multiples cooling capacity (no effect on heating)
*f FLOAT rs_fanHRtdC // fan heat included in rated rs_cap95, Btuh
*f FLOAT rs_capnfX; // constant for rs_capCt calc
*f FLOAT rs_capAdjF;
Expand Down