Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
 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);
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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);
        }