Revision history [back]
From OutputReportTabular.cc
, totalWater = totalOnsiteWater + gatherMains + StorageChange;
where gatherMains = Water Supplied by Utility
&
totalWater = Total On Site, Change in Storage, and Utility Water Sources
Meters Water:Facility
and MainsWater:Facility
can be used to understand above results. Report variables on these meters can be found in meter details file (*.mtd) and can be included in idf. Running the annual simulation gave the following Water Source Summary
summary
Reporting output variables from .mtd files for eters Water:Facility
and MainsWater:Facility
for runperiod gives the following results
So the difference between end use and mains water is entirely due to Rainwater and Graywater tanks. Both these tanks use Mains
to respond to fill requests made by float valve. If Type of Supply Controlled by Float Valve
is set to None
, then Total Water End Uses
will be identical to Water Supplied by Utility
.
Irrigation Water
, though supplied by Rainwater Tank
is showing identical Water Use Equipment Total Volume
and Water Use Equipment Mains Water Volume
. From WaterUse.cc
SetupOutputVariable( "Water Use Equipment Total Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "Water", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
SetupOutputVariable( "Water Use Equipment Mains Water Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "MainsWater", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
As can be seen from above, same output variable WaterEquipment( WaterEquipNum ).TotalVolume
is used for both the meters.
Looking further into WaterUse.cc
, the current code is
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
// Currently, the tank flow is not really starved--water continues to flow at the tank water temperature
// But the user can see the error by comparing report variables for TankVolFlowRate < ColdVolFlowRate
WaterConnections( WaterConnNum ).TankVolFlowRate = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
WaterConnections( WaterConnNum ).TankMassFlowRate = WaterConnections( WaterConnNum ).TankVolFlowRate * RhoH2O( DataGlobals::InitConvTemp );
}
Perhaps a proposed solution could be to calculate starved flow rate and use that for mains water flow rate as shown below.
RequestDemandVdot = 0.0;
StarvedVdot = 0.0;
TankSupplyVdot = 0.0;
AvailTankVdot = 0.0;
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
RequestDemandVdot = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
AvailTankVdot = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
TankSupplyVdot = RequestDemandVdot; // init
if ( AvailTankVdot < RequestDemandVdot ) { // calculate starved flow
StarvedVdot = RequestDemandVdot - AvailTankVdot;
TankSupplyVdot = AvailTankVdot;
}
}
WaterConnections( WaterConnNum ).TankVolFlowRate = TankSupplyVdot;
WaterConnections( WaterConnNum ).TankMassFlowRate = TankSupplyVdot * RhoH2O( DataGlobals::InitConvTemp );
And then StarvedVdot
should be reported for MainsWater
meter.
From OutputReportTabular.cc
, totalWater = totalOnsiteWater + gatherMains + StorageChange;
where gatherMains = Water Supplied by Utility
&
totalWater = Total On Site, Change in Storage, and Utility Water Sources
Meters Water:Facility
and MainsWater:Facility
can be used to understand above results. Report variables on these meters can be found in meter details file (*.mtd) and can be included in idf. Running the annual simulation gave the following Water Source Summary
summary
Reporting From the .mtd file
For Meter=Water:Facility [m3], ResourceType=Water, contents are:
WATER HEATER STRATIFIED:Water Heater Water Volume
BASE BATH BASIN:Water Use Equipment Total Volume
MAIN BATH BASIN 1:Water Use Equipment Total Volume
PARENTS BATH BASIN 1:Water Use Equipment Total Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Total Volume
KITCHEN BASIN:Water Use Equipment Total Volume
MAIN BATH TOILET:Water Use Equipment Total Volume
PARENTS BATH TOILET:Water Use Equipment Total Volume
BASE TOILET:Water Use Equipment Total Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Total Volume
BASE SHOWER:Water Use Equipment Total Volume
MAIN BATH:Water Use Equipment Total Volume
PARENT SHOWER:Water Use Equipment Total Volume
CLOTH WASHER:Water Use Equipment Total Volume
DISHWASHER:Water Use Equipment Total Volume
OUTSIDE UTILITY WATER:Water Use Equipment Total Volume
IRRIGATION WATER:Water Use Equipment Total Volume
For Meter=MainsWater:Facility [m3], ResourceType=MainsWater, contents are:
WATER HEATER STRATIFIED:Water Heater Mains Water Volume
RAINWATER TANK:Water System Storage Tank Mains Water Volume
GRAYWATER TANK:Water System Storage Tank Mains Water Volume
BASE BATH BASIN:Water Use Equipment Mains Water Volume
MAIN BATH BASIN 1:Water Use Equipment Mains Water Volume
PARENTS BATH BASIN 1:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Mains Water Volume
KITCHEN BASIN:Water Use Equipment Mains Water Volume
MAIN BATH TOILET:Water Use Equipment Mains Water Volume
PARENTS BATH TOILET:Water Use Equipment Mains Water Volume
BASE TOILET:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Mains Water Volume
BASE SHOWER:Water Use Equipment Mains Water Volume
MAIN BATH:Water Use Equipment Mains Water Volume
PARENT SHOWER:Water Use Equipment Mains Water Volume
CLOTH WASHER:Water Use Equipment Mains Water Volume
DISHWASHER:Water Use Equipment Mains Water Volume
OUTSIDE UTILITY WATER:Water Use Equipment Mains Water Volume
IRRIGATION WATER:Water Use Equipment Mains Water Volume
So reporting above output variables from .mtd files for eters for runperiod gives the following results
Water:Facility
and MainsWater:Facility
So the difference between end use and mains water is entirely due to Rainwater and Graywater tanks. Both these tanks use Mains
to respond to fill requests made by float valve. If Type of Supply Controlled by Float Valve
is set to None
, then Total Water End Uses
will be identical to Water Supplied by Utility
.
Irrigation Water
, though supplied by Rainwater Tank
is showing identical Water Use Equipment Total Volume
and Water Use Equipment Mains Water Volume
. From WaterUse.cc
SetupOutputVariable( "Water Use Equipment Total Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "Water", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
SetupOutputVariable( "Water Use Equipment Mains Water Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "MainsWater", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
As can be seen from above, same output variable WaterEquipment( WaterEquipNum ).TotalVolume
is used for both the meters.
Looking further into WaterUse.cc
, the current code is
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
// Currently, the tank flow is not really starved--water continues to flow at the tank water temperature
// But the user can see the error by comparing report variables for TankVolFlowRate < ColdVolFlowRate
WaterConnections( WaterConnNum ).TankVolFlowRate = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
WaterConnections( WaterConnNum ).TankMassFlowRate = WaterConnections( WaterConnNum ).TankVolFlowRate * RhoH2O( DataGlobals::InitConvTemp );
}
Perhaps a proposed solution could be to calculate starved flow rate and use that for mains water flow rate as shown below.follows
RequestDemandVdot = 0.0;
StarvedVdot = 0.0;
TankSupplyVdot = 0.0;
AvailTankVdot = 0.0;
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
RequestDemandVdot = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
AvailTankVdot = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
TankSupplyVdot = RequestDemandVdot; // init
if ( AvailTankVdot < RequestDemandVdot ) { // calculate starved flow
StarvedVdot = RequestDemandVdot - AvailTankVdot;
TankSupplyVdot = AvailTankVdot;
}
}
WaterConnections( WaterConnNum ).TankVolFlowRate = TankSupplyVdot;
WaterConnections( WaterConnNum ).TankMassFlowRate = TankSupplyVdot * RhoH2O( DataGlobals::InitConvTemp );
And then StarvedVdot
should be reported for MainsWater
meter.
From OutputReportTabular.cc
, totalWater = totalOnsiteWater + gatherMains + StorageChange;
where gatherMains = Water Supplied by Utility
&
totalWater = Total On Site, Change in Storage, and Utility Water Sources
Meters Water:Facility
and MainsWater:Facility
can be used to understand above results. Report variables on these meters can be found in meter details file (*.mtd) and can be included in idf. Running the annual simulation gave the following Water Source Summary
summary
From the .mtd file
For Meter=Water:Facility [m3], ResourceType=Water, contents are:
WATER HEATER STRATIFIED:Water Heater Water Volume
BASE BATH BASIN:Water Use Equipment Total Volume
MAIN BATH BASIN 1:Water Use Equipment Total Volume
PARENTS BATH BASIN 1:Water Use Equipment Total Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Total Volume
KITCHEN BASIN:Water Use Equipment Total Volume
MAIN BATH TOILET:Water Use Equipment Total Volume
PARENTS BATH TOILET:Water Use Equipment Total Volume
BASE TOILET:Water Use Equipment Total Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Total Volume
BASE SHOWER:Water Use Equipment Total Volume
MAIN BATH:Water Use Equipment Total Volume
PARENT SHOWER:Water Use Equipment Total Volume
CLOTH WASHER:Water Use Equipment Total Volume
DISHWASHER:Water Use Equipment Total Volume
OUTSIDE UTILITY WATER:Water Use Equipment Total Volume
IRRIGATION WATER:Water Use Equipment Total Volume
For Meter=MainsWater:Facility [m3], ResourceType=MainsWater, contents are:
WATER HEATER STRATIFIED:Water Heater Mains Water Volume
RAINWATER TANK:Water System Storage Tank Mains Water Volume
GRAYWATER TANK:Water System Storage Tank Mains Water Volume
BASE BATH BASIN:Water Use Equipment Mains Water Volume
MAIN BATH BASIN 1:Water Use Equipment Mains Water Volume
PARENTS BATH BASIN 1:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Mains Water Volume
KITCHEN BASIN:Water Use Equipment Mains Water Volume
MAIN BATH TOILET:Water Use Equipment Mains Water Volume
PARENTS BATH TOILET:Water Use Equipment Mains Water Volume
BASE TOILET:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Mains Water Volume
BASE SHOWER:Water Use Equipment Mains Water Volume
MAIN BATH:Water Use Equipment Mains Water Volume
PARENT SHOWER:Water Use Equipment Mains Water Volume
CLOTH WASHER:Water Use Equipment Mains Water Volume
DISHWASHER:Water Use Equipment Mains Water Volume
OUTSIDE UTILITY WATER:Water Use Equipment Mains Water Volume
IRRIGATION WATER:Water Use Equipment Mains Water Volume
So reporting above output variables for runperiod gives the following results
So the difference between end use and mains water is entirely due to Rainwater and Graywater tanks. Both these tanks use Mains
to respond to fill requests made by float valve. If valve.Type of Supply Controlled by Float Valve
is set to None
, then Total Water End Uses
will be identical to Water Supplied by Utility
.
Irrigation Water
, though supplied by Rainwater Tank
is showing identical Water Use Equipment Total Volume
and Water Use Equipment Mains Water Volume
. From WaterUse.cc
SetupOutputVariable( "Water Use Equipment Total Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "Water", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
SetupOutputVariable( "Water Use Equipment Mains Water Volume [m3]", WaterEquipment( WaterEquipNum ).TotalVolume, "System", "Sum", WaterEquipment( WaterEquipNum ).Name, _, "MainsWater", "WATERSYSTEMS", WaterEquipment( WaterEquipNum ).EndUseSubcatName, "Plant" );
As can be seen from above, same output variable WaterEquipment( WaterEquipNum ).TotalVolume
is used for both the meters.
Looking further into WaterUse.cc
, the current code is
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
// Currently, the tank flow is not really starved--water continues to flow at the tank water temperature
// But the user can see the error by comparing report variables for TankVolFlowRate < ColdVolFlowRate
WaterConnections( WaterConnNum ).TankVolFlowRate = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
WaterConnections( WaterConnNum ).TankMassFlowRate = WaterConnections( WaterConnNum ).TankVolFlowRate * RhoH2O( DataGlobals::InitConvTemp );
}
Perhaps a proposed solution could be as follows
RequestDemandVdot = 0.0;
StarvedVdot = 0.0;
TankSupplyVdot = 0.0;
AvailTankVdot = 0.0;
if ( WaterConnections( WaterConnNum ).SupplyTankNum > 0 ) {
// Set the demand request for supply water from water storage tank
WaterConnections( WaterConnNum ).ColdVolFlowRate = WaterConnections( WaterConnNum ).ColdMassFlowRate / RhoH2O( DataGlobals::InitConvTemp );
WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotRequestDemand( WaterConnections( WaterConnNum ).TankDemandID ) = WaterConnections( WaterConnNum ).ColdVolFlowRate;
RequestDemandVdot = WaterConnections( WaterConnNum ).ColdVolFlowRate;
// Check if cold flow rate should be starved by restricted flow from tank
AvailTankVdot = WaterStorage( WaterConnections( WaterConnNum ).SupplyTankNum ).VdotAvailDemand( WaterConnections( WaterConnNum ).TankDemandID );
TankSupplyVdot = RequestDemandVdot; // init
if ( AvailTankVdot < RequestDemandVdot ) { // calculate starved flow
StarvedVdot = RequestDemandVdot - AvailTankVdot;
TankSupplyVdot = AvailTankVdot;
}
}
WaterConnections( WaterConnNum ).TankVolFlowRate = TankSupplyVdot;
WaterConnections( WaterConnNum ).TankMassFlowRate = TankSupplyVdot * RhoH2O( DataGlobals::InitConvTemp );
And then StarvedVdot
should be reported for MainsWater
meter.
From OutputReportTabular.cc
, totalWater = totalOnsiteWater + gatherMains + StorageChange;
where gatherMains = Water Supplied by Utility
&
totalWater = Total On Site, Change in Storage, and Utility Water Sources
Meters Water:Facility
and MainsWater:Facility
can be used to understand above results. Report variables on these meters can be found in meter details file (*.mtd) and can be included in idf. Running idf (search for For Meter=Water:Facility
and For Meter=MainsWater:Facility
).
For example, following output variables will also help in analyzing the annual simulation gave the following results.Water Source Summary
summary
From the .mtd file
For Meter=Water:Facility [m3], ResourceType=Water, contents are:
WATER HEATER STRATIFIED:Water Heater Water Volume
BASE BATH BASIN:Water Output:Variable,*,Water Use Equipment Total Volume
MAIN BATH BASIN 1:Water Volume,Hourly;
Output:Variable,*,Water Use Equipment Total Volume
PARENTS BATH BASIN 1:Water Use Equipment Total Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Total Volume
KITCHEN BASIN:Water Use Equipment Total Volume
MAIN BATH TOILET:Water Use Equipment Total Volume
PARENTS BATH TOILET:Water Use Equipment Total Volume
BASE TOILET:Water Use Equipment Total Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Total Volume
BASE SHOWER:Water Use Equipment Total Volume
MAIN BATH:Water Use Equipment Total Volume
PARENT SHOWER:Water Use Equipment Total Volume
CLOTH WASHER:Water Use Equipment Total Volume
DISHWASHER:Water Use Equipment Total Volume
OUTSIDE UTILITY WATER:Water Use Equipment Total Volume
IRRIGATION WATER:Water Use Equipment Total Volume
For Meter=MainsWater:Facility [m3], ResourceType=MainsWater, contents are:
WATER HEATER STRATIFIED:Water Mains Water Volume,hourly;
Output:Variable,*,Water System Storage Tank Volume,Hourly;
Output:Variable,*,Water System Storage Tank Mains Water Volume,hourly; !- HVAC Sum [m3]
Output:Variable,*,Water System Rainwater Collector Volume,Hourly;
Output:Variable,*,Water System Storage Tank Overflow Water Volume,Hourly;
Output:Variable,*,Cooling Tower Storage Tank Water Volume,Hourly;
Output:Variable,*,Cooling Tower Make Up Mains Water Volume,hourly; !- HVAC Sum [m3]
Output:Variable,*,Water Heater Mains Water Volume
RAINWATER TANK:Water System Storage Tank Mains Water Volume
GRAYWATER TANK:Water System Storage Tank Mains Water Volume
BASE BATH BASIN:Water Use Equipment Mains Water Volume
MAIN BATH BASIN 1:Water Use Equipment Mains Water Volume
PARENTS BATH BASIN 1:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM BASIN:Water Use Equipment Mains Water Volume
KITCHEN BASIN:Water Use Equipment Mains Water Volume
MAIN BATH TOILET:Water Use Equipment Mains Water Volume
PARENTS BATH TOILET:Water Use Equipment Mains Water Volume
BASE TOILET:Water Use Equipment Mains Water Volume
ENTRANCE RESTROOM TOILET:Water Use Equipment Mains Water Volume
BASE SHOWER:Water Use Equipment Mains Water Volume
MAIN BATH:Water Use Equipment Mains Water Volume
PARENT SHOWER:Water Use Equipment Mains Water Volume
CLOTH WASHER:Water Use Equipment Mains Water Volume
DISHWASHER:Water Use Equipment Mains Water Volume
OUTSIDE UTILITY WATER:Water Use Equipment Mains Water Volume
IRRIGATION WATER:Water Use Equipment Mains Water Volume
Water Volume,hourly; !- HVAC Sum [m3]
Output:Variable,*,Water Heater Mains Water Volume,hourly; !- HVAC Sum [m3]
Output:Meter:MeterFileOnly,Water:Facility,runperiod;
Output:Meter:MeterFileOnly,MainsWater:Facility,runperiod;
So reporting above output variables for runperiod gives the following results
So the difference between end use and mains water is entirely due to Rainwater and Graywater tanks. Both these tanks use Mains
to respond to fill requests made by float valve.