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

Fan:SystemModel inconsistencies in IDD #7697

Closed
1 of 3 tasks
jmarrec opened this issue Jan 20, 2020 · 6 comments · Fixed by #7721
Closed
1 of 3 tasks

Fan:SystemModel inconsistencies in IDD #7697

jmarrec opened this issue Jan 20, 2020 · 6 comments · Fixed by #7721
Assignees
Labels
Defect Includes code to repair a defect in EnergyPlus

Comments

@jmarrec
Copy link
Contributor

jmarrec commented Jan 20, 2020

Issue overview

I'm working on implementing Fan:SystemModel in OpenStudio (cf NREL/OpenStudio#3044). As you know, OpenStudio does strongly enforce IDD conventions: a field with an \object-list has to match the \reference of the object you're trying to assign to that field or it will reject the assignment.

I'm seeing some inconsistencies in the IDD as far as object list / references goes, especially for Fan:OnOff replacement. Here's one example, but there are more (like ZoneHVAC:EnergyRecoveryVentilator for eg)

  WaterHeater:HeatPump:WrappedCondenser,
   [...]
   A20, \field Fan Object Type
       \type choice
       \key Fan:OnOff
       \key Fan:SystemModel
       \default Fan:OnOff
       \note Specify the type of fan used by this heat pump water heater. The only
       \note valid choices are Fan:SystemModel or Fan:OnOff.
  A21, \field Fan Name
       \required-field
       \type object-list
       \object-list FansOnOff     <=============================================================== NOT FOR 
Fan:SystemModel
       \note Needs to match the name used in the corresponding Fan:SystemModel or Fan:OnOff object.
Fan:SystemModel,
  A1 , \field Name
       \required-field
       \reference Fans
       \reference FansCV
       \reference FansCVandOnOff
       \reference FansVAV
       \reference FansCVandVAV
       \reference FansCVandOnOffandVAV
       \reference-class-name validBranchEquipmentTypes
       \reference validBranchEquipmentNames
       \reference-class-name validOASysEquipmentTypes
       \reference validOASysEquipmentNames

Additionally, it seems that all Unitary objects but the AirLoopHVAC:UnitarySystem aren't accepting Fan:SystemModel. Is that on purpose since these should be deprecated in favor of AirLoopHVAC:UnitarySystem?

["AirLoopHVAC:Unitary:Furnace:HeatOnly",
 "AirLoopHVAC:Unitary:Furnace:HeatCool",
 "AirLoopHVAC:UnitaryHeatOnly",
 "AirLoopHVAC:UnitaryHeatCool",
 "AirLoopHVAC:UnitaryHeatPump:AirToAir",
 "AirLoopHVAC:UnitaryHeatPump:WaterToAir",
 "AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed"]

eg:

AirLoopHVAC:Unitary:Furnace:HeatOnly,
   [...]
   A7,  \field Supply Fan Object Type
        \required-field
        \type choice
        \key Fan:OnOff
        \key Fan:ConstantVolume   <===== Missing Fan:SystemModel
   A8,  \field Supply Fan Name
        \required-field
        \type object-list
        \object-list FansCVandOnOff   <====== This reference does accept Fan:SystemModel

Details

Some additional details for this issue (if relevant):

  • Platform: All
  • Version of EnergyPlus: develop (9.2.0)

Checklist

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

  • Defect file added (list location of defect file here)
  • Ticket added to Pivotal for defect (development team task)
  • Pull request created (the pull request will have additional tasks related to reviewing changes that fix this defect)
@mjwitte
Copy link
Contributor

mjwitte commented Jan 20, 2020

The \key choice list for Fan Object Type should be reliable.

For the unitary equipment that does not accept Fan:SystemModel, at the time this was added, there was an expectation of the various unitary and heatpump system being deprecated. Other considerations have delayed that.

To resolve the name referencing problem, I would suggest giving Fan:SystemModel it's own reference group (deleting all of the other flavors of Fan) and add that where appropriate in the parent objects.

Fan:SystemModel,
  A1 , \field Name
       \required-field
       \reference FanSystemModel
       \reference-class-name validBranchEquipmentTypes
       \reference validBranchEquipmentNames
       \reference-class-name validOASysEquipmentTypes
       \reference validOASysEquipmentNames

ZoneHVAC:PackagedTerminalHeatPump
   A7 , \field Supply Air Fan Object Type
        \required-field
        \type choice
        \key Fan:SystemModel
        \key Fan:OnOff
        \key Fan:ConstantVolume
        \note Fan:ConstantVolume only works with fan operating mode is continuous.
   A8 , \field Supply Air Fan Name
        \required-field
        \type object-list
        \object-list FansCVandOnOff
        \object-list FanSystemModel
        \note Needs to match a fan object.

@jmarrec
Copy link
Contributor Author

jmarrec commented Jan 24, 2020

For the unitary equipment that does not accept Fan:SystemModel, at the time this was added, there was an expectation of the various unitary and heatpump system being deprecated. Other considerations have delayed that.

How about the FaultModel:Fouling:AirFilter?

   A2, \field Fan Object Type
       \note Choose the type of the fan
       \required-field
       \type choice
       \key Fan:OnOff
       \key Fan:ConstantVolume
       \key Fan:VariableVolume
   A3, \field Fan Name
       \note Enter the name of a fan object
       \required-field
       \type object-list
       \object-list FansCVandOnOffandVAV

Edit: Yeah it should be added too.

https://github.com/jmarrec/EnergyPlus/blob/6d979341f3d85973fca8f1e7afc02a6484be4bb4/src/EnergyPlus/HVACFan.cc#L732
Looking at FaultsManager, seems like it doesn't specifically restrict itself.

@jmarrec jmarrec self-assigned this Jan 24, 2020
@jmarrec jmarrec added the Defect Includes code to repair a defect in EnergyPlus label Jan 24, 2020
@jmarrec
Copy link
Contributor Author

jmarrec commented Jan 24, 2020

FanPerformance:NightVentilation,
       \memo Specifies an alternate set of performance parameters for a fan. These alternate
       \memo parameters are used when a system manager (such as AvailabilityManager:NightVentilation)
       \memo sets a specified flow rate.  May be used with any type of fan except not with
       \memo Fan:ComponentModel. If the fan model senses that a fixed flow rate has been set, it
       \memo will use these alternate performance parameters. It is assumed that the fan will
       \memo run at a fixed speed in the alternate mode.
  A1 , \field Fan Name
       \required-field
       \type object-list
       \object-list FansCVandVAV

SimplComponentModelFan seems to take this object into account though.

https://github.com/NREL/EnergyPlus/blob/cc65a0fb840ab7948e4d1c363bb9915f935c6fa3/src/EnergyPlus/Fans.cc#L2297:L2303

FanSystemModel and FanOnOff seem like they don't.

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

@jmarrec Confirmed that FaultModel:Fouling:AirFilter code does not support Fan:SystemModel.
Regarding FanPerformance:NightVentilation, Fan:SystemModel has the night ventilation options built-in, so the two are never used together. See #6903.

Please post a new issue to add support for Fan:SystemModel where missing so then we can proceed with #6903.

@jmarrec
Copy link
Contributor Author

jmarrec commented Jan 24, 2020

FaultModel:Fouling:AirFilter is called from HVACFan, so that's good no?

Added #7713

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

Interesting, but no. m_faultyFilterFlag is initialized to false and I don't see anywhere that it's ever changed.

And this code in FaultsManager.cc::CheckAndReadFaults (line 1510) only checks the old fans, so I'm fairly certain it will error out if you try to reference a Fan:SystemModel in the fault object.

            // Check whether the specified fan exists in the fan list
            if (UtilityRoutines::FindItemInList(cAlphaArgs(3), Fans::Fan, &Fans::FanEquipConditions::FanName) <= 0) {
                ShowSevereError(cFaultCurrentObject + " = \"" + cAlphaArgs(1) + "\" invalid " + cAlphaFieldNames(3) + " = \"" + cAlphaArgs(3) +
                                "\" not found.");
                ErrorsFound = true;
            }

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
2 participants