NREL / OpenStudio

OpenStudio is a cross-platform collection of software tools to support whole building energy modeling using EnergyPlus and advanced daylight analysis using Radiance.
https://www.openstudio.net/
Other
505 stars 192 forks source link

zone_mixing.setName doesn't enforce unique name #2385

Closed DavidGoldwasser closed 5 years ago

DavidGoldwasser commented 8 years ago

At least with zone mixing objects you can end up with duplicate objets. I assume this is not limited to zone mixing but happening on other object types.

User ran across this when running a measure twice. I can't think of any measures that check to see if a name is unique before setting it. I thought it would add a " 1" after it if it was already used, at least if it was an object of the same class. This caused an EnergyPlus error because of duplicate names of zone mixing objects.

macumber commented 7 years ago

A list of objects that can have duplicate names can be found with:

factory = OpenStudio::IddFileAndFactoryWrapper.new("OpenStudio".to_IddFileType) factory.objects.each {|o| puts o.name.to_s if (o.references.empty? and !o.properties.unique and o.hasNameField)}

OS:RunPeriodControl:SpecialDays OS:UtilityCost:Charge:Block OS:UtilityCost:Charge:Simple OS:UtilityCost:Computation OS:UtilityCost:Qualify OS:UtilityCost:Ratchet OS:UtilityCost:Tariff OS:UtilityCost:Variable OS:ZoneControl:ContaminantController OS:ZoneHVAC:HighTemperatureRadiant OS:ZoneHVAC:LowTemperatureRadiant:Electric OS:ZoneHVAC:LowTemperatureRadiant:ConstantFlow OS:ZoneHVAC:LowTemperatureRadiant:VariableFlow OS:ZoneHVAC:Baseboard:RadiantConvective:Electric OS:ZoneMixing OS:ElectricLoadCenter:Distribution OS:LifeCycleCost OS:LifeCycleCost:UsePriceEscalation OS:UtilityBill OS:Meter:Custom OS:Meter:CustomDecrement

macumber commented 7 years ago

Fix would be to put these objects in a reference list or implement enforcement of unique names at the all object list level (dangerous)

Don't want to add meters to a reference list as those have special naming conventions

This fix might cause previously valid OSMs to become invalid, so version translation is needed.

macumber commented 7 years ago

@Myoldmopar @mjwitte the list of objects in E+ that are not in an object list, not unique, and have a name (if you are interested) are:

=> ["RunPeriodControl:SpecialDays", "Site:GroundDomain:Slab", "Site:GroundDomain :Basement", "ZoneGroup", "SurfaceProperty:HeatTransferAlgorithm:MultipleSurface" , "SurfaceProperty:HeatTransferAlgorithm:SurfaceList", "SurfaceProperty:HeatTran sferAlgorithm:Construction", "SurfaceProperty:ExteriorNaturalVentedCavity", "Sur faceProperty:SolarIncidentInside", "ComplexFenestrationProperty:SolarAbsorbedLay ers", "GroundHeatTransfer:Control", "RoomAirModelType", "RoomAir:TemperaturePatt ern:UserDefined", "RoomAir:TemperaturePattern:ConstantGradient", "RoomAir:Temper aturePattern:TwoGradient", "RoomAir:TemperaturePattern:NondimensionalHeight", "R oomAir:TemperaturePattern:SurfaceMapping", "RoomAirSettings:AirflowNetwork", "Ga sEquipment", "HotWaterEquipment", "SteamEquipment", "OtherEquipment", "ElectricE quipment:ITE:AirCooled", "ZoneBaseboard:OutdoorTemperatureControlled", "Swimming Pool:Indoor", "ZoneContaminantSourceAndSink:CarbonDioxide", "ZoneContaminantSour ceAndSink:Generic:Constant", "SurfaceContaminantSourceAndSink:Generic:PressureDr iven", "ZoneContaminantSourceAndSink:Generic:DecaySource", "SurfaceContaminantSo urceAndSink:Generic:BoundaryLayerDiffusion", "SurfaceContaminantSourceAndSink:Ge neric:DepositionVelocitySink", "ZoneContaminantSourceAndSink:Generic:DepositionR ateSink", "Daylighting:Controls", "Daylighting:DELight:ComplexFenestration", "Da ylightingDevice:Tubular", "DaylightingDevice:Shelf", "Output:IlluminanceMap", "Z oneInfiltration:DesignFlowRate", "ZoneInfiltration:EffectiveLeakageArea", "ZoneI nfiltration:FlowCoefficient", "ZoneAirBalance:OutdoorAir", "ZoneMixing", "ZoneCr ossMixing", "ZoneRefrigerationDoorMixing", "ZoneCoolTower:Shower", "ZoneThermalC himney", "AirflowNetwork:Distribution:Linkage", "Exterior:FuelEquipment", "Exter ior:WaterEquipment", "HVACTemplate:Plant:Chiller", "HVACTemplate:Plant:Chiller:O bjectReference", "HVACTemplate:Plant:Tower", "HVACTemplate:Plant:Tower:ObjectRef erence", "HVACTemplate:Plant:Boiler", "HVACTemplate:Plant:Boiler:ObjectReference ", "ZoneControl:Thermostat:ThermalComfort", "ZoneControl:ContaminantController", "ZoneHVAC:IdealLoadsAirSystem", "ZoneHVAC:WindowAirConditioner", "ZoneHVAC:Dehu midifier:DX", "ZoneHVAC:EnergyRecoveryVentilator", "ZoneHVAC:UnitVentilator", "Z oneHVAC:UnitHeater", "ZoneHVAC:EvaporativeCoolerUnit", "ZoneHVAC:OutdoorAirUnit" , "ZoneHVAC:Baseboard:RadiantConvective:Water", "ZoneHVAC:CoolingPanel:RadiantCo nvective:Water", "ZoneHVAC:Baseboard:RadiantConvective:Steam", "ZoneHVAC:Baseboa rd:RadiantConvective:Electric", "ZoneHVAC:Baseboard:Convective:Water", "ZoneHVAC :Baseboard:Convective:Electric", "ZoneHVAC:LowTemperatureRadiant:VariableFlow", "ZoneHVAC:LowTemperatureRadiant:ConstantFlow", "ZoneHVAC:LowTemperatureRadiant:E lectric", "ZoneHVAC:HighTemperatureRadiant", "ZoneHVAC:VentilatedSlab", "AirTerm inal:SingleDuct:Uncontrolled", "AirTerminal:SingleDuct:VAV:NoReheat", "AirTermin al:SingleDuct:VAV:Reheat", "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan", "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat", "AirTerminal:SingleDuct:VAV: HeatAndCool:Reheat", "AirTerminal:SingleDuct:SeriesPIU:Reheat", "AirTerminal:Sin gleDuct:ParallelPIU:Reheat", "AirTerminal:SingleDuct:ConstantVolume:FourPipeIndu ction", "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam", "AirTerminal:Singl eDuct:ConstantVolume:CooledBeam", "AirTerminal:SingleDuct:Mixer", "AirTerminal:D ualDuct:ConstantVolume", "AirTerminal:DualDuct:VAV", "AirTerminal:DualDuct:VAV:O utdoorAir", "ZoneHVAC:AirDistributionUnit", "Coil:WaterHeating:Desuperheater", " CoilSystem:Cooling:DX", "CoilSystem:Heating:DX", "Humidifier:Steam:Electric", "H umidifier:Steam:Gas", "Dehumidifier:Desiccant:NoFans", "Dehumidifier:Desiccant:S ystem", "AirLoopHVAC:Unitary:Furnace:HeatOnly", "AirLoopHVAC:Unitary:Furnace:Hea tCool", "AirLoopHVAC:UnitaryHeatOnly", "AirLoopHVAC:UnitaryHeatCool", "AirLoopHV AC:UnitaryHeatPump:AirToAir", "AirLoopHVAC:UnitaryHeatPump:WaterToAir", "AirLoop HVAC:UnitaryHeatCool:VAVChangeoverBypass", "AirLoopHVAC:UnitaryHeatPump:AirToAir :MultiSpeed", "AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:HR ", "AirLoopHVAC:OutdoorAirSystem", "AirLoopHVAC:SupplyPath", "AirLoopHVAC:Return Path", "Connector:Splitter", "Connector:Mixer", "NodeList", "OutdoorAir:Node", " Pipe:Adiabatic", "Pipe:Adiabatic:Steam", "Pipe:Indoor", "Pipe:Outdoor", "Pipe:Un derground", "PipingSystem:Underground:Domain", "Duct", "Pump:VariableSpeed", "Pu mp:ConstantSpeed", "Pump:VariableSpeed:Condensate", "HeaderedPumps:ConstantSpeed ", "HeaderedPumps:VariableSpeed", "TemperingValve", "LoadProfile:Plant", "SolarC ollector:FlatPlate:Water", "SolarCollector:FlatPlate:PhotovoltaicThermal", "Sola rCollector:IntegralCollectorStorage", "Boiler:Steam", "ChillerHeater:Absorption: DirectFired", "ChillerHeater:Absorption:DoubleEffect", "HeatPump:WaterToWater:Eq uationFit:Heating", "HeatPump:WaterToWater:EquationFit:Cooling", "HeatPump:Water ToWater:ParameterEstimation:Cooling", "HeatPump:WaterToWater:ParameterEstimation :Heating", "DistrictCooling", "DistrictHeating", "PlantComponent:TemperatureSour ce", "CentralHeatPumpSystem", "EvaporativeFluidCooler:SingleSpeed", "Evaporative FluidCooler:TwoSpeed", "FluidCooler:SingleSpeed", "FluidCooler:TwoSpeed", "Groun dHeatExchanger:Vertical", "GroundHeatExchanger:Pond", "GroundHeatExchanger:Surfa ce", "GroundHeatExchanger:HorizontalTrench", "GroundHeatExchanger:Slinky", "Heat Exchanger:FluidToFluid", "WaterHeater:HeatPump:PumpedCondenser", "WaterHeater:He atPump:WrappedCondenser", "ThermalStorage:ChilledWater:Mixed", "ThermalStorage:C hilledWater:Stratified", "EnergyManagementSystem:Sensor", "EnergyManagementSyste m:Actuator", "EnergyManagementSystem:OutputVariable", "EnergyManagementSystem:Me teredOutputVariable", "EnergyManagementSystem:TrendVariable", "EnergyManagementS ystem:InternalVariable", "EnergyManagementSystem:CurveOrTableIndexVariable", "En ergyManagementSystem:ConstructionIndexVariable", "ExternalInterface:Variable", " ExternalInterface:Actuator", "ExternalInterface:FunctionalMockupUnitImport:To:Ac tuator", "ExternalInterface:FunctionalMockupUnitImport:To:Variable", "ExternalIn terface:FunctionalMockupUnitExport:To:Actuator", "ExternalInterface:FunctionalMo ckupUnitExport:To:Variable", "ZoneHVAC:ForcedAir:UserDefined", "AirTerminal:Sing leDuct:UserDefined", "PlantComponent:UserDefined", "PlantEquipmentOperation:User Defined", "SetpointManager:Scheduled", "SetpointManager:Scheduled:DualSetpoint", "SetpointManager:OutdoorAirReset", "SetpointManager:SingleZone:Reheat", "Setpoi ntManager:SingleZone:Heating", "SetpointManager:SingleZone:Cooling", "SetpointMa nager:SingleZone:Humidity:Minimum", "SetpointManager:SingleZone:Humidity:Maximum ", "SetpointManager:MixedAir", "SetpointManager:OutdoorAirPretreat", "SetpointMa nager:Warmest", "SetpointManager:Coldest", "SetpointManager:ReturnAirBypassFlow" , "SetpointManager:WarmestTemperatureFlow", "SetpointManager:MultiZone:Heating:A verage", "SetpointManager:MultiZone:Cooling:Average", "SetpointManager:MultiZone :MinimumHumidity:Average", "SetpointManager:MultiZone:MaximumHumidity:Average", "SetpointManager:MultiZone:Humidity:Minimum", "SetpointManager:MultiZone:Humidit y:Maximum", "SetpointManager:FollowOutdoorAirTemperature", "SetpointManager:Foll owSystemNodeTemperature", "SetpointManager:FollowGroundTemperature", "SetpointMa nager:CondenserEnteringReset", "SetpointManager:CondenserEnteringReset:Ideal", " SetpointManager:SingleZone:OneStageCooling", "SetpointManager:SingleZone:OneStag eHeating", "SetpointManager:ReturnTemperature:ChilledWater", "SetpointManager:Re turnTemperature:HotWater", "ZoneHVAC:RefrigerationChillerSet", "DemandManagerAss ignmentList", "ElectricLoadCenter:Distribution", "WaterUse:Connections", "WaterU se:Well", "WaterUse:RainCollector", "FaultModel:TemperatureSensorOffset:OutdoorA ir", "FaultModel:HumiditySensorOffset:OutdoorAir", "FaultModel:EnthalpySensorOff set:OutdoorAir", "FaultModel:PressureSensorOffset:OutdoorAir", "FaultModel:Tempe ratureSensorOffset:ReturnAir", "FaultModel:EnthalpySensorOffset:ReturnAir", "Fau ltModel:HumidistatOffset", "FaultModel:Fouling:AirFilter", "FaultModel:Fouling:C oil", "FluidProperties:GlycolConcentration", "ComponentCost:LineItem", "UtilityC ost:Qualify", "UtilityCost:Charge:Simple", "UtilityCost:Charge:Block", "UtilityC ost:Ratchet", "UtilityCost:Variable", "UtilityCost:Computation", "LifeCycleCost: RecurringCosts", "LifeCycleCost:NonrecurringCost", "LifeCycleCost:UsePriceEscala tion", "LifeCycleCost:UseAdjustment", "Parametric:SetValueForRun", "Output:Table :Monthly", "Output:Table:Annual", "Meter:Custom", "Meter:CustomDecrement"]

mjwitte commented 7 years ago

@macumber Not following the significance of "not in an object list".

macumber commented 7 years ago

@mjwitte by OpenStudio's logic (our understanding of E+ logic) names are only required to be unique within a reference list. So for example, you can have a zone and a construction with the same name. If an object is not in a reference list there there is no requirement that it have a unique name. However, it seems that E+ enforces some unique name logic internally (e.g. for ZoneMixing).

mjwitte commented 7 years ago

OK, but the object-lists are not a complete set of such requirements. At a minimum, names must be unique within an object class, of course. But there are requirements for unique names across certain groups of similar objects, such as Fan:* for example that really aren't clearly documented. And in actuality, the uniqueness within a reference list may be more strict than the actual input processor would require, especially where the object-list crosses a wide range of object types.

macumber commented 7 years ago

Thanks for the info Mike, this would be fairly high risk for us to change in OS now, have to decide to do it for 1.14 release or wait

DavidGoldwasser commented 7 years ago

I'm fine waiting. Don't don't think it is critical or very wide spread.

macumber commented 5 years ago

Duplicate of https://github.com/NREL/OpenStudio/issues/3079