From 6990149f381b32c96dfb7fafe5c891340c1f584e Mon Sep 17 00:00:00 2001 From: lgu1234 Date: Fri, 15 Aug 2014 09:05:59 -0400 Subject: [PATCH 1/5] Revised --- src/EnergyPlus/DualDuct.cc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/EnergyPlus/DualDuct.cc b/src/EnergyPlus/DualDuct.cc index 9d1fc9ba77b..33cdea2d3af 100644 --- a/src/EnergyPlus/DualDuct.cc +++ b/src/EnergyPlus/DualDuct.cc @@ -1862,12 +1862,25 @@ namespace DualDuct { Node( OutletNode ).Press = Node( HotInletNode ).Press; if (Contaminant.CO2Simulation) { - Node(OutletNode).CO2 = max(Node(HotInletNode).CO2, Node(ColdInletNode).CO2); + if (Node(OutletNode).MassFlowRate > 0.0) { + Node(OutletNode).CO2 = (Node(HotInletNode).CO2 * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).CO2 * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + } else if (Node(HotInletNode).MassFlowRate > 0.0) { + Node(OutletNode).CO2 = Node(HotInletNode).CO2; + } else { + Node(OutletNode).CO2 = Node(ColdInletNode).CO2; + } } if (Contaminant.GenericContamSimulation) { - Node(OutletNode).GenContam = max(Node(HotInletNode).GenContam, Node(ColdInletNode).GenContam); + if (Node(OutletNode).MassFlowRate > 0.0) { + Node(OutletNode).GenContam = (Node(HotInletNode).GenContam * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).GenContam * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + } + else if (Node(HotInletNode).MassFlowRate > 0.0) { + Node(OutletNode).GenContam = Node(HotInletNode).GenContam; + } + else { + Node(OutletNode).GenContam = Node(ColdInletNode).GenContam; + } } - } else if ( Damper( DamperNum ).DamperType == DualDuct_OutdoorAir ) { OutletNode = Damper( DamperNum ).OutletNodeNum; From 7ebfe62467416acc177b63e6baace75cdb6eab3d Mon Sep 17 00:00:00 2001 From: lgu1234 Date: Fri, 15 Aug 2014 13:45:52 -0400 Subject: [PATCH 2/5] Revised it again --- src/EnergyPlus/DualDuct.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/EnergyPlus/DualDuct.cc b/src/EnergyPlus/DualDuct.cc index 33cdea2d3af..256b0b4cd77 100644 --- a/src/EnergyPlus/DualDuct.cc +++ b/src/EnergyPlus/DualDuct.cc @@ -1864,21 +1864,16 @@ namespace DualDuct { if (Contaminant.CO2Simulation) { if (Node(OutletNode).MassFlowRate > 0.0) { Node(OutletNode).CO2 = (Node(HotInletNode).CO2 * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).CO2 * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; - } else if (Node(HotInletNode).MassFlowRate > 0.0) { - Node(OutletNode).CO2 = Node(HotInletNode).CO2; } else { - Node(OutletNode).CO2 = Node(ColdInletNode).CO2; + Node(OutletNode).CO2 = max(Node(HotInletNode).CO2, Node(ColdInletNode).CO2); } } if (Contaminant.GenericContamSimulation) { if (Node(OutletNode).MassFlowRate > 0.0) { Node(OutletNode).GenContam = (Node(HotInletNode).GenContam * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).GenContam * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; } - else if (Node(HotInletNode).MassFlowRate > 0.0) { - Node(OutletNode).GenContam = Node(HotInletNode).GenContam; - } else { - Node(OutletNode).GenContam = Node(ColdInletNode).GenContam; + Node(OutletNode).CO2 = max(Node(HotInletNode).GenContam, Node(ColdInletNode).GenContam); } } } else if ( Damper( DamperNum ).DamperType == DualDuct_OutdoorAir ) { From a092d63dcb190756a2a4e0dea3acaf5aed4e0c92 Mon Sep 17 00:00:00 2001 From: lgu1234 Date: Fri, 15 Aug 2014 15:41:34 -0400 Subject: [PATCH 3/5] The zero mass flow protection was added in both scenarios. After running 7 example input files using dualduct objects, no differences were found. This bug is fixed. Pull request will be created. --- src/EnergyPlus/DualDuct.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/DualDuct.cc b/src/EnergyPlus/DualDuct.cc index 256b0b4cd77..653f8792095 100644 --- a/src/EnergyPlus/DualDuct.cc +++ b/src/EnergyPlus/DualDuct.cc @@ -1873,7 +1873,7 @@ namespace DualDuct { Node(OutletNode).GenContam = (Node(HotInletNode).GenContam * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).GenContam * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; } else { - Node(OutletNode).CO2 = max(Node(HotInletNode).GenContam, Node(ColdInletNode).GenContam); + Node(OutletNode).GenContam = max(Node(HotInletNode).GenContam, Node(ColdInletNode).GenContam); } } } else if ( Damper( DamperNum ).DamperType == DualDuct_OutdoorAir ) { @@ -1898,11 +1898,21 @@ namespace DualDuct { Node( OutletNode ).Press = Node( OAInletNode ).Press; if (Damper(DamperNum).RecircIsUsed) { - if (Contaminant.CO2Simulation) { - Node(OutletNode).CO2 = (Node(OAInletNode).CO2*Node(OAInletNode).MassFlowRate + Node(RAInletNode).CO2*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + if (Node(OutletNode).MassFlowRate > 0.0){ + if (Contaminant.CO2Simulation) { + Node(OutletNode).CO2 = (Node(OAInletNode).CO2*Node(OAInletNode).MassFlowRate + Node(RAInletNode).CO2*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + } + if (Contaminant.GenericContamSimulation) { + Node(OutletNode).GenContam = (Node(OAInletNode).GenContam*Node(OAInletNode).MassFlowRate + Node(RAInletNode).GenContam*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + } } - if (Contaminant.GenericContamSimulation) { - Node(OutletNode).GenContam = (Node(OAInletNode).GenContam*Node(OAInletNode).MassFlowRate + Node(RAInletNode).GenContam*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + else { + if (Contaminant.CO2Simulation) { + Node(OutletNode).CO2 = Node(OAInletNode).CO2; + } + if (Contaminant.GenericContamSimulation) { + Node(OutletNode).GenContam = Node(OAInletNode).GenContam; + } } } else { From a6a613e6cbdf00695ab5ef04a8a9f8be1b2e4c1a Mon Sep 17 00:00:00 2001 From: lgu1234 Date: Mon, 18 Aug 2014 11:40:58 -0400 Subject: [PATCH 4/5] Add a space after an open parenthesis and before a close parenthesis recommended by Mike --- src/EnergyPlus/DualDuct.cc | 45 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/EnergyPlus/DualDuct.cc b/src/EnergyPlus/DualDuct.cc index 653f8792095..892bddde7f6 100644 --- a/src/EnergyPlus/DualDuct.cc +++ b/src/EnergyPlus/DualDuct.cc @@ -1861,19 +1861,19 @@ namespace DualDuct { Node( OutletNode ).Quality = Node( HotInletNode ).Quality; Node( OutletNode ).Press = Node( HotInletNode ).Press; - if (Contaminant.CO2Simulation) { - if (Node(OutletNode).MassFlowRate > 0.0) { - Node(OutletNode).CO2 = (Node(HotInletNode).CO2 * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).CO2 * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + if ( Contaminant.CO2Simulation ) { + if ( Node( OutletNode ).MassFlowRate > 0.0 ) { + Node( OutletNode ).CO2 = ( Node( HotInletNode ).CO2 * Node( HotInletNode ).MassFlowRate + Node( ColdInletNode ).CO2 * Node( ColdInletNode ).MassFlowRate) / Node( OutletNode ).MassFlowRate; } else { - Node(OutletNode).CO2 = max(Node(HotInletNode).CO2, Node(ColdInletNode).CO2); + Node( OutletNode ).CO2 = max( Node( HotInletNode ).CO2, Node( ColdInletNode ).CO2); } } - if (Contaminant.GenericContamSimulation) { - if (Node(OutletNode).MassFlowRate > 0.0) { - Node(OutletNode).GenContam = (Node(HotInletNode).GenContam * Node(HotInletNode).MassFlowRate + Node(ColdInletNode).GenContam * Node(ColdInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + if ( Contaminant.GenericContamSimulation ) { + if ( Node( OutletNode ).MassFlowRate > 0.0) { + Node( OutletNode ).GenContam = ( Node( HotInletNode ).GenContam * Node( HotInletNode ).MassFlowRate + Node( ColdInletNode ).GenContam * Node( ColdInletNode ).MassFlowRate ) / Node( OutletNode ).MassFlowRate; } else { - Node(OutletNode).GenContam = max(Node(HotInletNode).GenContam, Node(ColdInletNode).GenContam); + Node( OutletNode ).GenContam = max( Node( HotInletNode ).GenContam, Node( ColdInletNode ).GenContam ); } } } else if ( Damper( DamperNum ).DamperType == DualDuct_OutdoorAir ) { @@ -1897,36 +1897,35 @@ namespace DualDuct { Node( OutletNode ).Quality = Node( OAInletNode ).Quality; Node( OutletNode ).Press = Node( OAInletNode ).Press; - if (Damper(DamperNum).RecircIsUsed) { - if (Node(OutletNode).MassFlowRate > 0.0){ - if (Contaminant.CO2Simulation) { - Node(OutletNode).CO2 = (Node(OAInletNode).CO2*Node(OAInletNode).MassFlowRate + Node(RAInletNode).CO2*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + if ( Damper( DamperNum ).RecircIsUsed ) { + if ( Node( OutletNode ).MassFlowRate > 0.0 ){ + if ( Contaminant.CO2Simulation ) { + Node( OutletNode ).CO2 = ( Node( OAInletNode ).CO2 * Node( OAInletNode ).MassFlowRate + Node( RAInletNode ).CO2 * Node( RAInletNode ).MassFlowRate ) / Node( OutletNode ).MassFlowRate; } - if (Contaminant.GenericContamSimulation) { - Node(OutletNode).GenContam = (Node(OAInletNode).GenContam*Node(OAInletNode).MassFlowRate + Node(RAInletNode).GenContam*Node(RAInletNode).MassFlowRate) / Node(OutletNode).MassFlowRate; + if ( Contaminant.GenericContamSimulation ) { + Node( OutletNode ).GenContam = ( Node( OAInletNode ).GenContam * Node( OAInletNode ).MassFlowRate + Node( RAInletNode ).GenContam * Node( RAInletNode ).MassFlowRate ) / Node( OutletNode ).MassFlowRate; } } else { - if (Contaminant.CO2Simulation) { - Node(OutletNode).CO2 = Node(OAInletNode).CO2; + if ( Contaminant.CO2Simulation ) { + Node( OutletNode ).CO2 = Node( OAInletNode ).CO2; } - if (Contaminant.GenericContamSimulation) { - Node(OutletNode).GenContam = Node(OAInletNode).GenContam; + if ( Contaminant.GenericContamSimulation ) { + Node( OutletNode ).GenContam = Node( OAInletNode ).GenContam; } } } else { - if (Contaminant.CO2Simulation) { - Node(OutletNode).CO2 = Node(OAInletNode).CO2; + if ( Contaminant.CO2Simulation ) { + Node( OutletNode ).CO2 = Node( OAInletNode ).CO2; } - if (Contaminant.GenericContamSimulation) { - Node(OutletNode).GenContam = Node(OAInletNode).GenContam; + if ( Contaminant.GenericContamSimulation ) { + Node( OutletNode ).GenContam = Node( OAInletNode ).GenContam; } } } - } // End of Update subroutines for the Damper Module From 4b561068808cb3e0c7f5569c8a9090beeaaea61b Mon Sep 17 00:00:00 2001 From: lgu1234 Date: Fri, 29 Aug 2014 16:15:19 -0400 Subject: [PATCH 5/5] Changed calculation procedure for outlet node values The value is the maximum value between OA and recirculation node --- src/EnergyPlus/DualDuct.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/DualDuct.cc b/src/EnergyPlus/DualDuct.cc index 892bddde7f6..7974886b75b 100644 --- a/src/EnergyPlus/DualDuct.cc +++ b/src/EnergyPlus/DualDuct.cc @@ -1908,10 +1908,10 @@ namespace DualDuct { } else { if ( Contaminant.CO2Simulation ) { - Node( OutletNode ).CO2 = Node( OAInletNode ).CO2; + Node( OutletNode ).CO2 = max( Node( OAInletNode ).CO2, Node( RAInletNode ).CO2 ); } if ( Contaminant.GenericContamSimulation ) { - Node( OutletNode ).GenContam = Node( OAInletNode ).GenContam; + Node( OutletNode ).GenContam = max( Node( OAInletNode ).GenContam, Node( RAInletNode ).GenContam ); } }