@@ -3134,14 +3134,16 @@ float RSYS::rs_PerfASHP( // ASHP performance (simplified call)
31343134 // else model defrost if available
31353135 float tdbOut, // outdoor dry bulb, F
31363136 float & COP, // returned: compressor-only full speed COP at tdbOut
3137- float fanHAdj) // fan power adjustment, Btuh
3137+ float fanHAdj /* =0.f */ ) // fan power adjustment, Btuh
31383138 // removed from capacity and input (before COP calc)
31393139// returns total heating capacity (compressor + capDefrostHt), Btuh
31403140{
31413141 float capHt, inpHt, capDfHt, capHtMin, inpHtMin, capDfHtMin;
31423142 float what = rs_PerfASHP2 (ashpModel, tdbOut, fanHAdj,
31433143 capHt, inpHt, capDfHt, capHtMin, inpHtMin, capDfHtMin);
31443144
3145+ COP = inpHt > 0 .f ? capHt / inpHt : 0 .f ;
3146+
31453147 return capHt;
31463148
31473149} // RSYS::rs_PerfASHP
@@ -3347,10 +3349,7 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
33473349 rs_cap17 = max ( rs_Cap17RatioASHP ()*rs_cap47, 1 .f );
33483350
33493351 if (!IsSet (RSYS_CAP35))
3350- { rs_cap35 = rs_cap17 + 0 .6f * (rs_cap47 - rs_cap17);
3351- if (rs_HasDefrost ())
3352- rs_cap35 *= 0 .9f ; // capacity reduction for defrost
3353- }
3352+ rs_cap35 = rs_Cap35Default (rs_cap47, rs_cap17);
33543353
33553354#if ASHP_COPREG == 1
33563355 // "traditional" model
@@ -3418,9 +3417,10 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
34183417 rs_CalcInputsAndSlopesASHP ();
34193418
34203419#if 1 && defined ( _DEBUG)
3420+ // back-calc checks
34213421 float COP;
3422- float capHt = rs_PerfASHP (0 , 47 .f , COP, 0 . f );
3423- capHt = rs_PerfASHP (0 , 17 .f , COP, 0 . f );
3422+ float capHt = rs_PerfASHP (0 , 47 .f , COP);
3423+ capHt = rs_PerfASHP (0 , 17 .f , COP);
34243424#endif
34253425
34263426 return rc;
@@ -3450,6 +3450,28 @@ x float capRat = 0.6280951f;
34503450 return capRat;
34513451} // RSYS::rs_Cap17RatioASHP
34523452// -----------------------------------------------------------------------------
3453+ float RSYS::rs_Cap35Default ( // default 35 F heating capacity
3454+ float cap47, // 47 F heating capacity, any power units
3455+ float cap17) const // 17 F heating capacity
3456+ // returns 35 F heating capacity, consistent units
3457+ {
3458+ float cap35 = cap17 + 0 .6f * (cap47 - cap17);
3459+ if (rs_HasDefrost ())
3460+ cap35 *= 0 .9f ; // capacity reduction for defrost
3461+ return cap35;
3462+ } // RSYS::rs_Cap35Default
3463+ // -----------------------------------------------------------------------------
3464+ float RSYS::rs_Inp35Default ( // default 35 F input power
3465+ float inp47, // 47 F input power, any power units
3466+ float inp17) const // 17 F input power
3467+ // returns 35 F input power, consistent units
3468+ {
3469+ float inp35 = inp17 + 0 .6f * (inp47 - inp17);
3470+ if (rs_HasDefrost ())
3471+ inp35 *= 0 .985f ; // defrost power reduction
3472+ return inp35;
3473+ } // RSYS::rs_Inp35Default
3474+ // -----------------------------------------------------------------------------
34533475float RSYS::rs_RunFAdjustedEffHtASHP ()
34543476{
34553477 float effHt;
@@ -3476,9 +3498,7 @@ RC RSYS::rs_CalcInputsAndSlopesASHP()
34763498 rs_inp17 = rs_cap17 / max ( rs_COP17, .1f );
34773499
34783500 if (!IsSet ( RSYS_COP35))
3479- { rs_inp35 = rs_inp17 + 0 .6f * (rs_inp47 - rs_inp17);
3480- if (rs_HasDefrost ())
3481- rs_inp35 *= 0 .985f ; // defrost power reduction
3501+ { rs_inp35 = rs_Inp35Default ( rs_inp47, rs_inp17);
34823502 rs_COP35 = rs_cap35 / max ( rs_inp35, .1f );
34833503 }
34843504 else
@@ -3492,17 +3512,28 @@ RC RSYS::rs_CalcInputsAndSlopesASHP()
34923512
34933513 // similar setup for variable capacity (ASHPVC)
34943514 // unused if not ASHPVC
3495- if (rs_runFMin < 1 .f )
3496- { if (!IsSet (RSYS_COPMIN47))
3515+ if (rs_IsASHPVC ())
3516+ { // min spd capacities
3517+ float capMin47 = rs_CapMin47 ();
3518+ float capMin17 = rs_CapMin17 ();
3519+ float capMin35 = rs_Cap35Default (capMin47, capMin17);
3520+
3521+ // min spd COP and input
3522+ if (!IsSet (RSYS_COPMIN47))
34973523 rs_COPMin47 = rs_COP47;
3498- if (!IsSet (RSYS_COPMIN35))
3499- rs_COPMin35 = rs_COP35;
35003524 if (!IsSet (RSYS_COPMIN17))
35013525 rs_COPMin17 = rs_COP17;
35023526
3503- float inpMin47 = rs_cap47 * rs_runFMin / max (rs_COPMin47, .1f );
3504- float inpMin35 = rs_cap35 * rs_runFMin / max (rs_COPMin35, .1f );
3505- float inpMin17 = rs_cap17 * rs_runFMin / max (rs_COPMin17, .1f );
3527+ float inpMin47 = capMin47 / max (rs_COPMin47, .1f );
3528+
3529+ float inpMin35;
3530+ if (!IsSet (RSYS_COPMIN35))
3531+ { inpMin35 = rs_Inp35Default (inp47, inp17);
3532+ rs_COPMin35 = capMin35 / max (inpMin35, .1f );
3533+ }
3534+ else
3535+ inpMin35 = capMin35 / max (rs_COPMin35, .1f );
3536+ float inpMin17 = capMin17 / max (rs_COPMin17, .1f );
35063537
35073538 rs_ASHPInpMinF[0 ] = (inpMin47 - inpMin17) / (47 .f - 17 .f );
35083539 rs_ASHPInpMinF[1 ] = (inpMin35 - inpMin17) / (35 .f - 17 .f );
0 commit comments