public static Profile ToSAM(this TBD.InternalGain internalGain, TBD.Profiles profiles, ProfileType profileType, string prefix = null) { if (internalGain == null) { return(null); } TBD.profile profile = internalGain.GetProfile((int)profiles); if (profile == null) { return(null); } List <double> values = Core.Tas.Query.Values(profile); if (values == null) { return(null); } string name = null; if (string.IsNullOrEmpty(prefix)) { name = profile.name; } else { name = string.Format("{0} [{1}]", prefix, profile.name); } Profile result = new Profile(name, profileType, values); return(result); }
public static BHE.Profile FromTAS(this TBD.profile tbdProfile) { BHE.Profile profile = new BHE.Profile(); profile.Name = tbdProfile.name; switch (tbdProfile.type) { case TBD.ProfileTypes.ticValueProfile: profile.HourlyValues.Add(tbdProfile.value); break; case TBD.ProfileTypes.ticHourlyProfile: for (int i = 1; i < 25; i++) { profile.HourlyValues.Add(tbdProfile.hourlyValues[i]); } break; case TBD.ProfileTypes.ticYearlyProfile: profile.HourlyValues = ToDoubleList(tbdProfile.GetYearlyValues()); break; } TASDescription tasData = new TASDescription(); tasData.Description = tbdProfile.description.RemoveBrackets(); profile.Fragments.Add(tasData); return(profile); }
/// <summary> /// Gets Profiles from Internal Gain /// </summary> /// <param name="InternalGain">TAS Internal Gain</param> /// <returns name="Profiles">Profile List</returns> /// <search> /// TAS, Internal Gain, internal gains, Profiles, Get Profiles, tas, Internal Gain, zones, get zones /// </search> public static List <Profile> Profiles(InternalGain InternalGain) { List <int> aEnumList = new List <int>(); aEnumList.Add((int)TBD.Profiles.ticI); // Infiltration aEnumList.Add((int)TBD.Profiles.ticV); // Ventilation aEnumList.Add((int)TBD.Profiles.ticLG); // Lighting Gain aEnumList.Add((int)TBD.Profiles.ticOSG); // Occupancy Sensible Gain aEnumList.Add((int)TBD.Profiles.ticOLG); // Occupancy Latent Gain aEnumList.Add((int)TBD.Profiles.ticESG); // Equipment Sensible Gain aEnumList.Add((int)TBD.Profiles.ticELG); // Equipment Latent Gain aEnumList.Add((int)TBD.Profiles.ticCOG); // Polutant Generation List <Profile> aProfileList = new List <Profile>(); TBD.profile aProfile = null; foreach (int index in aEnumList) { aProfile = InternalGain.pInternalGain.GetProfile(index); if (aProfile != null) { aProfileList.Add(new Profile(aProfile)); } } return(aProfileList); }
public static List <double> Values(this TBD.profile profile) { if (profile == null) { return(null); } List <double> result = new List <double>(); switch (profile.type) { case TBD.ProfileTypes.ticValueProfile: result.Add(profile.value); break; case TBD.ProfileTypes.ticHourlyProfile: for (int i = 0; i <= 23; i++) { result.Add(profile.hourlyValues[i + 1]); } break; case TBD.ProfileTypes.ticYearlyProfile: for (int i = 0; i <= 8759; i++) { result.Add(profile.yearlyValues[i + 1]); } break; } return(result); }
public static double[] GetHourlyValues(TBD.profile profile) { double[] aResult = new double[24]; for (int i = 1; i <= 24; i++) { aResult[i - 1] = profile.hourlyValues[i]; } return(aResult); }
public static bool Update(this TBD.profile profile_TBD, Profile profile, double factor) { if (profile_TBD == null || profile == null || profile.Count == -1) { return(false); } profile_TBD.name = profile.Name; profile_TBD.description = profile.Name; if (profile.Count == 1) { profile_TBD.type = TBD.ProfileTypes.ticValueProfile; profile_TBD.factor = System.Convert.ToSingle(factor); profile_TBD.value = System.Convert.ToSingle(profile.GetValues()[0]); return(true); } if (profile.Count <= 24) { profile_TBD.type = TBD.ProfileTypes.ticHourlyProfile; profile_TBD.factor = System.Convert.ToSingle(factor); for (int i = 0; i <= 23; i++) { profile_TBD.hourlyValues[i + 1] = System.Convert.ToSingle(profile[i]); } return(true); } profile_TBD.type = TBD.ProfileTypes.ticYearlyProfile; profile_TBD.factor = System.Convert.ToSingle(factor); //object yearlyValues_TBD = profile_TBD.GetYearlyValues(); //float[] array = Query.Array<float>(yearlyValues_TBD); double[] yearlyValues = profile.GetYearlyValues(); float[] yearlyValues_float = new float[yearlyValues.Length]; for (int i = 0; i < yearlyValues_float.Length; i++) { yearlyValues_float[i] = System.Convert.ToSingle(yearlyValues[i]); } profile_TBD.SetYearlyValues(yearlyValues_float); //for (int i = 0; i < 8759; i++) // profile_TBD.yearlyValues[i] = System.Convert.ToSingle(profile[i]); return(true); }
/// <summary> /// Gets TAS Thermostat Profiles /// </summary> /// <param name="Thermostat">Thermostat</param> /// <returns name="Profiles">Profile List</returns> /// <search> /// TAS, Thermostat, Profiles, profiles, thermostat /// </search> public static List <Profile> Profiles(Thermostat Thermostat) { List <Profile> aProfileList = new List <Profile>(); int aIndex = 1; TBD.profile aProfile = Thermostat.pThermostat.GetProfile(aIndex); while (aProfile != null) { aProfileList.Add(new Profile(aProfile)); aIndex++; aProfile = Thermostat.pThermostat.GetProfile(aIndex); } return(aProfileList); }
/// <summary> /// Gets Profiles from Internal Gain /// </summary> /// <param name="InternalGain">TAS Internal Gain</param> /// <returns name="Profiles">Profile List</returns> /// <search> /// TAS, Internal Gain, internal gains, Profiles, Get Profiles, tas, Internal Gain, zones, get zones /// </search> public static List <Profile> Profiles(InternalGain InternalGain) { List <Profile> aProfileList = new List <Profile>(); int aIndex = 0; TBD.profile aProfile = InternalGain.pInternalGain.GetProfile(aIndex); while (aProfile != null) { aProfileList.Add(new Profile(aProfile)); aIndex++; aProfile = InternalGain.pInternalGain.GetProfile(aIndex); } return(aProfileList); }
public static double[] DailyValues(this TBD.profile profile) { if (profile == null) { return(null); } double[] result = new double[24]; for (int i = 1; i <= 24; i++) { result[i - 1] = profile.hourlyValues[i]; } return(result); }
public static TBD.profile ToTAS(this BHE.Profile profile, TBD.profile tbdProfile) { if (profile == null) { return(tbdProfile); } tbdProfile.name = profile.Name; TASDescription tasFragment = profile.FindFragment <TASDescription>(typeof(TASDescription)); if (tasFragment != null) { tbdProfile.description = tasFragment.Description; } return(tbdProfile); }
public static float GetSingleValueUpperLimit(this TBD.Thermostat tbdICThermostat) { float maxUL = 150; if (tbdICThermostat == null) { return(-1); } TBD.profile tbdUpperLimitProfile = tbdICThermostat.GetProfile((int)TBD.Profiles.ticUL); switch (tbdUpperLimitProfile.type) { case TBD.ProfileTypes.ticValueProfile: maxUL = tbdUpperLimitProfile.value; break; case TBD.ProfileTypes.ticHourlyProfile: for (int i = 1; i <= 24; i++) { if (tbdUpperLimitProfile.hourlyValues[i] <= maxUL) { maxUL = tbdUpperLimitProfile.hourlyValues[i]; } } break; case TBD.ProfileTypes.ticYearlyProfile: for (int i = 1; i <= 8760; i++) { if (tbdUpperLimitProfile.yearlyValues[i] >= maxUL) { maxUL = tbdUpperLimitProfile.yearlyValues[i]; } } break; // case other profile types etc. } return(maxUL); }
/// <summary> /// Gets TAS Thermostat Profiles /// </summary> /// <param name="Thermostat">Thermostat</param> /// <returns name="Profiles">Profile List</returns> /// <search> /// TAS, Thermostat, Profiles, profiles, thermostat /// </search> public static List <Profile> Profiles(Thermostat Thermostat) { List <int> enumList = new List <int>(); enumList.Add((int)TBD.Profiles.ticUL); // Temperature Upper Limit enumList.Add((int)TBD.Profiles.ticLL); // Temperature Lower Limit enumList.Add((int)TBD.Profiles.ticHUL); // Humidity Upper Limit enumList.Add((int)TBD.Profiles.ticHLL); // Humidity Lower Limit List <Profile> aProfileList = new List <Profile>(); TBD.profile aProfile = null; foreach (int index in enumList) { aProfile = Thermostat.pThermostat.GetProfile(index); if (aProfile != null) { aProfileList.Add(new Profile(aProfile)); } } return(aProfileList); }
public static bool AssignOpeningTypes(this TBD.Building building, TBD.buildingElement buildingElement, IEnumerable <TBD.dayType> dayTypes, OpeningType openingType) { if (building == null || buildingElement == null || openingType == null || dayTypes == null) { return(false); } TBD.ApertureType apertureType_Day = null; string function; function = null; if (openingType.TryGetValue("SAM_ApertureFunctionDay", out function, true) && !string.IsNullOrWhiteSpace(function)) { apertureType_Day = building.AddApertureType(null); apertureType_Day.name = buildingElement.name + "_Day"; foreach (TBD.dayType aDayType in dayTypes) { apertureType_Day.SetDayType(aDayType, true); } int sheltered; if (openingType.TryGetValue("SAM_ApertureShelteredDay", out sheltered, true)) { apertureType_Day.sheltered = sheltered; } else { apertureType_Day.sheltered = 0; } string description_ApertureType; if (openingType.TryGetValue("SAM_ApertureDescriptionDay", out description_ApertureType, true)) { apertureType_Day.description = description_ApertureType; } TBD.profile profile = apertureType_Day.GetProfile(); profile.type = TBD.ProfileTypes.ticFunctionProfile; profile.function = function; double factor; if (openingType.TryGetValue("SAM_ApertureOpeningProportionDay", out factor, true)) { profile.factor = (float)factor; } double setbackValue; if (openingType.TryGetValue("SAM_ApertureOpeningProportionDaySetBack", out setbackValue, true)) { profile.setbackValue = (float)setbackValue; } string description_Profile; if (openingType.TryGetValue("SAM_ApertureProfileDescriptionDay", out description_Profile, true)) { profile.description = description_Profile; } string scheduleValues; if (openingType.TryGetValue("SAM_ApertureScheduleDay", out scheduleValues, true)) { string name_Schedule = string.Format("{0}_{1}", apertureType_Day.name, "APSCHED"); List <int> values = scheduleValues.Ints(); TBD.schedule schedule = Create.Schedule(building, name_Schedule, values); if (schedule != null) { profile.schedule = schedule; } } } TBD.ApertureType apertureType_Night = null; function = null; if (openingType.TryGetValue("SAM_ApertureFunctionNight", out function, true) && !string.IsNullOrWhiteSpace(function)) { apertureType_Day = building.AddApertureType(null); apertureType_Day.name = buildingElement.name + "_Night"; foreach (TBD.dayType aDayType in dayTypes) { apertureType_Day.SetDayType(aDayType, true); } int sheltered; if (openingType.TryGetValue("SAM_ApertureShelteredNight", out sheltered, true)) { apertureType_Day.sheltered = sheltered; } else { apertureType_Day.sheltered = 0; } string description_ApertureType; if (openingType.TryGetValue("SAM_ApertureDescriptionNight", out description_ApertureType, true)) { apertureType_Day.description = description_ApertureType; } TBD.profile profile = apertureType_Day.GetProfile(); profile.type = TBD.ProfileTypes.ticFunctionProfile; profile.function = function; double factor; if (openingType.TryGetValue("SAM_ApertureOpeningProportionNight", out factor, true)) { profile.factor = (float)factor; } double setbackValue; if (openingType.TryGetValue("SAM_ApertureOpeningProportionNightSetBack", out setbackValue, true)) { profile.setbackValue = (float)setbackValue; } string description_Profile; if (openingType.TryGetValue("SAM_ApertureProfileDescriptionNight", out description_Profile, true)) { profile.description = description_Profile; } string scheduleValues; if (openingType.TryGetValue("SAM_ApertureScheduleNight", out scheduleValues, true)) { string name_Schedule = string.Format("{0}_{1}", apertureType_Day.name, "APSCHED"); List <int> values = scheduleValues.Ints(); TBD.schedule schedule = Create.Schedule(building, name_Schedule, values); if (schedule != null) { profile.schedule = schedule; } } } if (apertureType_Day != null) { buildingElement.AssignApertureType(apertureType_Day); } if (apertureType_Night != null) { buildingElement.AssignApertureType(apertureType_Night); } return(true); }
internal Profile(TBD.profile Profile) { pProfile = Profile; }
public static bool UpdateInternalCondition_HDD(this TBD.InternalCondition internalCondition_TBD, InternalCondition internalCondition, ProfileLibrary profileLibrary) { if (internalCondition_TBD == null || internalCondition == null) { return(false); } internalCondition_TBD.description = internalCondition.Name + " - HDD"; internalCondition_TBD.includeSolarInMRT = 0; TBD.Emitter emitter = null; double value = double.NaN; emitter = internalCondition_TBD.GetHeatingEmitter(); if (emitter != null) { if (internalCondition.TryGetValue(InternalConditionParameter.HeatingEmitterRadiantProportion, out value)) { emitter.radiantProportion = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.HeatingEmitterCoefficient, out value)) { emitter.viewCoefficient = System.Convert.ToSingle(value); } } emitter = internalCondition_TBD.GetCoolingEmitter(); if (emitter != null) { if (internalCondition.TryGetValue(InternalConditionParameter.CoolingEmitterRadiantProportion, out value)) { emitter.radiantProportion = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.CoolingEmitterCoefficient, out value)) { emitter.viewCoefficient = System.Convert.ToSingle(value); } } TBD.InternalGain internalGain = internalCondition_TBD.GetInternalGain(); internalGain.name = internalCondition.Name + " - HDD"; Profile profile = null; profile = internalCondition.GetProfile(ProfileType.Infiltration, profileLibrary); if (profile != null) { if (internalCondition.TryGetValue(InternalConditionParameter.InfiltrationAirChangesPerHour, out value)) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticI); if (profile_TBD != null) { profile_TBD.name = profile.Name; profile_TBD.type = TBD.ProfileTypes.ticValueProfile; profile_TBD.factor = 1; profile_TBD.value = System.Convert.ToSingle(value); } } } TBD.Thermostat thermostat = internalCondition_TBD.GetThermostat(); if (thermostat != null) { thermostat.controlRange = 0; thermostat.proportionalControl = 0; profile = internalCondition.GetProfile(ProfileType.Heating, profileLibrary); if (profile != null) { thermostat.name = profile.Name; TBD.profile profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticLL); if (profile_TBD != null) { value = profile.MaxValue; if (!double.IsNaN(value)) { profile_TBD.name = profile.Name; profile_TBD.type = TBD.ProfileTypes.ticValueProfile; profile_TBD.factor = 1; profile_TBD.value = System.Convert.ToSingle(value); } } } } return(true); }
public static InternalCondition ToSAM(this TBD.InternalCondition internalCondition, double area = double.NaN) { if (internalCondition == null) { return(null); } InternalCondition result = new InternalCondition(internalCondition.name); TBD.Emitter emitter = null; emitter = internalCondition.GetHeatingEmitter(); if (emitter != null) { result.SetValue(InternalConditionParameter.HeatingEmitterRadiantProportion, emitter.radiantProportion); result.SetValue(InternalConditionParameter.HeatingEmitterCoefficient, emitter.viewCoefficient); } emitter = internalCondition.GetCoolingEmitter(); if (emitter != null) { result.SetValue(InternalConditionParameter.CoolingEmitterRadiantProportion, emitter.radiantProportion); result.SetValue(InternalConditionParameter.CoolingEmitterCoefficient, emitter.viewCoefficient); } TBD.InternalGain internalGain = internalCondition.GetInternalGain(); if (internalGain != null) { result.SetValue(InternalConditionParameter.LightingRadiantProportion, internalGain.lightingRadProp); result.SetValue(InternalConditionParameter.OccupancyRadiantProportion, internalGain.occupantRadProp); result.SetValue(InternalConditionParameter.EquipmentRadiantProportion, internalGain.equipmentRadProp); result.SetValue(InternalConditionParameter.LightingViewCoefficient, internalGain.lightingViewCoefficient); result.SetValue(InternalConditionParameter.OccupancyViewCoefficient, internalGain.occupantViewCoefficient); result.SetValue(InternalConditionParameter.EquipmentViewCoefficient, internalGain.equipmentViewCoefficient); TBD.profile profile_TBD = null; profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticI); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.InfiltrationProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.InfiltrationAirChangesPerHour, profile_TBD.GetExtremeValue(true)); } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticLG); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.LightingProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.LightingGainPerArea, profile_TBD.GetExtremeValue(true)); result.SetValue(InternalConditionParameter.LightingLevel, internalGain.targetIlluminance); } double personGain = internalGain.personGain; double gain = 0; profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticOSG); if (profile_TBD != null) { double value = profile_TBD.GetExtremeValue(true); result.SetValue(InternalConditionParameter.OccupancySensibleGainPerPerson, value); gain += value; } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticOLG); if (profile_TBD != null) { double value = profile_TBD.GetExtremeValue(true); result.SetValue(InternalConditionParameter.OccupancyProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.OccupancyLatentGainPerPerson, value); gain += value; } if (!double.IsNaN(area) && !double.IsNaN(gain)) { double occupancy = (gain * area) / personGain; result.SetValue(InternalConditionParameter.AreaPerPerson, area / occupancy); } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticESG); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.EquipmentSensibleProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.EquipmentSensibleGainPerArea, profile_TBD.GetExtremeValue(true)); } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticELG); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.EquipmentLatentProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.EquipmentLatentGainPerArea, profile_TBD.GetExtremeValue(true)); } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticCOG); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.PollutantProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); result.SetValue(InternalConditionParameter.PollutantGenerationPerArea, profile_TBD.GetExtremeValue(true)); } } TBD.Thermostat thermostat = internalCondition.GetThermostat(); if (internalGain != null) { TBD.profile profile_TBD = null; profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticUL); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.CoolingProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); } profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticLL); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.HeatingProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); } profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticHLL); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.HumidificationProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); } profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticHUL); if (profile_TBD != null) { result.SetValue(InternalConditionParameter.DehumidificationProfileName, string.Format("{0} [{1}]", internalCondition.name, profile_TBD.name)); } } return(result); }
public static bool UpdateInternalCondition(this TBD.InternalCondition internalCondition_TBD, Space space, ProfileLibrary profileLibrary) { if (space == null || internalCondition_TBD == null) { return(false); } InternalCondition internalCondition = space.InternalCondition; if (internalCondition == null) { return(false); } internalCondition_TBD.name = space.Name; internalCondition_TBD.description = internalCondition.Name; internalCondition_TBD.includeSolarInMRT = 1; TBD.Emitter emitter = null; double value = double.NaN; emitter = internalCondition_TBD.GetHeatingEmitter(); if (emitter != null) { emitter.name = internalCondition.GetSystemTypeName <HeatingSystemType>(); if (internalCondition.TryGetValue(InternalConditionParameter.HeatingEmitterRadiantProportion, out value)) { emitter.radiantProportion = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.HeatingEmitterCoefficient, out value)) { emitter.viewCoefficient = System.Convert.ToSingle(value); } } emitter = internalCondition_TBD.GetCoolingEmitter(); if (emitter != null) { emitter.name = internalCondition.GetSystemTypeName <CoolingSystemType>(); if (internalCondition.TryGetValue(InternalConditionParameter.CoolingEmitterRadiantProportion, out value)) { emitter.radiantProportion = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.CoolingEmitterCoefficient, out value)) { emitter.viewCoefficient = System.Convert.ToSingle(value); } } TBD.InternalGain internalGain = internalCondition_TBD.GetInternalGain(); if (internalCondition.TryGetValue(InternalConditionParameter.LightingRadiantProportion, out value)) { internalGain.lightingRadProp = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.OccupancyRadiantProportion, out value)) { internalGain.occupantRadProp = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.EquipmentRadiantProportion, out value)) { internalGain.equipmentRadProp = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.LightingViewCoefficient, out value)) { internalGain.lightingViewCoefficient = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.OccupancyViewCoefficient, out value)) { internalGain.occupantViewCoefficient = System.Convert.ToSingle(value); } if (internalCondition.TryGetValue(InternalConditionParameter.EquipmentViewCoefficient, out value)) { internalGain.equipmentViewCoefficient = System.Convert.ToSingle(value); } internalGain.domesticHotWater = (float)0.197; internalGain.name = internalCondition.Name; internalGain.description = internalCondition.GetSystemTypeName <VentilationSystemType>(); if (internalCondition.TryGetValue(InternalConditionParameter.LightingLevel, out value)) { internalGain.targetIlluminance = System.Convert.ToSingle(value); } internalGain.personGain = 0; double occupancyGainPerPerson = Analytical.Query.OccupancyGainPerPerson(space); if (!double.IsNaN(occupancyGainPerPerson)) { internalGain.personGain = System.Convert.ToSingle(occupancyGainPerPerson); } Profile profile = null; profile = internalCondition.GetProfile(ProfileType.Infiltration, profileLibrary); if (profile != null) { if (internalCondition.TryGetValue(InternalConditionParameter.InfiltrationAirChangesPerHour, out value)) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticI); if (profile_TBD != null) { Update(profile_TBD, profile, value); } } } double area = double.NaN; if (!space.TryGetValue(SpaceParameter.Area, out area)) { area = double.NaN; } profile = internalCondition.GetProfile(ProfileType.Lighting, profileLibrary); if (profile != null) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticLG); if (profile_TBD != null) { double gain = Analytical.Query.CalculatedLightingGain(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(gain)) { gain = 0; } else { gain = gain / area; } Update(profile_TBD, profile, gain); } } profile = internalCondition.GetProfile(ProfileType.Occupancy, profileLibrary); if (profile != null) { TBD.profile profile_TBD = null; profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticOLG); if (profile_TBD != null) { double gain = Analytical.Query.OccupancyLatentGain(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(gain)) { gain = 0; } else { gain = gain / area; } Update(profile_TBD, profile, gain); } profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticOSG); if (profile_TBD != null) { double gain = Analytical.Query.OccupancySensibleGain(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(gain)) { gain = 0; } else { gain = gain / area; } Update(profile_TBD, profile, gain); } } profile = internalCondition.GetProfile(ProfileType.EquipmentSensible, profileLibrary); if (profile != null) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticESG); if (profile_TBD != null) { double gain = Analytical.Query.CalculatedEquipmentSensibleGain(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(gain)) { gain = 0; } else { gain = gain / area; } Update(profile_TBD, profile, gain); } } profile = internalCondition.GetProfile(ProfileType.EquipmentLatent, profileLibrary); if (profile != null) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticELG); if (profile_TBD != null) { double gain = Analytical.Query.CalculatedEquipmentLatentGain(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(gain)) { gain = 0; } else { gain = gain / area; } Update(profile_TBD, profile, gain); } } profile = internalCondition.GetProfile(ProfileType.Pollutant, profileLibrary); if (profile != null) { TBD.profile profile_TBD = internalGain.GetProfile((int)TBD.Profiles.ticCOG); if (profile_TBD != null) { double generation = Analytical.Query.CalculatedPollutantGeneration(space); if (double.IsNaN(area) || area == 0 || double.IsNaN(generation)) { generation = 0; } else { generation = generation / area; } Update(profile_TBD, profile, generation); } } TBD.Thermostat thermostat = internalCondition_TBD.GetThermostat(); if (thermostat != null) { List <string> names = new List <string>(); thermostat.controlRange = 0; thermostat.proportionalControl = 0; profile = internalCondition.GetProfile(ProfileType.Cooling, profileLibrary); if (profile != null) { names.Add(profile.Name); TBD.profile profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticUL); if (profile_TBD != null) { Update(profile_TBD, profile, 1); } } profile = internalCondition.GetProfile(ProfileType.Heating, profileLibrary); if (profile != null) { names.Add(profile.Name); TBD.profile profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticLL); if (profile_TBD != null) { Update(profile_TBD, profile, 1); } } profile = internalCondition.GetProfile(ProfileType.Humidification, profileLibrary); if (profile != null) { names.Add(profile.Name); TBD.profile profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticHLL); if (profile_TBD != null) { Update(profile_TBD, profile, 1); } } profile = internalCondition.GetProfile(ProfileType.Dehumidification, profileLibrary); if (profile != null) { names.Add(profile.Name); TBD.profile profile_TBD = thermostat.GetProfile((int)TBD.Profiles.ticHUL); if (profile_TBD != null) { Update(profile_TBD, profile, 1); } } names.RemoveAll(x => string.IsNullOrWhiteSpace(x)); if (names.Count != 0) { thermostat.name = string.Join(" & ", names); } } return(true); }
public static Dictionary <TBD.Profiles, Dictionary <string, double[]> > TemperatureSetPointDictionary(this TBD.Building building, params TBD.Profiles[] profiles) { List <TBD.zone> zones = building?.Zones(); if (zones == null) { return(null); } List <TBD.dayType> dayTypes = building.DayTypes(); if (dayTypes == null) { return(null); } Dictionary <TBD.Profiles, Dictionary <string, Dictionary <string, double[]> > > dictionary_DayType = new Dictionary <TBD.Profiles, Dictionary <string, Dictionary <string, double[]> > >(); foreach (TBD.Profiles profiles_Enum in profiles) { dictionary_DayType[profiles_Enum] = new Dictionary <string, Dictionary <string, double[]> >(); foreach (TBD.dayType dayType in dayTypes) { Dictionary <string, double[]> dictionary_Zone = new Dictionary <string, double[]>(); dictionary_DayType[profiles_Enum][dayType.name] = dictionary_Zone; foreach (TBD.zone zone in zones) { TBD.InternalCondition internalCondition = InternalCondition(zone, dayType); if (internalCondition == null) { continue; } TBD.Thermostat thermostat = internalCondition.GetThermostat(); TBD.profile profile = thermostat.GetProfile((int)profiles_Enum); double[] dailyValues = DailyValues(profile); dictionary_Zone.Add(zone.GUID, dailyValues); } } } dayTypes = building.DayTypes(0, 365); Dictionary <TBD.Profiles, Dictionary <string, double[]> > result = new Dictionary <TBD.Profiles, Dictionary <string, double[]> >(); foreach (KeyValuePair <TBD.Profiles, Dictionary <string, Dictionary <string, double[]> > > keyValuePair in dictionary_DayType) { Dictionary <string, double[]> dictionary_Zone = new Dictionary <string, double[]>(); foreach (TBD.zone zone in zones) { bool exists = true; double[] yearlyValues = new double[8760]; int aCount = 0; for (int i = 0; i < 365; i++) { TBD.dayType dayType = dayTypes[i]; if (!keyValuePair.Value.ContainsKey(dayType.name) || !keyValuePair.Value[dayType.name].ContainsKey(zone.GUID)) { exists = false; break; } double[] dailyValues = keyValuePair.Value[dayType.name][zone.GUID]; for (int j = 0; j < 24; j++) { yearlyValues[aCount] = dailyValues[j]; aCount++; } } if (exists) { dictionary_Zone.Add(zone.GUID, yearlyValues); } } result[keyValuePair.Key] = dictionary_Zone; } return(result); }
public static TBD.IZAM IZAM(this TBD.Building building, Space space, string name, bool from, IEnumerable <TBD.zone> zones, IEnumerable <TBD.dayType> dayTypes) { string directionText = "To"; if (from) { directionText = "From"; } string name_Direction = null; if (!space.TryGetValue(string.Format("SAM_IZAM_{0}_Source", directionText), out name_Direction, true)) { return(null); } if (string.IsNullOrWhiteSpace(name_Direction)) { return(null); } TBD.IZAM iZAM = building.AddIZAM(null); foreach (TBD.dayType aDayType in dayTypes) { iZAM.SetDayType(aDayType, true); } TBD.zone zone_Source = null; TBD.zone zone_Assign = null; TBD.zone zone = zones.Zone(name_Direction); if (zone != null) { if (from) { iZAM.name = string.Format("IZAM_{0}_FROM_{1}", name, name_Direction); zone_Source = zone; zone_Assign = zones.Zone(name); } else { iZAM.name = string.Format("IZAM_{0}_FROM_{1}", name_Direction, name); zone_Source = zones.Zone(name); zone_Assign = zone; } } else { iZAM.name = string.Format("IZAM_{0}_{1} OUTSIDE", name, directionText.ToUpper()); zone_Assign = zones.Zone(name); if (from) { iZAM.fromOutside = 1; } else { iZAM.fromOutside = 0; } } if (zone_Source != null) { iZAM.SetSourceZone(zone_Source); } if (zone_Assign != null) { zone_Assign.AssignIZAM(iZAM, true); } TBD.profile profile = iZAM.GetProfile(); profile.type = TBD.ProfileTypes.ticValueProfile; double value; if (space.TryGetValue(string.Format("SAM_IZAM_{0}_Value", directionText), out value, true)) { profile.value = (float)value; } double factor; if (space.TryGetValue(string.Format("SAM_IZAM_{0}_ValueFactor", directionText), out factor, true)) { profile.factor = (float)factor; } double setbackValue; if (space.TryGetValue(string.Format("SAM_IZAM_{0}_ValueSetBack", directionText), out setbackValue, true)) { profile.setbackValue = (float)setbackValue; } string scheduleValues = null; if (space.TryGetValue(string.Format("SAM_IZAM_{0}_Schedule", directionText), out scheduleValues, true)) { string name_Schedule = string.Format("SAM_IZAM_{0}_Schedule_{1}", directionText, "IZAMSCHED"); List <int> values = scheduleValues.Ints(); TBD.schedule schedule = Schedule(building, name_Schedule, values); if (schedule != null) { profile.schedule = schedule; } } return(iZAM); }
public static double[] GetNumberOfPeople(TBD.TBDDocument tbdDocument, TBD.zone tbdZone) { if (tbdDocument == null) { return(null); } TBD.dayType[] aDayTypeArray = GetDayTypeArray(tbdDocument); List <TBD.dayType> aDayTypeList_Unique = GetUnique(aDayTypeArray); double[] aHourlyValues = null; double[] aHourlyValuesLatent = null; double aTotalPersonGain = 0; Dictionary <string, double[]> aDictionary_DayType = new Dictionary <string, double[]>(); Dictionary <string, double[]> aDictionary_DayTypeLatent = new Dictionary <string, double[]>(); foreach (TBD.dayType aDayType in aDayTypeList_Unique) { TBD.InternalCondition aInternalCondition = GetInternalCondition(tbdZone, aDayType); if (aInternalCondition == null) { continue; } TBD.IInternalGain aInternalGain = aInternalCondition.GetInternalGain(); aTotalPersonGain = aInternalGain.personGain; TBD.profile aProfile = aInternalGain.GetProfile((int)TBD.Profiles.ticOSG); TBD.profile aProfileLatent = aInternalGain.GetProfile((int)TBD.Profiles.ticOLG); //check if profile hourly or yearly if yearly take it and skip next step aHourlyValues = GetHourlyValues(aProfile); aHourlyValuesLatent = GetHourlyValues(aProfileLatent); //double[] result = x.Select(r => r * factor).ToArray(); aHourlyValues = MultiplyByFactor(aHourlyValues, aProfile.factor); aHourlyValuesLatent = MultiplyByFactor(aHourlyValuesLatent, aProfile.factor); aDictionary_DayType.Add(aDayType.name, aHourlyValues); aDictionary_DayTypeLatent.Add(aDayType.name, aHourlyValuesLatent); } double[] aYearlyValues = new double[8760]; int aCount = 0; for (int i = 0; i < 365; i++) { TBD.dayType aDayType = aDayTypeArray[i]; if (!aDictionary_DayType.ContainsKey(aDayType.name)) { break; } aHourlyValues = aDictionary_DayType[aDayType.name]; for (int j = 0; j < 24; j++) { aYearlyValues[aCount] = aHourlyValues[j]; aCount++; } } double[] aYearlyValuesLatent = new double[8760]; aCount = 0; for (int i = 0; i < 365; i++) { TBD.dayType aDayType = aDayTypeArray[i]; if (!aDictionary_DayType.ContainsKey(aDayType.name)) { break; } aHourlyValuesLatent = aDictionary_DayTypeLatent[aDayType.name]; for (int j = 0; j < 24; j++) { aYearlyValuesLatent[aCount] = aHourlyValuesLatent[j]; aCount++; } } double[] aNumberOfPeople = new double[7]; double aMaxSpecificSensibleGain = aYearlyValues.Max();//Unit W/m2 sensible gain aNumberOfPeople[0] = aMaxSpecificSensibleGain; double aMaxSpecificLatentGain = aYearlyValuesLatent.Max();//Unit W/m2 latent gain aNumberOfPeople[1] = aMaxSpecificLatentGain; double aPeopleDesity = (aMaxSpecificLatentGain + aMaxSpecificSensibleGain) / aTotalPersonGain; //Unit people/m2 aNumberOfPeople[2] = aPeopleDesity; double aPeople = tbdZone.floorArea * aPeopleDesity; aNumberOfPeople[3] = aPeople; double aPersonSensibleGain = aMaxSpecificSensibleGain / aPeopleDesity; //sensible gain per person aNumberOfPeople[4] = aPersonSensibleGain; double aPersonLatenteGain = aMaxSpecificLatentGain / aPeopleDesity; //sensible gain per person aNumberOfPeople[5] = aPersonLatenteGain; double aMetabolicRateCheck = aPersonSensibleGain + aPersonLatenteGain; aNumberOfPeople[6] = aMetabolicRateCheck; return(aYearlyValues); }