-
Notifications
You must be signed in to change notification settings - Fork 466
Fix Coil:Cooling:DX cannot mimic Coil:Cooling:DX:MultiSpeed PLF > 1 behavior #11448
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
5a83db6
b2947ac
4b6bf5c
d19a253
0b872aa
3795dde
39d828e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -81,6 +81,11 @@ void CoilCoolingDXCurveFitOperatingMode::instantiateFromInputSpec(EnergyPlus::En | |
| this->evapRateRatio = input_data.ratio_of_initial_moisture_evaporation_rate_and_steady_state_latent_capacity; | ||
| this->maxCyclingRate = input_data.maximum_cycling_rate; | ||
| this->latentTimeConst = input_data.latent_capacity_time_constant; | ||
| if (Util::SameString(input_data.apply_part_load_fraction_to_speeds_greater_than_1, "Yes")) { | ||
| this->applyPartLoadFractionAllSpeeds = true; | ||
| } else { | ||
| this->applyPartLoadFractionAllSpeeds = false; | ||
| } | ||
| if (Util::SameString(input_data.apply_latent_degradation_to_speeds_greater_than_1, "Yes")) { | ||
| this->applyLatentDegradationAllSpeeds = true; | ||
| } else { | ||
|
|
@@ -157,11 +162,12 @@ CoilCoolingDXCurveFitOperatingMode::CoilCoolingDXCurveFitOperatingMode(EnergyPlu | |
| input_specs.ratio_of_initial_moisture_evaporation_rate_and_steady_state_latent_capacity = state.dataIPShortCut->rNumericArgs(5); | ||
| input_specs.latent_capacity_time_constant = state.dataIPShortCut->rNumericArgs(6); | ||
| input_specs.nominal_time_for_condensate_removal_to_begin = state.dataIPShortCut->rNumericArgs(7); | ||
| input_specs.apply_latent_degradation_to_speeds_greater_than_1 = state.dataIPShortCut->cAlphaArgs(2); | ||
| input_specs.condenser_type = state.dataIPShortCut->cAlphaArgs(3); | ||
| input_specs.apply_part_load_fraction_to_speeds_greater_than_1 = state.dataIPShortCut->cAlphaArgs(2); | ||
| input_specs.apply_latent_degradation_to_speeds_greater_than_1 = state.dataIPShortCut->cAlphaArgs(3); | ||
| input_specs.condenser_type = state.dataIPShortCut->cAlphaArgs(4); | ||
| input_specs.nominal_evap_condenser_pump_power = state.dataIPShortCut->rNumericArgs(8); | ||
| input_specs.nominal_speed_number = state.dataIPShortCut->rNumericArgs(9); | ||
| for (int fieldNum = 4; fieldNum <= NumAlphas; fieldNum++) { | ||
| for (int fieldNum = 5; fieldNum <= NumAlphas; fieldNum++) { | ||
| if (state.dataIPShortCut->cAlphaArgs(fieldNum).empty()) { | ||
| break; | ||
| } | ||
|
|
@@ -376,7 +382,11 @@ void CoilCoolingDXCurveFitOperatingMode::CalcOperatingMode(EnergyPlus::EnergyPlu | |
| } | ||
|
|
||
| OpModeRTF = thisspeed.RTF; | ||
| OpModePower = thisspeed.fullLoadPower * thisspeed.RTF; | ||
| if ((!this->applyPartLoadFractionAllSpeeds) && (speedNum > 1)) { | ||
| OpModePower = thisspeed.fullLoadPower * speedRatio; | ||
| } else { | ||
| OpModePower = thisspeed.fullLoadPower * thisspeed.RTF; | ||
| } | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So either multiply by PLR when NOT including startup losses or use RTF when including startup losses. That does seem correct. And only do this for speeds > 1 because at low speed the compressor will obviously cycle on and off. To save me some investigation time, why is line 424 different (i.e., doesn't check for speedNum)? |
||
| OpModeWasteHeat = thisspeed.fullLoadWasteHeat * thisspeed.RTF; | ||
|
|
||
| if ((speedNum > 1) && (speedRatio < 1.0) && !singleMode) { | ||
|
|
@@ -411,7 +421,11 @@ void CoilCoolingDXCurveFitOperatingMode::CalcOperatingMode(EnergyPlus::EnergyPlu | |
| inletNode.MassFlowRate; | ||
| outletNode.Temp = Psychrometrics::PsyTdbFnHW(outletNode.Enthalpy, outletNode.HumRat); | ||
|
|
||
| this->OpModePower += (1.0 - thisspeed.RTF) * lowerspeed.fullLoadPower; | ||
| if (!this->applyPartLoadFractionAllSpeeds) { | ||
| this->OpModePower += (1.0 - speedRatio) * lowerspeed.fullLoadPower; | ||
| } else { | ||
| this->OpModePower += (1.0 - thisspeed.RTF) * lowerspeed.fullLoadPower; | ||
| } | ||
| this->OpModeWasteHeat += (1.0 - thisspeed.RTF) * lowerspeed.fullLoadWasteHeat; | ||
| this->OpModeRTF = 1.0; // if we are on greater than 1 speed, RTF *must* be 1 | ||
| } | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -24,6 +24,12 @@ See pull request [#11366](https://github.com/NatLabRockies/EnergyPlus/pull/11366 | |
|
|
||
| # Object Change: ObjectStartsWithC | ||
|
|
||
| # Object Change: Coil:Cooling:DX:CurveFit:OperatingMode | ||
|
|
||
| Insert new field A2 which is also TODO, "Apply Part Load Fraction to Speeds Greater than 1", defaulted to blank | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't this TODONE? |
||
|
|
||
| See pull request TODO. | ||
|
|
||
| # Object Change: ObjectStartsWithD | ||
|
|
||
| # Object Change: ObjectStartsWithE | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was thinking that the default should be the same as the Multispeed object and the transition could insert Yes. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that No should be the default. And I personally think the transition should use the default (even though it will result in diffs), but I can see arguments for both sides.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would not have a problem with using the default of No.