Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Addressed idle/noload air flow rate for variable and multi speed coils of unitary system #7919

Merged
merged 12 commits into from
May 13, 2020

Conversation

Nigusse
Copy link
Contributor

@Nigusse Nigusse commented Apr 9, 2020

Pull request overview

  • Fixes Modify idle air flow rate for variable/multi speed coils #7862
  • Fixes the no-load and idle flow rate sizing issues of unitary system when using multi-speed and variable-speed DX coils. This is sizing defect.
  • Diffs in No Load Heat Cool Flow Rate sizing for unitary system is expected when the coil type are multi and variable speeds. Now, the no load flow rate will be the minimum system air flow rate, instead of the full or maximum supply air flow rate.

Pull Request Author

Add to this list or remove from it as applicable. This is a simple templated set of guidelines.

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Label the PR with at least one of: Defect, Refactoring, NewFeature, Performance, and/or DoNoPublish
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport

Reviewer

This will not be exhaustively relevant to every PR.

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

@Nigusse Nigusse added the Defect Includes code to repair a defect in EnergyPlus label Apr 9, 2020
@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 9, 2020

Created and uploaded defect files.

if (MSHPIndex > -1) {
// set no load air flow ratio local var
Real64 NoLoadCoolingAirFlowRateRatio = 1.0;
Real64 NoLoadHeatingAirFlowRateRatio = 1.0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move these up outside the if (MSHPIndex > -1).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

NoLoadHeatingAirFlowRateRatio = min(this->m_NoLoadAirFlowRateRatio, designSpecMSHP[MSHPIndex].heatingVolFlowRatio[0]);
}
this->m_NoLoadAirFlowRateRatio = min(NoLoadCoolingAirFlowRateRatio, NoLoadHeatingAirFlowRateRatio);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then add an else here and use those same 2 variables.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

NoLoadHeatingAirFlowRateRatio = VariableSpeedCoils::VarSpeedCoil(this->m_HeatingCoilIndex).MSRatedAirVolFlowRate(1) / MaxSpeedFlowRate;
}
}
NoLoadFractionForVarSpeedCoils = min(NoLoadCoolingAirFlowRateRatio, NoLoadHeatingAirFlowRateRatio);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and store this fraction in this->m_NoLoadAirFlowRateRatio instead of NoLoadFractionForVarSpeedCoils

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I was thinking that some of the other sizing method for no-load flow might need this variable but may be not.

DataSizing::DataFractionUsedForSizing = NoLoadFractionForVarSpeedCoils;
} else {
DataSizing::DataFractionUsedForSizing = this->m_NoLoadAirFlowRateRatio;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then you don't need this if block

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not need this block if I am not using this variable for the other sizing methods. Removed.

@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 10, 2020

Sample results before and after the fix:

**Before the fix**
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Heating Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Cooling Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size No Load Supply Air Flow Rate [m3/s], 2.62769
**After the fix**
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Heating Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Cooling Supply Air Flow Rate [m3/s], 2.62769
 Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size No Load Supply Air Flow Rate [m3/s], 0.26277

@NREL NREL deleted a comment from Nigusse Apr 10, 2020
this->m_NoLoadAirFlowRateRatio = min(NoLoadCoolingAirFlowRateRatio, NoLoadHeatingAirFlowRateRatio);
} else {
if (this->m_CoolingCoilType_Num == DataHVACGlobals::Coil_CoolingAirToAirVariableSpeed ||
this->m_HeatingCoilType_Num == DataHVACGlobals::Coil_HeatingAirToAirVariableSpeed) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so now what happens with multispeed and multistage coils and the new cooling coil model (Coil:Cooling:DX)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In all multi/variable speed coil test cases that I run the no-load mass flow rate is minimum flow rate, not the full flow rate. This change allows to determine the minimum flow rate either based on the minimum flow fraction autosized (or hard value user-input) when it is uses multi-speed coils, or based on the flow fraction (ratio of lowest speed flow to maximum speed flow) for variable speed DX coils. This change works fine with the new DX cooling coil as well. One of the unit tests uses the new DX cooling coil. Three of the defect files use the new dx cooling coil model.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then this seems to cover all cases.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below is expected diffs from one of the regression tests file (UnitarySystem_MultiSpeedDX.idf) which has a single speed gas heating coil and two speed new DX cooling coil. The no load flow rate is autosized to half of the full flow rate as shown below.

@@ -207,7 +207,7 @@
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 1 FURNACE DX COOL UNITARY SYSTEM, Design Size Supply Air Flow Rate [m3/s], 0.24830
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 1 FURNACE DX COOL UNITARY SYSTEM, Design Size Heating Supply Air Flow Rate [m3/s], 0.24830
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 1 FURNACE DX COOL UNITARY SYSTEM, Design Size Cooling Supply Air Flow Rate [m3/s], 0.24830
- Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 1 FURNACE DX COOL UNITARY SYSTEM, Design Size No Load Supply Air Flow Rate [m3/s], 0.24830
+ Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 1 FURNACE DX COOL UNITARY SYSTEM, Design Size No Load Supply Air Flow Rate [m3/s], 0.12415
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 1 FURNACE DX COOL COOLING COIL OPERATING MODE, Design Size Rated Evaporator Air Flow Rate, 0.24830
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 1 FURNACE DX COOL COOLING COIL OPERATING MODE, Design Size Rated Gross Total Cooling Capacity, 6165.88337
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 1 FURNACE DX COOL COOLING COIL OPERATING MODE, User-Specified Rated Condenser Air Flow Rate, 0.00000

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For three speed new dx cooling coil and a single speed electric heating coil, the no-load flow rate sized to 1/3 of the full flow rate as expected and is shown below:

@@ -230,7 +230,7 @@
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size Supply Air Flow Rate [m3/s], 0.19125
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size Heating Supply Air Flow Rate [m3/s], 0.19125
  Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size Cooling Supply Air Flow Rate [m3/s], 0.19125
- Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size No Load Supply Air Flow Rate [m3/s], 0.19125
+ Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size No Load Supply Air Flow Rate [m3/s], 6.37490E-002
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 2 FURNACE DX COOL COOLING COIL OPERATING MODE, Design Size Rated Evaporator Air Flow Rate, 0.19125
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 2 FURNACE DX COOL COOLING COIL OPERATING MODE, Design Size Rated Gross Total Cooling Capacity, 3958.37344
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, SYS 2 FURNACE DX COOL COOLING COIL OPERATING MODE, User-Specified Rated Condenser Air Flow Rate, 0.00000

Copy link
Contributor Author

@Nigusse Nigusse Apr 10, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think so based on the tests I have run. I have tested UnitarySystem with UnitarySystemPerformance:Multispeed objects specified for various number of the new DX cooling coil speeds and the old multispeedDXcoils and single speed coils. Also tested the variable speed DX coils without UnitarySystemPerformance:Multispeed objects. All behaved as expected.

@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 10, 2020

Zone air temperature comparison between develop and this branch for defect file 7862_UnitarySystem_MultiSpeedDX.idf, which has five unitary systems each serving a thermal zone:

ZoneAirTemperature

@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 10, 2020

Supply air flow rates comparison between develop and this branch for defect file 7862_UnitarySystem_MultiSpeedDX.idf, which has five unitary systems each serving a thermal zone:

ZoneSupplyAirFlowRate

@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 13, 2020

Okay, will be fixed along with other documentaion changes.

@Myoldmopar Myoldmopar added this to the EnergyPlus 9.4.0 milestone Apr 14, 2020
@Nigusse
Copy link
Contributor Author

Nigusse commented Apr 16, 2020

This pull request is ready for review.

Copy link
Contributor

@mjwitte mjwitte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Nigusse Some of new no-load results look correct - they match the DX coil low speed flow rate. But a few cases are close, but not exactly the same.

7862_UnitarySystem_MultiSpeedCoils_SingleMode
 Component Sizing Information, AirLoopHVAC:UnitarySystem, DXAC HEAT PUMP 1, User-Specified Cooling Supply Air Flow Rate [m3/s], 1.70000
 Component Sizing Information, AirLoopHVAC:UnitarySystem, DXAC HEAT PUMP 1, Design Size No Load Supply Air Flow Rate [m3/s], 0.40800
 Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 2 SPEED 1 PERFORMANCE, User-Specified Rated Air Flow Rate [m3/s], 0.40005

7862_UnitarySystem_MultiSpeedDX, Sys1, 3, 4, and 5 match exactly, but Sys2 is off a bit
 Component Sizing Information, AirLoopHVAC:UnitarySystem, SYS 2 FURNACE DX COOL UNITARY SYSTEM, Design Size No Load Supply Air Flow Rate [m3/s], 6.37490E-002
 Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, SYS 2 FURNACE DX COOL COOLING COIL SPEED 1 PERFORMANCE, User-Specified Rated Air Flow Rate [m3/s], 6.37426E-002

Oh, I see now, the UnitarySystem uses the values from the UnitarySystemPerformance:Multispeed object, which simply autosizes the lowest speed ratio to 1/number of speeds. And that doesn't necessarily align with the coil inputs. Maybe it should? But that's not for this PR.

But there is a problem with 7862_UnitarySystem_MultiSpeedDX on the winter design day. There are many new max iteration warnings (see err file diffs).

@@ -271,7 +271,7 @@ \subsubsection{Inputs}\label{inputs-049}

\paragraph{Field: No Load Supply Air Flow Rate}\label{field-no-load-supply-air-flow-rate-000}

This numeric field defines the supply air flow rate leaving the unitary system in cubic meters per second when neither cooling or heating is required (i.e., main cooling/heating coils and supplemental heater are off but the supply air fan operates). This field is only used when the unitary system operating mode is specified as continuous fan operation. Values must be greater than or equal to 0, or this field is autosizable. If the unitary system operating mode is specified as continuous fan operation and this value is set to zero or this field is left blank, then the model assumes that the supply air flow rate when no cooling/heating is needed is equal to the supply air flow rate when the compressor was last operating (for cooling operation or heating operation).
This numeric field defines the supply air flow rate leaving the unitary system in cubic meters per second when neither cooling or heating is required (i.e., main cooling/heating coils and supplemental heater are off but the supply air fan operates). This field is only used when the unitary system operating mode is specified as continuous fan operation. Values must be greater than or equal to 0, or this field is autosizable. If this field is autosized, then it is sized to the minimum of the heating and cooling lowest speed suppy air flow rate. If the unitary system operating mode is specified as continuous fan operation and this value is set to zero or this field is left blank, then the model assumes that the supply air flow rate when no cooling/heating is needed is equal to the supply air flow rate when the compressor was last operating (for cooling operation or heating operation).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tiny typo: lowest speed suppy air . . .

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. @mjwitte Thanks.

@@ -726,7 +726,7 @@ \subsubsection{Inputs}\label{inputs-1-046}

\paragraph{Field: No Load Supply Air Flow Rate Ratio}\label{field-no-load-supply-air-flow-rate-ratio}

This field defines the no load operating air flow rate when the system fan is specified to operate continuously. The allowed fractions are between 0 and 1 with a default value of 1. The no load air flow rate will be calculated as this fraction multiplied by the minimum of the cooling and heating supply air flow rate. If the cooling or heating coil is not present, this fraction is multiplied by the operating supply air flow rate.
This field defines the no load operating air flow rate when the system fan is specified to operate continuously. The allowed fractions are between 0 and 1 with a default value of 1. This fraction is set to the mimumum of heating and cooling operation lowest speed supply air flow fraction. The no load air flow rate will be calculated as this fraction multiplied by the minimum of the cooling and heating high speed supply air flow rate. If the cooling or heating coil is not present, this fraction is multiplied by the operating supply air flow rate.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"This fraction is set to the minimum . . . " implies that it defaults or autosized to that. But if I understand correctly, the way things are now, the user has to remember to set this to the appropriate fraction, correct?
If I'm following correctly, then perhaps say "This fraction is usually set to the minimum . . . " ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If user has specified the no-load fraction, then user-specified value is used; otherwise, the idle flow fraction is defaulted to lowest speed fraction, which is the speed ratio for multi-speed DX coils. For variable speed DX coils, the no-load flow fraction is set to the lowest speed air flow ratio since we do not have UnitarySystemPerformance:Multispeed object. I will fix the text as suggested.

@Nigusse
Copy link
Contributor Author

Nigusse commented May 11, 2020

Merging issues in unit tests.

Copy link
Contributor

@mjwitte mjwitte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doc changes are good. This currently shows a -1.7% speedup, but it looks like develop just got a little faster, so merged in develop for one more round of CI results here.

7862_UnitarySystem_MultiSpeedDX still has max iteration errors, but it also does in Develop. This just seems to exacerbate the problem on the winter design day. Shutting off all OA gets ride of the iteration errors. This just emphasizes the need to fix #6727.

Also, unit test EnergyPlusFixture.FanCoil_FanSystemModelCyclingFanMode fails locally on Windows (formatting complains because it's being sent an infinite value). Develop fails on this test, also, so nothing due to this branch.

@mjwitte mjwitte merged commit f3c97d3 into develop May 13, 2020
@Nigusse Nigusse deleted the IdleFlowRate-UnitarySystem-7862 branch May 16, 2020 02:34
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Defect Includes code to repair a defect in EnergyPlus
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Modify idle air flow rate for variable/multi speed coils
9 participants