Skip to content
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

Use Standard air density for sizing all cooling coil types (water coils and ideal loads air system already used standard air density) #9431

Merged
merged 6 commits into from
Jun 16, 2022

Conversation

rraustad
Copy link
Contributor

@rraustad rraustad commented May 16, 2022

Pull request overview

NOTE: ENHANCEMENTS MUST FOLLOW A SUBMISSION PROCESS INCLUDING A FEATURE PROPOSAL AND DESIGN DOCUMENT PRIOR TO SUBMITTING CODE

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
  • [ ] If IDD requires transition, transition source, rules, ExpandObjects, and IDFs must be updated, and add IDDChange label
  • [ ] If structural output changes, add to output rules file and add OutputChange label
  • [ ] If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies

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

@rraustad rraustad added the Defect Includes code to repair a defect in EnergyPlus label May 16, 2022
} else if (this->zoneEqUnitVent) {
PeakCoilLoad = max(0.0, (state.dataEnvrn->StdRhoAir * DesVolFlow * (CoilInEnth - CoilOutEnth)));
}
Real64 PeakCoilLoad = max(0.0, (state.dataEnvrn->StdRhoAir * DesVolFlow * (CoilInEnth - CoilOutEnth)));
Copy link
Contributor Author

Choose a reason for hiding this comment

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

All coil types now use the same conversion from volume to mass

Copy link
Member

Choose a reason for hiding this comment

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

👍

@rraustad
Copy link
Contributor Author

EIO diffs (typical of reported):

5ZoneAutoDXVAV
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, MAIN COOLING COIL 1, Design Size High Speed Gross Rated Total Cooling Capacity [W], 37657.94240
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, MAIN COOLING COIL 1, Design Size High Speed Gross Rated Total Cooling Capacity [W], 37978.59053

5ZoneGeometryTransform
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, MAIN COOLING COIL 1, Design Size High Speed Gross Rated Total Cooling Capacity [W], 42296.12153
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, MAIN COOLING COIL 1, Design Size High Speed Gross Rated Total Cooling Capacity [W], 42886.38109

5Zone_Unitary_HXAssistedCoil (
- Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Nominal Cooling Capacity [W], 54666.21355
+ Component Sizing Information, AirLoopHVAC:UnitarySystem, GASHEAT DXAC FURNACE 1, Design Size Nominal Cooling Capacity [W], 56749.30407

ASHRAE901_HotelSmall_STD2019_Denver
- Component Sizing Information, Coil:Cooling:DX:SingleSpeed, CORRIDORFLR1 PTAC COOLING COIL, Design Size Gross Rated Total Cooling Capacity [W], 1565.24011
+ Component Sizing Information, Coil:Cooling:DX:SingleSpeed, CORRIDORFLR1 PTAC COOLING COIL, Design Size Gross Rated Total Cooling Capacity [W], 1603.11653

ASHRAE901_OutPatientHealthCare_STD2019_Denver
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, AHU-1_COOLC DXCOIL, Design Size High Speed Gross Rated Total Cooling Capacity [W], 144684.84599
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, AHU-1_COOLC DXCOIL, Design Size High Speed Rated Sensible Heat Ratio, 0.80067
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, AHU-1_COOLC DXCOIL, Design Size High Speed Gross Rated Total Cooling Capacity [W], 147266.25845
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, AHU-1_COOLC DXCOIL, Design Size High Speed Rated Sensible Heat Ratio, 0.80063
- VAV DX Cooling Coil Standard Rating Information, Coil:Cooling:DX:TwoSpeed,AHU-1_COOLC DXCOIL,N/A,N/A,138593.41,472900.35,11.13,2.85,3.17,3.37,3.55,9.74,10.83,11.50,12.11,7.6929,6.0819,4.0538,1.6478,
+ VAV DX Cooling Coil Standard Rating Information, Coil:Cooling:DX:TwoSpeed,AHU-1_COOLC DXCOIL,N/A,N/A,141179.20,481723.41,11.16,2.86,3.18,3.38,3.56,9.77,10.86,11.53,12.15,7.6929,6.0905,4.0636,1.6402,

ASHRAE901_RestaurantFastFood_STD2019_Denver
-Environment:WarmupDays,  9
+Environment:WarmupDays,  6

ASHRAE901_RestaurantSitDown_STD2019_Denver - only warmup convergence diffs
ASHRAE901_RetailStandalone_STD2019_Denver - only warmup convergence diffs
ASHRAE901_RetailStripmall_STD2019_Denver - only warmup convergence diffs

ASHRAE901_SchoolPrimary_STD2019_Denver
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, VAV_POD_1_COOLC DXCOIL, Design Size High Speed Gross Rated Total Cooling Capacity [W], 73480.75647
- Component Sizing Information, Coil:Cooling:DX:TwoSpeed, VAV_POD_1_COOLC DXCOIL, Design Size High Speed Rated Sensible Heat Ratio, 0.73644
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, VAV_POD_1_COOLC DXCOIL, Design Size High Speed Gross Rated Total Cooling Capacity [W], 76977.94114
+ Component Sizing Information, Coil:Cooling:DX:TwoSpeed, VAV_POD_1_COOLC DXCOIL, Design Size High Speed Rated Sensible Heat Ratio, 0.72101

Stopped here.

@rraustad rraustad changed the title Use StdRhoAir in CoolingCapacitySizing Use Standard air density for sizing all cooling coil types (water coils and ideal loads air system already used standard air density) May 16, 2022
@rraustad
Copy link
Contributor Author

Simple warning is fixed, waiting for comments.

@rraustad
Copy link
Contributor Author

An interesting realization here is that the zone design cooling mass flow rate is at the supply air moisture content. The air is already dehumidified. So for coil sizing I am wondering if this mass flow rate should be corrected somehow (e.g., by ratio of CpAir,in/CpAir,out)? This change corrects back to zone design cooling mass flow rate which should always be lower than coil inlet mass flow rate. I guess we take one step at a time where all coils will be doing the same thing.

void SizeZoneEquipment(EnergyPlusData &state)

Temp = state.dataSize->CalcZoneSizing(state.dataSize->CurOverallSimDay, ControlledZoneNum).CoolDesTemp;
HumRat = state.dataSize->CalcZoneSizing(state.dataSize->CurOverallSimDay, ControlledZoneNum).CoolDesHumRat;
DeltaTemp = Temp - Node(ZoneNode).Temp;

// calculate mass flow rate based on user specified zone supply air temperature
CpAir = PsyCpAirFnW(HumRat);
MassFlowRate = max(SysOutputProvided / (CpAir * DeltaTemp), 0.0);

@rraustad
Copy link
Contributor Author

rraustad commented May 17, 2022

Since there is a lot to think about with a change like this, I looked at the parent and child objects to see how they convert volume to mass. All the parent objects use Design Volume * StdRhoAir. The fan models also use this convention. The cooling tower, earth tube and evap cooler use actual air density which seems reasonable since they are calculating a mass flow rate to meet a load. The DX coil model stands out but is using a rating point to calculate the rated mass flow rate (at altitude), and then when used in a parent is operating at the (zone or airloop) design mass flow rate.

Parent Objects:

UnitarySystem  this->m_DesignMassFlowRate = this->m_DesignFanVolFlowRate * state.dataEnvrn->StdRhoAir;
               this->m_CoolMassFlowRate[Iter] = this->m_CoolVolumeFlowRate[Iter] * state.dataEnvrn->StdRhoAir;

state.dataPTHP->PTUnit(PTUnitNum).MaxCoolAirMassFlow = state.dataEnvrn->StdRhoAir * state.dataPTHP->PTUnit(PTUnitNum).MaxCoolAirVolFlow;

state.dataWindowAC->WindAC(WindACNum).MaxAirMassFlow = state.dataEnvrn->StdRhoAir * state.dataWindowAC->WindAC(WindACNum).MaxAirVolFlow;
state.dataWindowAC->WindAC(WindACNum).OutAirMassFlow = state.dataEnvrn->StdRhoAir * state.dataWindowAC->WindAC(WindACNum).OutAirVolFlow;

FanCoil(FanCoilNum).MaxAirMassFlow = state.dataEnvrn->StdRhoAir * FanCoil(FanCoilNum).MaxAirVolFlow;
FanCoil(FanCoilNum).OutAirMassFlow = state.dataEnvrn->StdRhoAir * FanCoil(FanCoilNum).OutAirVolFlow;

state.dataFurnaces->Furnace(FurnaceNum).MaxCoolAirMassFlow = state.dataEnvrn->StdRhoAir * state.dataFurnaces->Furnace(FurnaceNum).MaxCoolAirVolFlow;

MSHeatPump(MSHeatPumpNum).CoolMassFlowRate(i) = state.dataEnvrn->StdRhoAir * MSHeatPump(MSHeatPumpNum).CoolVolumeFlowRate(i);

SingleDuct   this->AirMassFlowRateMax = this->MaxAirVolFlowRate * state.dataEnvrn->StdRhoAir;

state.dataHVACSingleDuctInduc->IndUnit(IUNum).MaxTotAirMassFlow =
    state.dataEnvrn->StdRhoAir * state.dataHVACSingleDuctInduc->IndUnit(IUNum).MaxTotAirVolFlow;

Child Objects:

Fan(FanNum).MaxAirMassFlowRate = state.dataEnvrn->StdRhoAir * Fan(FanNum).MaxAirFlowRate;

HVACFans  m_maxAirMassFlowRate = state.dataEnvrn->StdRhoAir * designAirVolFlowRate;

CoolTower
AirDensity = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, OutletTemp, IntHumRat);
AirMassFlowRate = AirDensity * state.dataCoolTower->CoolTowerSys(CoolTowerNum).ActualAirVolFlowRate;

AirDensity = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataEnvrn->OutDryBulbTemp, state.dataEnvrn->OutHumRat);
AirSpecHeat = PsyCpAirFnW(state.dataEnvrn->OutHumRat);
EVF = state.dataEarthTube->EarthTubeSys(Loop).DesignLevel * GetCurrentScheduleValue(state, state.dataEarthTube->EarthTubeSys(Loop).SchedPtr);
AirMassFlowRate = EVF * AirDensity;

RhoAir = PsyRhoAirFnPbTdbW(
    state, state.dataEnvrn->OutBaroPress, state.dataLoopNodes->Node(InletNode).Temp, state.dataLoopNodes->Node(InletNode).HumRat);
// set the volume flow rates from the input mass flow rates
EvapCond(EvapCoolNum).VolFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate / RhoAir;
EvapCond(EvapCoolNum).DesVolFlowRate = state.dataSize->FinalZoneSizing(CurZoneEqNum).DesCoolVolFlow;

state.dataDXCoils->DXCoil(DXCoilNum).RatedAirMassFlowRate(1) =
    state.dataDXCoils->DXCoil(DXCoilNum).RatedAirVolFlowRate(1) *
    PsyRhoAirFnPbTdbW(
        state, state.dataEnvrn->StdBaroPress, state.dataDXCoils->DXCoil(DXCoilNum).RatedInletDBTemp, HPInletAirHumRat, RoutineName);
state.dataDXCoils->DXCoil(DXCoilNum).MSRatedAirMassFlowRate(Mode) =
    state.dataDXCoils->DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) *
    PsyRhoAirFnPbTdbW(state, state.dataEnvrn->StdBaroPress, RatedInletAirTemp, RatedInletAirHumRat, RoutineName);

@mjwitte
Copy link
Contributor

mjwitte commented May 18, 2022

Here's some history on air density.
In 2000, reporting of design volume flow rate was added here. This is when DesCoolDens and DesHeatDens were first introduced. And they were initialized to RhoAirFn(OutBaroPress,25.,0.014) using the current barometric pressure, which explains why it was kept as an array in zone sizing.

On May 9, 2001, the standard air definition was changed here to address #294, #295, and #296 (which were old CR3573, CR3574, and CR3575). So now DesCoolDens = RhoAirFn(OutBaroPress,20.0,0.0), dry air at 20C at current barometric pressure.

The next day, it was changed to use standard barometric pressure here DesCoolDens = RhoAirFn(StdBaroPress,20.0,0.0) which is our current definition of stdRhoAir:
in Autosizing::Base.cc this->stdRhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, barometricPressure, 20.0, 0.0);
or in WeatherManager.cc
state.dataEnvrn->StdRhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->StdBaroPress, DataPrecisionGlobals::constant_twenty, DataPrecisionGlobals::constant_zero);

So, yeah, once this was changed to use StdBaroPress, DesCoolDens and DesHeatDens don't need to be arrays anymore or even a thing, if we agree that StdRhoAir is the right thing to do for converting from DesCoolMassFlow to DesCoolVolFlow(and back again in some places). We really don't even need to save both, do we? We could just save one, and applyStdRhoAir` to report the other, IF we agree that it should be a fixed density everywhere.

@rraustad rraustad added this to the EnergyPlus 22.2 milestone May 20, 2022
} else if (this->zoneEqUnitVent) {
PeakCoilLoad = max(0.0, (state.dataEnvrn->StdRhoAir * DesVolFlow * (CoilInEnth - CoilOutEnth)));
}
Real64 PeakCoilLoad = max(0.0, (state.dataEnvrn->StdRhoAir * DesVolFlow * (CoilInEnth - CoilOutEnth)));
Copy link
Member

Choose a reason for hiding this comment

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

👍

src/EnergyPlus/UnitarySystem.cc Show resolved Hide resolved
@Myoldmopar
Copy link
Member

So could you comment on how this relates to #9425? It looks like the centralized sizing routine made this a minimal change, but are there other places that still need this change?

@rraustad
Copy link
Contributor Author

rraustad commented May 26, 2022

#9425 focused on the variable speed coil model and to try to line up VS coil sizing with what UnitarySystem used as mass flow rate and coil capacity (the VS coil model caused diffs for PTUnit to UnitarySystem branch). That change was a result of finally realizing that zone design mass flow rate (based on Cp of supply air humidity ratio entering the zone) is directly related to zone design volume flow rate based on StdRhoAir. Some component models convert zone design volume to mass using actual inlet condition (VS coil and other cooling coils) and others use StdRhoAir (e.g., fan). That should mean components in a parent size to different mass flow rates, but we only see volume flow rate in the eio file so we never noticed it.

Now, understanding that, do we really want to calculate a cooling coil mass flow rate using the supply air condition (apply the conversion using StdRhoAir) or the actual inlet condition (using coil inlet air density)? That is really the question here. Water coils and Ideal Loads air systems use StdRhoAir. It seemed reasonable to use StdRhoAir everywhere there is a conversion from zone design air volume to zone design air mass. Another question is what does the zone design air volume flow rate represent if it was derived by dividing zone design air mass flow rate (a moist air mass flow rate) by StdRhoAir (a dry air density) in the zone sizing routines? The resulting volume is not the actual volume entering the zone during zone sizing. The only way to get back to the zone design air mass flow rate is to multiply zone design air volume by StdRhoAir. But that is zone supply air mass flow rate (outlet of the cooling coil). By now you should see the dilema. Should E+ size a cooling coil using supply air mass flow rate or inlet air mass flow rate? In E+ they are incorrectly the same, in reality they are not since condensate leaves the coil.

This PR expands on that suggestion of always using StdRhoAir, and the sizing routine consolidation where we said we would circle back and clean up some redundancy. If we choose to use StdRhoAir everywhere then that will clean up the sizing routine so that all coils size the same way. This is a big decision because it changes coil sizes so we need to make sure this is the path to take. Neither of these PRs have been merged yet. I also discussed why these changes were suggested on last conference call and it seemed there was agreement. With sizing changes we should always critique that change as many different ways as possible. I can always figure out a different way to do things if this is not the correct path.

@rraustad
Copy link
Contributor Author

but are there other places that still need this change?

I scanned HeatingCapacitySizing and did not see anything, although that does not mean a parent passed a volume that was calculated based on inlet air conditions. I was focused here on cooling coil air flow and capacity. If we can come to agreement I think finding other places like this will be fairly easy.

@rraustad
Copy link
Contributor Author

rraustad commented May 27, 2022

Diffs for DXCoilSystemAuto.

  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, HEAT PUMP ACDXCOIL 1 OPERATING MODE, Design Size Rated Evaporator Air Flow Rate [m3/s], 1.37420
- Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, HEAT PUMP ACDXCOIL 1 OPERATING MODE, Design Size Rated Gross Total Cooling Capacity [W], 24912.98419
+ Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, HEAT PUMP ACDXCOIL 1 OPERATING MODE, Design Size Rated Gross Total Cooling Capacity [W], 25646.27702
  Component Sizing Information, Coil:Cooling:DX:CurveFit:OperatingMode, HEAT PUMP ACDXCOIL 1 OPERATING MODE, User-Specified Rated Condenser Air Flow Rate [m3/s], 0.00000
  Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 1 SPEED 1 PERFORMANCE, User-Specified Rated Air Flow Rate [m3/s], 1.37420
- Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 1 SPEED 1 PERFORMANCE, User-Specified Gross Cooling Capacity [W], 24912.98419
- Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 1 SPEED 1 PERFORMANCE, Design Size Gross Sensible Heat Ratio, 0.80070
+ Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 1 SPEED 1 PERFORMANCE, User-Specified Gross Cooling Capacity [W], 25646.27702
+ Component Sizing Information, Coil:Cooling:DX:CurveFit:Speed, HEAT PUMP ACDXCOIL 1 SPEED 1 PERFORMANCE, Design Size Gross Sensible Heat Ratio, 0.80011
  Component Sizing Information, Coil:Heating:DX:SingleSpeed, HEAT PUMP DX HEATING COIL 1, Design Size Rated Air Flow Rate [m3/s], 1.37420
- Component Sizing Information, Coil:Heating:DX:SingleSpeed, HEAT PUMP DX HEATING COIL 1, Design Size Gross Rated Heating Capacity [W], 24912.98419
- Component Sizing Information, Coil:Heating:DX:SingleSpeed, HEAT PUMP DX HEATING COIL 1, Design Size Resistive Defrost Heater Capacity [W], 24912.98419
+ Component Sizing Information, Coil:Heating:DX:SingleSpeed, HEAT PUMP DX HEATING COIL 1, Design Size Gross Rated Heating Capacity [W], 25646.27702
+ Component Sizing Information, Coil:Heating:DX:SingleSpeed, HEAT PUMP DX HEATING COIL 1, Design Size Resistive Defrost Heater Capacity [W], 25646.27702

With increased capacity I would expect the coil PLR to decrease with very little difference, if any, in the coil delivered capacity since the load has not changed. The change in coil sizing is on the order of +3%. And the PLR actually increased which is opposite of what I expected. The fact that the coil SHR decreased may explain the increase in PLR. Zone temp is the same as is the supply air T and Tsetpoint. I also would have expected the coil PLR to be nearer to 1 on the summer design day but that is not happening. There is no Sizing:Parameters object in this file with cooling/heating sizing multipliers and Sizing:Zone sizing factors are set to 0. So sizing factors are assumed to be 1.

image

@rraustad
Copy link
Contributor Author

rraustad commented May 27, 2022

I find it hard to believe that a 0.07% change in SHR could have that impact on PLR. Looking at other data shows that PLR changed by about 3% (updated figure above). The flow rates have not changed (same load). The current density flow rate is a little higher because the supply node density is a little lower, but not by much. The change in latent capacity is about 0.1%, and is lower now, meaning more sensible capacity at the same PLR now. So I am still not sure why PLR changed as much as it did, and increased instead of decreasing as I would expect.

image

@rraustad
Copy link
Contributor Author

I had the PLR data reversed, dotted vs solid, in my head, not the graph. The PLR is now lower than before so lines up with what I would expect. The decrease in PLR is about the same as the increase in capacity.

@rraustad
Copy link
Contributor Author

Trying to wrap up what all this means. The coil now sizes the capacity based on the same mass flow rate as found during zone sizing. That's a good thing, the coil capacity is directly related to zone load.

The new coil model, as other DX coil models, calculates a rated mass flow rate during initialization. This is a rating point for the coil, not the operating point.

this->RatedAirMassFlowRate =
    this->evap_air_flow_rate *
    Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->StdBaroPress, RatedInletAirTemp, RatedInletAirHumRat, RoutineName);

The TU calculates the same mass flow rate found during zone sizing. So during the simulation, at peak load, the same mass flow rate as found during sizing is used. That's a good thing.

state.dataLoopNodes->Node(OutletNode).MassFlowRateMax = this->MaxAirVolFlowRate * state.dataEnvrn->StdRhoAir;

The new coil model, used in DXCoilSystemAuto, also makes an adjustment to the coil bypass factor the same as the old DX coil model. What this adjustment does is correct coil performance based on a difference between the operating and rated mass flow rate. The operating mass flow rate is now the same as found during zone sizing. And the coil rated mass flow rate is about correct but still a little off because the volume flow rate, used to calculate rated mass flow, is calculated using a StdRhoAir basis, not the actual density of the supply air (i.e., the zone design volume flow is not the volume entering the zone during sizing and is different by rhoAir/StdRhoAir, about 3%). All in all it seems this step moved in the right direction.

@rraustad
Copy link
Contributor Author

rraustad commented May 28, 2022

Mostly seeing the same diffs as #9425.

Have seen a couple of these new warnings. Changing the capacity should not be an issue with finding a coil SHR. The coil inlet condition is reasonable at about 80F / 55% RH and this coil is fully autosized so a lower SHR would bring the outlet condition to the proper side of the saturation curve. This is more of a clue to help correct logic during sizing. Unless there are one or more hard-sized inputs, this warning should rarely happen (i.e., something needs fixing). #9459.

Fenestration_RefBldgSmallHotelNew2004_Chicago

- Component Sizing Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, Design Size Gross Rated Total Cooling Capacity [W], 1701.01822
- Component Sizing Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, Design Size Gross Rated Sensible Heat Ratio, 0.80072
- DX Cooling Coil Standard Rating Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, 1628.8, 3.14, 10.70, 11.34, 10.73, 10.74
+ Component Sizing Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, Design Size Gross Rated Total Cooling Capacity [W], 1754.92582
+ Component Sizing Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, Design Size Gross Rated Sensible Heat Ratio, 0.80050
+ DX Cooling Coil Standard Rating Information, Coil:Cooling:DX:SingleSpeed, GUESTROOM105 PTAC DXCOIL, 1682.7, 3.15, 10.77, 11.41, 10.79, 10.84

+   ** Warning ** For object = Coil:Cooling:DX:SingleSpeed, name = "GUESTROOM105 PTAC DXCOIL"
+   **   ~~~   ** Calculated outlet air relative humidity greater than 1. The combination of
+   **   ~~~   ** rated air volume flow rate, total cooling capacity and sensible heat ratio yields coil exiting
+   **   ~~~   ** air conditions above the saturation curve. Possible fixes are to reduce the rated total cooling
+   **   ~~~   ** capacity, increase the rated air volume flow rate, or reduce the rated sensible heat ratio for this coil.
+   **   ~~~   ** If autosizing, it is recommended that all three of these values be autosized.
+   **   ~~~   ** ...Inputs used for calculating cooling coil bypass factor.
+   **   ~~~   ** ...Inlet Air Temperature     = 26.67 C
+   **   ~~~   ** ...Outlet Air Temperature    = 13.90 C
+   **   ~~~   ** ...Inlet Air Humidity Ratio  = 1.118470E-002 kgWater/kgDryAir
+   **   ~~~   ** ...Outlet Air Humidity Ratio = 9.908656E-003 kgWater/kgDryAir
+   **   ~~~   ** ...Total Cooling Capacity used in calculation = 1754.93 W
+   **   ~~~   ** ...Air Mass Flow Rate used in calculation     = 0.107572 kg/s
+   **   ~~~   ** ...Air Volume Flow Rate used in calculation   = 9.299545E-002 m3/s
+   **   ~~~   **  Environment=CHICAGO ANN CLG .4% CONDNS WB=>MDB, at Simulation time=07/21 24:00 - 24:04
+   **   ~~~   ** CalcCBF: SHR adjusted to achieve valid outlet air properties and the simulation continues.
+   **   ~~~   ** CalcCBF: initial SHR = 0.80050
+   **   ~~~   ** CalcCBF: adjusted SHR = 0.79959

@rraustad
Copy link
Contributor Author

rraustad commented May 28, 2022

Almost finished reviewing these diffs with not much to see and then came across this in UnitarySystem_WaterCoils_wMultiSpeedFan. The water coils already use StdRhoAir so what changed to cause this diff? This is a coil on air loop main branch so nothing should have changed. I don't see anything that should have caused this. This is the same change in capacity as if coil inlet density were changed to StdRhoAir, but StdRhoAir was already used?

Update: this is a water coil inside a UnitarySystem parent. The UnitarySystem calls over to CoolingCapacitySizing and is not a water coil, so the returned capacity would have changed and then that capacity would be forwarded to the coil. So yes, this is expected with this change.

Branch,
  Air Loop Main Branch,    !- Name
  AirLoopHVAC:UnitarySystem,  !- Component 2 Object Type
  Chilled Water AHU,       !- Component 2 Name

AirLoopHVAC:UnitarySystem,
  Chilled Water AHU,       !- Name
  Coil:Cooling:Water,      !- Cooling Coil Object Type
  CW Cooling Coil,         !- Cooling Coil Name


- Component Sizing Information, Coil:Cooling:Water, CW COOLING COIL, Design Size Design Coil Load [W], 23531.71307
- Component Sizing Information, Coil:Cooling:Water, CW COOLING COIL, Design Size Design Water Flow Rate [m3/s], 1.40153E-003
+ Component Sizing Information, Coil:Cooling:Water, CW COOLING COIL, Design Size Design Coil Load [W], 24231.92123
+ Component Sizing Information, Coil:Cooling:Water, CW COOLING COIL, Design Size Design Water Flow Rate [m3/s], 1.44323E-003

@Myoldmopar
Copy link
Member

@rraustad alright after the merge of #9425, I pulled develop into this branch. While merging, I also ran the format checker and found that there was a single line that needed formatting in the ConvertInputFormat code. I hijacked your PR here to add that one-line change. I'm building and testing this locally and we'll let CI run on here and see what happens.

@Myoldmopar
Copy link
Member

Unit and integration tests all look fine locally, and regressions appear to be similar to what Decent saw the last time around, so this is hopefully at least neutral with what was here before I merged develop.

@rraustad
Copy link
Contributor Author

rraustad commented Jun 8, 2022

All the diffs are related to the increase in cooling coil capacity due to the higher air density used. The most interesting change is the -0.02% performance hit because StdRhoAir is used to calculate capacity. If the execution time of those test files is accurate then there is likely more time step reduction than before. That is a little hard to believe if the target load or set point is maintained where everything I have looked at says that is true. The additional capacity could cause a different rate of change in zone temperature during setback so it is possible that changing capacity could cause longer runtimes.

@Myoldmopar
Copy link
Member

I'm ready to move forward on this. There are lots of diffs, but you have presented them well and you have done this on a PR with very very minimal code changes. This is good stuff. I don't think we really need another round of CI, but I'll build and run unit/integration/regression locally to confirm nothing has changed.

@mjwitte any thoughts/concerns about this going in? It will start throwing diffs on other PRs until they pull in develop, so I'm happy to time the merge carefully.

@Myoldmopar
Copy link
Member

Everything is happy locally and I can reproduce the CI results. This is now queued for merge, time to speak up if anyone wants me to hold off for timing purposes.

@rraustad
Copy link
Contributor Author

I could merge this later tonight (11 PM ET) if you like.

@rraustad
Copy link
Contributor Author

rraustad commented Jun 16, 2022

Amazing all the repetitive example files with a slight difference in configuration. Diffs are the same over, and over, and over, and over again. Looks like over 700 example files with only a slight difference to exercize some specific model. I think we could be a little better at modifying existing instead of adding new test files.

@rraustad rraustad merged commit f39484f into develop Jun 16, 2022
@rraustad rraustad deleted the 9430-StdRhoAir-used-in-coil-sizing branch June 16, 2022 03:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in 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.

Cooling coil sizing uses StdRhoAir to size water coils while using actual air density for other coil types
8 participants