Skip to content

Commit d9b9802

Browse files
committed
Fix ACPMCOMBINEDHEATDHW; RSYS PERFORMANCEMAP documentation"
1 parent 41287bb commit d9b9802

File tree

7 files changed

+634
-554
lines changed

7 files changed

+634
-554
lines changed

doc/src/cse-user-manual.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ sections:
7979
- [2, "records/doas.md"]
8080
- [2, "records/rsys.md"]
8181
- [2, "records/ductseg.md"]
82-
- [2, "records/perfmap.md"]
82+
- [2, "records/performancemap.md"]
8383
- [2, "records/dhwdayuse.md"]
8484
- [2, "records/dhwuse.md"]
8585
- [2, "records/dhwsys.md"]
File renamed without changes.

doc/src/records/rsys.md

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ ASHPHYDRONIC, Air-to-water heat pump with hydronic distribution. Compressor perf
2929
ASHPPM, Air-to-air heat pump modeled per PERFORMANCMAPs specified via rsPerfMapHtg and rsPerfMapClg.
3030
WSHP, Water-to-air heat pump.
3131
AC, Compressor-based cooling; no heating. Required ratings are SEER and capacity and EER at 95 ^o^F outdoor dry bulb.
32+
ACPM, Compressor-based cooling modeled per PERFORMANCEMAP specified in rsPerfMapClg; no heating.
3233
ACPKGROOM, Packaged compressor-based cooling; no heating. Required ratings are capacity and EER at 95 ^o^F outdoor dry bulb.
3334
FURNACE, Fuel-fired heating. Primary heating input energy is accumulated to end use HTG of meter rsFuelMtr.
3435
RESISTANCE, Electric heating. Primary heating input energy is accumulated to end use HTG of meter rsElecMtr.
3536
ACPKGROOMFURNACE, Packaged room cooling and (separate) furnace heating.
3637
ACPKGROOMRESISTANCE, Packaged room cooling and electric resistance heating.
3738
COMBINEDHEATDHW, Combined heating / DHW. Use rsCHDHWSYS to specify the DHWSYS that provides hot water to the coil in this RSYS. No cooling.
38-
ACCOMBINEDHEATDHW, Compressor-based cooling plus COMBINEDHEATDHW heating.
39+
ACCOMBINEDHEATDHW, Compressor-based cooling; COMBINEDHEATDHW heating.
40+
ACPMCOMBINEDHEATDHW, Compressor-based cooling modeled per PERFORMANCEMAP specified in rsPerfMapClg; COMBINEDHEATDHW heating.
3941
FANCOIL, Coil-based heating and cooling. No primary (fuel-using) equipment is modeled. rsLoadMtr, rsHtgLoadMtr, and rsClgLoadMtr are typically used to record loads for linking to an external model.
4042
END
4143
%>
@@ -182,7 +184,7 @@ DHWSYS hot water source for this RSYS, required when rsType is COMBINEDHEATDHW o
182184

183185
<%= member_table(
184186
units: "",
185-
legal_range: "Name of DHWSYS",
187+
legal_range: "Name of a DHWSYS",
186188
default: "*none*",
187189
required: "if combined heat/DHW",
188190
variability: "constant") %>
@@ -369,8 +371,26 @@ For WSHP only: ratio of rsCapC to rsCapH. Used to derive capacity during autosi
369371

370372
**rsPerfMapHtg=*performanceMapName***
371373

374+
Specifies the heating performance PERFORMANCEMAP for RSYSs having rsType=ASHPPM. The PERFORMANCEMAP must have grid variables outdoor drybulb and compressor speed (in that order) and lookup values of net capacity ratios and COP. See example in PERFORMANCEMAP.
375+
376+
<%= member_table(
377+
units: "",
378+
legal_range: "Name of a PERFORMANCEMAP",
379+
default: "",
380+
required: "if rsType specifies a performance map model",
381+
variability: "Start of a run") %>
382+
372383
**rsPerfMapClg=*performanceMapName***
373384

385+
Specifies the cooling performance PERFORMANCEMAP for RSYSs having rsType=ASHPPM, ACPM, ACPMFURNACE, ACPMRESISTANCE, or ACPMCOMBINEDHEATDHW. The PERFORMANCEMAP must have grid variables outdoor drybulb and compressor speed (in that order) and lookup values of net capacity ratios and COP. See example in PERFORMANCEMAP.
386+
387+
<%= member_table(
388+
units: "",
389+
legal_range: "Name of a PERFORMANCEMAP",
390+
default: "",
391+
required: "if rsType specifies a performance map model",
392+
variability: "Start of a run") %>
393+
374394
**rsTypeAuxH=*choice***
375395

376396
For rsType=ASHP, type of auxiliary heat. Auxiliary heating is used when heatpump capacity is insufficient to maintain zone temperature and during reverse-cycle defrost operation (if rsDefrostModel=REVCYCLEAUX). If rsTypeAuxH=Furnace, energy use for auxiliary heat is accumulated to end use HPBU of meter rsFuelMtr (if specified). If rsTypeAuxH=Resistance, energy use for auxiliary heat is accumulated to end use HPBU of meter rsElecMtr (if specified).

src/CNRECS.DEF

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,9 +3453,11 @@ RECORD RSYS "RSYS" *RAT // residential HVAC system
34533453
*declare "int rs_IsASHPHydronic() const { return rs_type == C_RSYSTY_ASHPHYD; }"
34543454
*declare "bool rs_IsWSHP() const { return rs_type == C_RSYSTY_WSHP; }"
34553455
*declare "bool rs_IsHP() const { return rs_IsASHP() || rs_IsWSHP(); }"
3456-
*declare "bool rs_IsPMHtg() const { return rs_IsASHPPM() || rs_IsCHDHW(); }"
3456+
*declare "bool rs_IsPMHtg() const { return rs_IsASHPPM(); }"
34573457
*declare "bool rs_IsPMClg() const { return rs_IsASHPPM() || rs_type==C_RSYSTY_ACPM || rs_type==C_RSYSTY_ACPMFURN || rs_type==C_RSYSTY_ACPMRES || rs_type == C_RSYSTY_ACPMCHDHW; }"
3458-
*declare "bool rs_IsVC() const { return rs_IsPMHtg() || rs_IsPMClg(); }"
3458+
*declare "bool rs_IsVCHtg() const { return rs_IsPMHtg() || rs_IsCHDHW(); }"
3459+
*declare "bool rs_IsVCClg() const { return rs_IsPMClg(); }"
3460+
*declare "bool rs_IsVC() const { return rs_IsVCHtg() || rs_IsVCClg(); }"
34593461
*declare "bool rs_IsVCMode( int rsMode) const { return rsMode==rsmHEAT ? rs_IsPMHtg() : rsMode==rsmCOOL ? rs_IsPMClg() : false; }"
34603462
*declare "bool rs_IsFanCoil() const { return rs_type == C_RSYSTY_FANCOIL; }"
34613463
*declare "bool rs_IsCHDHW() const { return rs_type == C_RSYSTY_CHDHW || rs_type == C_RSYSTY_ACCHDHW || rs_type == C_RSYSTY_ACPMCHDHW; }"

src/cnloads.cpp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3532,17 +3532,20 @@ RC RSYS::rs_SetupCapC( // derive constants that depend on capacity
35323532

35333533
if (rs_Is1Spd())
35343534
{
3535-
// base value for SEERnf and EERnf calculations
3536-
// used only for single speed
3535+
// ratings for 82 F and 115 F (reporting only)
35373536
float SHR = CoolingSHR(82.f, 80.f, 67.f, 400.f);
3538-
float capF = CoolingCapF1Spd(SHR, 82.f, 80.f, 67.f, 400.f);
3539-
3540-
float inpFSEER;
3541-
float inpFEER = CoolingInpF1Spd(SHR, 82.f, 80.f, 67.f, 400.f, inpFSEER);
3542-
3543-
rs_cap82 = capF * rs_cap95;
3537+
rs_cap82 = rs_cap95 * CoolingCapF1Spd(SHR, 82.f, 80.f, 67.f, 400.f);
35443538
rs_COP82 = rs_SEER / 3.413f;
3539+
3540+
SHR = CoolingSHR(115.f, 80.f, 67.f, 400.f);
3541+
rs_cap115 = rs_cap95 * CoolingCapF1Spd(SHR, 115.f, 80.f, 67.f, 400.f);
3542+
float inpFSEER;
3543+
float inpFEER = CoolingInpF1Spd(SHR, 115.f, 80.f, 67.f, 400.f, inpFSEER);
3544+
float inp115 = inpFEER * rs_cap95 / (rs_EER95/3.413f);
3545+
rs_COP115 = rs_cap115 / inp115;
35453546

3547+
// base value for SEERnf and EERnf calculations
3548+
// used only for single speed
35463549
float inpX = 1.09f * rs_cap95 / rs_SEER - rs_fanHRtdC / 3.413f; // input power, W
35473550
rs_SEERnfX = inpX > 0.f ? rs_fChg * (1.09f * rs_cap95 + rs_fanHRtdC) / inpX
35483551
: rs_SEER;
@@ -4604,7 +4607,7 @@ RC RSYS::rs_SetupASHP() // set ASHP defaults and derived parameters
46044607
? 0.f
46054608
: rs_FanPwrRated(0, rs_cap47, PMSPEED::RATED);
46064609

4607-
if (!rs_IsPMHtg())
4610+
if (!rs_IsVCHtg())
46084611
{ // capacities
46094612
if (!IsSet(RSYS_CAP17) || rs_IsPkgRoom())
46104613
rs_cap17 = max(rs_CapRat1747()*rs_cap47, 1.f);
@@ -4935,15 +4938,17 @@ RC RSYS::rs_SetRatingsVCClg() // derive cooling ratings
49354938
RC rc = RCOK;
49364939

49374940
if (rs_IsPMClg())
4938-
{ rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(82.f, rs_cap82, rs_COP82);
4941+
{ float cap; // temporary for return values
4942+
4943+
rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(82.f, cap, rs_COP82);
4944+
rs_cap82 = abs(cap);
49394945

4940-
float cap95;
4941-
rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(95.f, cap95, rs_COP95);
4946+
rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(95.f, cap, rs_COP95);
49424947
rs_EER95 = rs_COP95 * BtuperWh;
4948+
rc |= rs_CheckPMRatingConsistency(rs_cap95, abs( cap), "cap95", rs_perfMapClgi);
49434949

4944-
rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(115.f, rs_cap115, rs_COP115);
4945-
4946-
rc |= rs_CheckPMRatingConsistency(rs_cap95, abs( cap95), "cap95", rs_perfMapClgi);
4950+
rc |= rs_pPMACCESS[1]->pa_GetRatedCapCOP(115.f, cap, rs_COP115);
4951+
rs_cap115 = abs(cap);
49474952

49484953
}
49494954
else
@@ -4953,13 +4958,14 @@ RC RSYS::rs_SetRatingsVCClg() // derive cooling ratings
49534958

49544959
} // RSYS::rs_SetRatingsVCClg
49554960
//-----------------------------------------------------------------------------
4956-
RC RSYS::rs_CheckPMRatingConsistency(
4961+
RC RSYS::rs_CheckPMRatingConsistency( // verify performance map <-> rating consistency
49574962
float ratingExp, // expected value
49584963
float ratingPM, // value generated from performance map
49594964
const char* what, // name of rating, e.g. "cap47"
49604965
TI iPM) const // source performance map
4966+
// returns RCOK iff performance map generated value matches expected
4967+
// else nz (performance map not correctly normalized?)
49614968
{
4962-
49634969
RC rc = RCOK;
49644970

49654971
if (frDiff(ratingPM, ratingExp) > 0.001f)
@@ -4972,7 +4978,6 @@ RC RSYS::rs_CheckPMRatingConsistency(
49724978
}
49734979

49744980
return rc;
4975-
49764981
} // RSYS::rs_CheckPMRatingConsistency
49774982
//-----------------------------------------------------------------------------
49784983
float RSYS::rs_CapEffASHP( // performance at current conditions
@@ -5341,7 +5346,7 @@ void RSYS::rs_SetSpeedFMin() // determine current minimum speedF
53415346
{
53425347
if (rs_mode == rsmOFF)
53435348
rs_speedFMin = 0.f;
5344-
else if (!rs_IsCHDHW())
5349+
else if (!(rs_IsCHDHW() && rs_mode==rsmHEAT))
53455350
{
53465351
if (rs_IsVCMode(rs_mode))
53475352
rs_speedFMin = rs_pPMACCESS[rs_mode == rsmCOOL]->pa_GetSpeedFMin();

test/chdhw.cse

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7128,6 +7128,30 @@ ALTER DHWSYS "HWSYS"
71287128
hourval(.50,.50,.50,.50,.50,.50,.50,.30,.95,.95,.95,.95,.95,.95,.95,.95,.95,.50,.50,.50,.50,.50,.50,.50),
71297129
default
71307130
hourval(.15,.15,.15,.15,.15,.15,.15,.15,.15,.15,.15,.15,.15,.60,.60,.60,.15,.15,.15,.15,.15,.15,.15,.15))
7131+
7132+
ALTER RSYS "rsys1" rsType=ACPMCOMBINEDHEATDHW rsPerfMapClg = "PMClg"
7133+
7134+
PERFORMANCEMAP "PMClg"
7135+
7136+
PMGRIDAXIS "ClgDBT" pmGXType = "DBT" pmGXValues = 60, 82, 95, 115 pmGXRefValue = 95
7137+
PMGRIDAXIS "ClgSpeed" pmGXType = "Speed" pmGXValues = 1, 2, 3 pmGXRefValue = 2
7138+
7139+
// Capacity ratio = net total capacity / net rated total capacity
7140+
PMLOOKUPDATA LUClgCapRat pmLUType = "CapRat" pmLUValues =
7141+
0.48, 1.13, 1.26, // 60F at min, mid, max speed
7142+
0.42, 1.05, 1.17, // 82F
7143+
0.39, 1.00, 1.12, // 95F
7144+
0.34, 0.92, 1.04 // 115F
7145+
7146+
// COP = net total COP
7147+
PMLOOKUPDATA LUClgCOP pmLUType = "COP" pmLUValues =
7148+
14.22, 16.44, 15.00, // 60F at min, mid, max speed
7149+
7.93, 7.59, 6.71, // 82F
7150+
6.01, 5.58, 4.91, // 95F
7151+
4.12, 3.82, 3.34 // 115F
7152+
7153+
endPERFORMANCEMAP
7154+
71317155
RUN
71327156

71337157

0 commit comments

Comments
 (0)