public static global::OpenStudio.ElectricEquipment ToOSMEquipmentGain(this BH.oM.Environment.SpaceCriteria.Equipment equipGain, global::OpenStudio.Model modelReference, global::OpenStudio.Space space) { // TODO: remove static instance below for input of profile object instead! global::OpenStudio.ScheduleConstant equipmentSchedule = ToOSMScheduleConstantsAlwaysOn(modelReference); ElectricEquipmentDefinition EquipmentDefinition = new ElectricEquipmentDefinition(modelReference); EquipmentDefinition.setDesignLevel(equipGain.Sensible); // TODO: Include additional methods to calculate equipment load here based on alternative metrics ElectricEquipment equipmentGain = new ElectricEquipment(EquipmentDefinition); equipmentGain.setSpace(space); equipmentGain.setSchedule(equipmentSchedule); return(equipmentGain); }
public static InternalCondition ToSAM_InternalCondtion(this ProgramType programType) { if (programType == null) { return(null); } InternalCondition result = new InternalCondition(programType.DisplayName); People people = programType.People; if (people != null) { result.SetValue(Analytical.InternalConditionParameter.OccupancyProfileName, Core.LadybugTools.Query.Identifier(people.OccupancySchedule)); } Lighting lighting = programType.Lighting; if (lighting != null) { result.SetValue(Analytical.InternalConditionParameter.LightingProfileName, Core.LadybugTools.Query.Identifier(lighting.Schedule)); } ElectricEquipment electricEquipment = programType.ElectricEquipment; if (electricEquipment != null) { result.SetValue(Analytical.InternalConditionParameter.EquipmentSensibleProfileName, Core.LadybugTools.Query.Identifier(electricEquipment.Schedule)); } Infiltration infiltration = programType.Infiltration; if (infiltration != null) { result.SetValue(Analytical.InternalConditionParameter.InfiltrationProfileName, Core.LadybugTools.Query.Identifier(infiltration.Schedule)); } Setpoint setPoint = programType.Setpoint; if (setPoint != null) { result.SetValue(Analytical.InternalConditionParameter.CoolingProfileName, Core.LadybugTools.Query.Identifier(setPoint.CoolingSchedule)); result.SetValue(Analytical.InternalConditionParameter.HeatingProfileName, Core.LadybugTools.Query.Identifier(setPoint.HeatingSchedule)); } return(result); }
public static List <Profile> ToSAM_Profiles(this ProgramType programType) { if (programType == null) { return(null); } List <Profile> result = new List <Profile>(); People people = programType.People; if (people != null) { AnyOf <ScheduleRuleset, ScheduleFixedInterval> occupancySchedule = people.OccupancySchedule; AnyOf <ScheduleRuleset, ScheduleFixedInterval> activitySchedule = people.ActivitySchedule; } Lighting lighting = programType.Lighting; if (lighting != null) { AnyOf <ScheduleRuleset, ScheduleFixedInterval> schedule = lighting.Schedule; } ElectricEquipment electricEquipment = programType.ElectricEquipment; if (electricEquipment != null) { AnyOf <ScheduleRuleset, ScheduleFixedInterval> schedule = electricEquipment.Schedule; } Infiltration infiltration = programType.Infiltration; if (infiltration != null) { AnyOf <ScheduleRuleset, ScheduleFixedInterval> schedule = infiltration.Schedule; } Setpoint setPoint = programType.Setpoint; if (setPoint != null) { AnyOf <ScheduleRuleset, ScheduleFixedInterval> coolingSchedule = setPoint.CoolingSchedule; AnyOf <ScheduleRuleset, ScheduleFixedInterval> heatingSchedule = setPoint.HeatingSchedule; } return(result); }
public static ProgramType ToLadybugTools(this Space space, AdjacencyCluster adjacencyCluster, ProfileLibrary profileLibrary) { InternalCondition internalCondition = space.InternalCondition; if (internalCondition == null) { return(null); } string uniqueName = Core.LadybugTools.Query.UniqueName(internalCondition); if (string.IsNullOrWhiteSpace(uniqueName)) { return(null); } People people = null; Lighting lighting = null; ElectricEquipment electricEquipment = null; Infiltration infiltration = null; Setpoint setpoint = null; if (profileLibrary != null) { double area = double.NaN; if (!space.TryGetValue(SpaceParameter.Area, out area)) { area = double.NaN; } Dictionary <ProfileType, Profile> dictionary = internalCondition.GetProfileDictionary(profileLibrary); if (dictionary.ContainsKey(ProfileType.Occupancy)) { Profile profile = dictionary[ProfileType.Occupancy]; if (profile != null) { double gain = Analytical.Query.OccupancyGain(space); if (double.IsNaN(gain)) { gain = 0; } ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerPeople = gain; if (double.IsNaN(gainPerPeople)) { gainPerPeople = 0; } double occupancy = Analytical.Query.CalculatedOccupancy(space); if (!double.IsNaN(occupancy) && occupancy != 0) { gainPerPeople = gainPerPeople / occupancy; } ScheduleRuleset scheduleRuleset_ActivityLevel = profile.ToLadybugTools_ActivityLevel(gainPerPeople); if (scheduleRuleset_ActivityLevel != null) { double peoplePerArea = Analytical.Query.CalculatedPeoplePerArea(space); if (double.IsNaN(peoplePerArea)) { peoplePerArea = 0; } double latentFraction = double.NaN; double sensibleOccupancyGain = Analytical.Query.OccupancySensibleGain(space); double latentOccupancyGain = Analytical.Query.OccupancyLatentGain(space); if (!double.IsNaN(sensibleOccupancyGain) || !double.IsNaN(latentOccupancyGain)) { latentFraction = latentOccupancyGain / (latentOccupancyGain + sensibleOccupancyGain); } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.OccupancyRadiantProportion, out double occuplancyRadiantProportion)) { occuplancyRadiantProportion = 0.3; } if (double.IsNaN(latentFraction)) { latentFraction = 0; } people = new People( identifier: string.Format("{0}_People", uniqueName), peoplePerArea: peoplePerArea, occupancySchedule: scheduleRuleset, displayName: profile.Name, userData: null, activitySchedule: scheduleRuleset_ActivityLevel, radiantFraction: occuplancyRadiantProportion, latentFraction: latentFraction); } } } } if (dictionary.ContainsKey(ProfileType.Lighting)) { Profile profile = dictionary[ProfileType.Lighting]; if (profile != null) { double gain = Analytical.Query.CalculatedLightingGain(space); if (double.IsNaN(gain)) { gain = 0; } ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerArea = gain; if (double.IsNaN(gainPerArea)) { gainPerArea = 0; } if (!double.IsNaN(area) && area != 0) { gainPerArea = gainPerArea / area; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.LightingRadiantProportion, out double lightingRadiantProportion)) { lightingRadiantProportion = 0.32; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.LightingViewCoefficient, out double lightingViewCoefficient)) { lightingViewCoefficient = 0.25; } lighting = new Lighting( identifier: string.Format("{0}_Lighting", uniqueName), wattsPerArea: gainPerArea, schedule: scheduleRuleset, visibleFraction: lightingViewCoefficient, radiantFraction: lightingRadiantProportion, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.EquipmentSensible)) { double gain = Analytical.Query.CalculatedEquipmentSensibleGain(space); if (double.IsNaN(gain)) { gain = 0; } Profile profile = dictionary[ProfileType.EquipmentSensible]; if (profile != null) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerArea = gain; if (double.IsNaN(gainPerArea)) { gainPerArea = 0; } if (!double.IsNaN(area) && area != 0) { gainPerArea = gainPerArea / area; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.EquipmentRadiantProportion, out double equipmentRadiantProportion)) { equipmentRadiantProportion = 0; } electricEquipment = new ElectricEquipment( identifier: string.Format("{0}_ElectricEquipment", uniqueName), wattsPerArea: gainPerArea, schedule: scheduleRuleset, radiantFraction: equipmentRadiantProportion, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.Infiltration)) { Profile profile = dictionary[ProfileType.Infiltration]; if (profile != null) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double airFlowPerExteriorArea = Query.InfiltrationAirFlowPerExteriorArea(adjacencyCluster, space); infiltration = new Infiltration( identifier: string.Format("{0}_Infiltration", uniqueName), flowPerExteriorArea: airFlowPerExteriorArea, schedule: scheduleRuleset, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.Cooling) && dictionary.ContainsKey(ProfileType.Heating)) { Profile profile_Cooling = dictionary[ProfileType.Cooling]; Profile profile_Heating = dictionary[ProfileType.Heating]; if (profile_Cooling != null && profile_Heating != null) { ScheduleRuleset scheduleRuleset_Cooling = profile_Cooling.ToLadybugTools(); ScheduleRuleset scheduleRuleset_Heating = profile_Heating.ToLadybugTools(); if (scheduleRuleset_Cooling != null && scheduleRuleset_Heating != null) { setpoint = new Setpoint(string.Format("{0}_Setpoint", uniqueName), scheduleRuleset_Cooling, scheduleRuleset_Heating, string.Format("Heating {0} Cooling {1}", profile_Heating.Name, profile_Cooling.Name)); Profile profile; if (dictionary.TryGetValue(ProfileType.Humidification, out profile)) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { setpoint.HumidifyingSchedule = scheduleRuleset; } } if (dictionary.TryGetValue(ProfileType.Dehumidification, out profile)) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { setpoint.DehumidifyingSchedule = scheduleRuleset; } } } } } } ProgramType result = new ProgramType( identifier: uniqueName, displayName: internalCondition.Name, userData: null, people: people, lighting: lighting, electricEquipment: electricEquipment, infiltration: infiltration, setpoint: setpoint); return(result); }