Skip to content

Commit 22e5705

Browse files
committed
Pass tank heat from solar (qTX) via DHWTICK struct
1 parent bda3317 commit 22e5705

File tree

4 files changed

+52
-47
lines changed

4 files changed

+52
-47
lines changed

src/CNRECS.DEF

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4438,11 +4438,10 @@ RECORD HPWHLINK "HPWHLink" *SUBSTRUCT // Ecotope's HPWH tank and heater
44384438
*declare "double hw_GetTankAvgTemp( int iNode0=0, int nNodes=999) const;"
44394439
*declare "double hw_GetEstimatedTOut() const;"
44404440
*declare "double hw_GetCHDHWTSupply() const;"
4441-
*declare "void hw_SetQTX( float qTX);"
44424441
*declare "RC hw_DoHour( float& tSetpoint, float targetSoC);"
44434442
*declare "RC hw_DoSubhrStart( float tEx, float tASHPSrc=-999.f);"
44444443
*declare "RC hw_DoSubhrTick( DHWTICK& tk, float tInlet, float scaleWH=1.f, float tMix=-1., float tMains=-1.f, float* pTOutNoMix=NULL, int drStatus=0);"
4445-
*declare "RC hw_DoSubhrTick( int iTk, float draw, float tInlet, float* pTOut, float scaleWH=1.f);"
4444+
*declare "RC hw_DoSubhrTick( int iTk, float draw, float tInlet, float qTX, float* pTOut, float scaleWH=1.f);"
44464445
*declare "RC hw_DoSubhrEnd( float mult, ZNR* pZn, ZNR* pZnASHPSrc);"
44474446

44484447
*declare "record* hw_pOwner;" // owner (DHWHEATER, DHWSOLARSYS, ...)
@@ -4454,12 +4453,10 @@ RECORD HPWHLINK "HPWHLink" *SUBSTRUCT // Ecotope's HPWH tank and heater
44544453
*s FLOAT hw_tEx; // tank surround temp, F
44554454
*s FLOAT hw_tASHPSrc; // temp of heat pump air source, F
44564455

4457-
*s *e FLOAT_GEZ hw_qTXTick; // current tick extra tank heat added lower tank nodes, Btu
4458-
// used re e.g. solar water heating tanks
4459-
// note <0 (tank cooling) not supported
44604456
*r INT hw_nQTXNodes // # of tank 1/12s used in hw_qTX extra tank heat
44614457
// corresponds to nodes for HPWH default 12 node setup
4462-
*declare "std::vector< double>* hw_pNodePowerExtra_W;" // runtime extra tank heat linkage to HPWH
4458+
*declare "std::vector< double> hw_pNodePowerExtra_W;" // runtime extra tank heat linkage to HPWH
4459+
44634460
*h FLOAT hw_fMixUse; // factor for draw adjustment re HPWH setpoint > DHWSYS::ws_tUse
44644461
// Some HPWHs (e.g. Sanden) have fixed (high) setpoints
44654462
// draws are reduced to balance load at ws_tUse.

src/dhwcalc.cpp

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,9 @@ struct DHWTICK // per tick info for DHWSYS
402402
// = primary heater draw when DHWLOOPHEATER is present
403403
float wtk_qDWHR; // DWHR heat added, Btu
404404
float wtk_qSSF; // ws_SSF heat added, Btu
405+
float wtk_qTX; // extra heat added lower tank nodes, Btu
406+
// used re e.g. solar water heating tanks
407+
// note <0 (tank cooling) not supported
405408

406409

407410
DHWTICK() { wtk_Init(); }
@@ -2698,8 +2701,6 @@ void HPWHLINK::hw_Cleanup()
26982701
hw_pHPWH = NULL;
26992702
delete[] hw_HSMap;
27002703
hw_HSMap = NULL;
2701-
delete hw_pNodePowerExtra_W;
2702-
hw_pNodePowerExtra_W = NULL;
27032704
if (hw_pFCSV)
27042705
{ fclose( hw_pFCSV);
27052706
hw_pFCSV = nullptr;
@@ -3293,13 +3294,6 @@ double HPWHLINK::hw_GetCHDHWTSupply() const // available CHDHW supply water temp
32933294
return tSupply;
32943295
} // HPWHLINK::hw_GetCHDHWTSupply()
32953296
//-----------------------------------------------------------------------------
3296-
void HPWHLINK::hw_SetQTX(
3297-
float qTX) // additional heat to be added for current tick
3298-
{
3299-
hw_qTXTick = qTX;
3300-
3301-
} // HPWHLINK::hw_SetQTX
3302-
//-----------------------------------------------------------------------------
33033297
RC HPWHLINK::hw_DoHour( // hourly HPWH calcs
33043298
float& tSetpoint, // setpoint for current hour, F
33053299
// returned updated to reflect HPWH
@@ -3411,10 +3405,12 @@ RC HPWHLINK::hw_DoSubhrTick( // calcs for 1 tick, simplified call
34113405
int iTk, // tick within hour, 0 .. Top.nHRTicks()-1
34123406
float draw, // draw for tick, gal (not gpm)
34133407
float tInlet, // water inlet temp, F
3408+
float qTX, // heat added to tank for tick, Btu
34143409
float* tOut, // returned: water outlet temp, F (0 if no draw)
34153410
float scaleWH /*=1.f*/) // draw scale factor
34163411
{
34173412
DHWTICK tk(iTk);
3413+
tk.wtk_qTX = qTX;
34183414
tk.wtk_volIn = draw;
34193415
return hw_DoSubhrTick(tk, tInlet, scaleWH, -1.f, -1.f, tOut);
34203416
} // HPWHLINK::hw_DoSubhrTick
@@ -3482,6 +3478,20 @@ RC HPWHLINK::hw_DoSubhrTick( // calcs for 1 tick
34823478
drawLoss = drawRL = tRL = drawRC = tRC = 0.f;
34833479
}
34843480

3481+
#if 1
3482+
// extra tank heat: passed to HPWH as vector<double>* (or NULL)
3483+
// used to model e.g. heat addition via solar DHW heat exchanger
3484+
std::vector< double>* pNPX = NULL;
3485+
if (tk.wtk_qTX > 0.f) // ignore tank "cooling"
3486+
{
3487+
double qTXkWh = tk.wtk_qTX / BtuperkWh;
3488+
hw_qTX += qTXkWh; // subhour total (kWh)
3489+
double qTXPwr // tick power per node, W
3490+
= qTXkWh * 1000. / (hw_nQTXNodes * Top.tp_tickDurHr);
3491+
hw_pNodePowerExtra_W.assign(hw_nQTXNodes, qTXPwr);
3492+
pNPX = &hw_pNodePowerExtra_W;
3493+
}
3494+
#else
34853495
// extra tank heat: passed to HPWH as vector<double>* (or NULL)
34863496
// used to model e.g. heat addition via solar DHW heat exchanger
34873497
std::vector< double>* pNPX = NULL;
@@ -3495,6 +3505,7 @@ RC HPWHLINK::hw_DoSubhrTick( // calcs for 1 tick
34953505
hw_pNodePowerExtra_W->assign(hw_nQTXNodes, qTXPwr);
34963506
pNPX = hw_pNodePowerExtra_W;
34973507
}
3508+
#endif
34983509

34993510
int hpwhRet = hw_pHPWH->runOneStep(
35003511
DegFtoC(tInlet), // inlet temp, C
@@ -3626,7 +3637,7 @@ RC HPWHLINK::hw_DoSubhrTick( // calcs for 1 tick
36263637
UNTEMP, 5,
36273638
"tUse", tMix > 0.f ? tMix : CSVItem::ci_UNSET,
36283639
UNTEMP, 5,
3629-
"qTX", hw_qTXTick, UNENERGY3, 5,
3640+
"qTX", tk.wtk_qTX, UNENERGY3, 5,
36303641
"qEnv", KWH_TO_BTU(hw_pHPWH->getEnergyRemovedFromEnvironment()),
36313642
UNENERGY3, 5,
36323643
"qLoss", KWH_TO_BTU(hw_pHPWH->getStandbyLosses()),

src/dhwsolar.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,17 +305,14 @@ RC DHWSOLARSYS::sw_TickCalc(
305305
sw_scTOutlet = sw_scTInlet;
306306
}
307307

308-
sw_tank.hw_SetQTX( scQGain); // pass gain to tank model
309-
// (used in hw_DoSubhrTick)
310-
311308
// draws
312309
if (sw_tickVol > 0.f)
313310
{ sw_tankTInlet = sw_tickVolT / sw_tickVol;
314311
sw_drawVol += sw_tickVol;
315312
}
316313

317314
float tOut;
318-
rc |= sw_tank.hw_DoSubhrTick( iTk, sw_tickVol, sw_tankTInlet, &tOut);
315+
rc |= sw_tank.hw_DoSubhrTick( iTk, sw_tickVol, sw_tankTInlet, scQGain, &tOut);
319316

320317
if (tOut > 0.f)
321318
{ sw_tickTankTOutlet = tOut;

test/ref/ASHPPKGROOM.REP

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,13 +1287,13 @@ dhwheater Parent: dhwsys
12871287
whLDEF 6 23 0 0 1 2 0 1 0 0
12881288
whEff 6 32 0 0 1 2 0 1 0 0
12891289
whSBL 6 33 0 0 1 2 0 0 0 0
1290-
whFAdjElec 6 87 0 0 1763 2 0 1 0 0
1291-
whFAdjFuel 6 88 0 0 1763 2 0 1 0 0
1290+
whFAdjElec 6 86 0 0 1763 2 0 1 0 0
1291+
whFAdjFuel 6 87 0 0 1763 2 0 1 0 0
12921292
whPilotPwr 6 34 0 0 739 2 0 0 0 0
12931293
whParElec 6 35 0 0 739 2 0 0 0 0
1294-
whElecMtr 6 99 0 0 1 8192 meter 0 0 0 0
1295-
whFuelMtr 6 100 0 0 1 8192 meter 0 0 0 0
1296-
whxBUEndUse 6 101 0 0 1 16 nz 0 0 0
1294+
whElecMtr 6 98 0 0 1 8192 meter 0 0 0 0
1295+
whFuelMtr 6 99 0 0 1 8192 meter 0 0 0 0
1296+
whxBUEndUse 6 100 0 0 1 16 nz 0 0 0
12971297
endDHWHEATER 13 0 0 0 0 0 0 0 0 0
12981298

12991299

@@ -1332,13 +1332,13 @@ dhwloopheater Parent: dhwsys
13321332
whLDEF 6 23 0 0 1 2 0 1 0 0
13331333
whEff 6 32 0 0 1 2 0 1 0 0
13341334
whSBL 6 33 0 0 1 2 0 0 0 0
1335-
whFAdjElec 6 87 0 0 1763 2 0 1 0 0
1336-
whFAdjFuel 6 88 0 0 1763 2 0 1 0 0
1335+
whFAdjElec 6 86 0 0 1763 2 0 1 0 0
1336+
whFAdjFuel 6 87 0 0 1763 2 0 1 0 0
13371337
whPilotPwr 6 34 0 0 739 2 0 0 0 0
13381338
whParElec 6 35 0 0 739 2 0 0 0 0
1339-
whElecMtr 6 99 0 0 1 8192 meter 0 0 0 0
1340-
whFuelMtr 6 100 0 0 1 8192 meter 0 0 0 0
1341-
whxBUEndUse 6 101 0 0 1 16 nz 0 0 0
1339+
whElecMtr 6 98 0 0 1 8192 meter 0 0 0 0
1340+
whFuelMtr 6 99 0 0 1 8192 meter 0 0 0 0
1341+
whxBUEndUse 6 100 0 0 1 16 nz 0 0 0
13421342
endDHWHEATER 13 0 0 0 0 0 0 0 0 0
13431343

13441344

@@ -1461,15 +1461,15 @@ dhwsolarsys Parent: Top
14611461
swElecMtr 6 2 0 0 1 8192 meter 0 0 0 0
14621462
swEndUse 6 3 0 0 1 16 nz 0 0 0
14631463
swParElec 6 4 0 0 739 2 0 0 0 0
1464-
swSCFluidSpHt 6 57 0 0 1 2 0 0.9 0 0
1465-
swSCFluidDens 6 58 0 0 1 2 0 64 0 0
1466-
swTankHXEff 6 44 0 0 1 2 0 0.7 0 0
1467-
swTankTHxLimit 6 45 0 0 1 2 0 180 0 0
1468-
swTankVol 6 37 0 0 1 2 0 0 0 0
1469-
swTankUA 6 38 0 0 1 2 0 -1 0 0
1470-
swTankInsulR 6 39 0 0 1 2 0 12 0 0
1471-
swTankZone 6 40 0 0 1 8192 zone 0 0 0 0
1472-
swTankTEx 6 41 0 0 739 2 0 0 0 0
1464+
swSCFluidSpHt 6 56 0 0 1 2 0 0.9 0 0
1465+
swSCFluidDens 6 57 0 0 1 2 0 64 0 0
1466+
swTankHXEff 6 43 0 0 1 2 0 0.7 0 0
1467+
swTankTHxLimit 6 44 0 0 1 2 0 180 0 0
1468+
swTankVol 6 36 0 0 1 2 0 0 0 0
1469+
swTankUA 6 37 0 0 1 2 0 -1 0 0
1470+
swTankInsulR 6 38 0 0 1 2 0 12 0 0
1471+
swTankZone 6 39 0 0 1 8192 zone 0 0 0 0
1472+
swTankTEx 6 40 0 0 739 2 0 0 0 0
14731473
dhwsolarcollector 5 0 0 0 0 0 DHWSolarCollector 0 0 16 0
14741474
endDHWSOLARSYS 13 0 0 0 0 0 0 0 0 0
14751475

@@ -1986,7 +1986,7 @@ inverse Parent: Top
19861986
ivX 6 6 8 0 1771 2 0 0 0 0
19871987
ivY 6 7 8 0 1771 2 0 0 0 0
19881988
endInverse 13 0 0 0 0 0 0 0 0 0
1989-
! CSE 0.914.0+dhwbal.463bf40f.3.dirty for Win32 console
1989+
! CSE 0.914.0+dhwbal.bda3317d.4.dirty for Win32 console
19901990

19911991

19921992

@@ -3549,18 +3549,18 @@ Input for Run 001:
35493549

35503550

35513551

3552-
! CSE 0.914.0+dhwbal.463bf40f.3.dirty for Win32 console run(s) done: Thu 11-May-23 2:54:12 pm
3552+
! CSE 0.914.0+dhwbal.bda3317d.4.dirty for Win32 console run(s) done: Fri 12-May-23 3:56:48 pm
35533553

35543554
! Executable: d:\cse\msvc\cse.exe
3555-
! 11-May-23 2:51 pm (VS 14.29 2749952 bytes) (HPWH 1.21.0)
3555+
! 12-May-23 3:43 pm (VS 14.29 2749952 bytes) (HPWH 1.21.0)
35563556
! Command line: -x! -t1 ashppkgroom
35573557
! Input file: D:\cse\test\ashppkgroom.cse
35583558
! Report file: D:\cse\test\ashppkgroom.rep
35593559

35603560
! Timing info --
35613561

3562-
! Input: Time = 0.10 Calls = 2 T/C = 0.0495
3563-
! AutoSizing: Time = 0.30 Calls = 1 T/C = 0.2970
3564-
! Simulation: Time = 6.50 Calls = 1 T/C = 6.4970
3565-
! Reports: Time = 0.00 Calls = 1 T/C = 0.0020
3566-
! Total: Time = 6.90 Calls = 1 T/C = 6.9020
3562+
! Input: Time = 0.10 Calls = 2 T/C = 0.0500
3563+
! AutoSizing: Time = 0.29 Calls = 1 T/C = 0.2950
3564+
! Simulation: Time = 6.69 Calls = 1 T/C = 6.6890
3565+
! Reports: Time = 0.00 Calls = 1 T/C = 0.0030
3566+
! Total: Time = 7.09 Calls = 1 T/C = 7.0940

0 commit comments

Comments
 (0)