public static TBD.InternalCondition AddInternalCondition_HDD(this TBD.Building building, Space space, ProfileLibrary profileLibrary)
        {
            if (building == null || space == null || profileLibrary == null)
            {
                return(null);
            }

            TBD.InternalCondition internalCondition = building.AddIC(null);
            if (internalCondition == null)
            {
                return(null);
            }

            List <TBD.dayType> dayTypes = building.DayTypes();

            if (dayTypes != null)
            {
                dayTypes.RemoveAll(x => !x.name.Equals("HDD"));
                foreach (TBD.dayType dayType in dayTypes)
                {
                    internalCondition.SetDayType(dayType, true);
                }
            }

            UpdateInternalCondition_HDD(internalCondition, space, profileLibrary);

            return(internalCondition);
        }
        /// <summary>
        /// Adds TAS Building zone group
        /// </summary>
        /// <param name="Building">TAS Building</param>
        /// <param name="Name">Name</param>
        /// <param name="Description">Description</param>
        /// <returns name="InternalCondition">Internal Condition</returns>
        /// <search>
        /// TAS, Building, Internal Condition, Add Internal Condition, tas, builidng, internal condition, add internal condition
        /// </search>
        public static InternalCondition AddInternalCondition(Building Building, string Name, string Description)
        {
            TBD.InternalCondition aInternalCondition = Building.pBuilding.AddIC(null);
            aInternalCondition.name        = Name;
            aInternalCondition.description = Description;

            return(new InternalCondition(aInternalCondition));
        }
Exemple #3
0
        /// <summary>
        /// Gets TAS Zone Internal Conditions
        /// </summary>
        /// <param name="Zone">TAS Zone</param>
        /// <returns name="InternalConditions">Internal Condition List</returns>
        /// <search>
        /// TAS, Zone, InternalConditions, Internal Conditions, internalconditions, internal conditions
        /// </search>
        public static List <InternalCondition> InternalConditions(Zone Zone)
        {
            List <InternalCondition> aInternalConditionList = new List <InternalCondition>();

            int aIndex = 0;

            TBD.InternalCondition aInternalCondition = Zone.pZone.GetIC(aIndex);
            while (aInternalCondition != null)
            {
                aInternalConditionList.Add(new InternalCondition(aInternalCondition));
                aIndex++;
                aInternalCondition = Zone.pZone.GetIC(aIndex);
            }
            return(aInternalConditionList);
        }
        /// <summary>
        /// Gets TAS Building Internal Conditions
        /// </summary>
        /// <param name="Building">TAS Building</param>
        /// <returns name="InternalConditions">Building Internal Conditions</returns>
        /// <search>
        /// TAS, Building, Zones, Get Internal Conditions, tas, builidng, zones, get internalcondition, InternalCondition, internalcondition
        /// </search>
        public static List <InternalCondition> InternalConditions(Building Building)
        {
            List <InternalCondition> aZoneList = new List <InternalCondition>();

            int aIndex = 0;

            TBD.InternalCondition aInternalCondition = Building.pBuilding.GetIC(aIndex);
            while (aInternalCondition != null)
            {
                aZoneList.Add(new InternalCondition(aInternalCondition));
                aIndex++;
                aInternalCondition = Building.pBuilding.GetIC(aIndex);
            }
            return(aZoneList);
        }
Exemple #5
0
        public static TBD.zone UpdateZone_HDD(this TBD.Building building, TBD.zone zone, Space space, ProfileLibrary profileLibrary)
        {
            if (space == null || profileLibrary == null || zone == null || building == null)
            {
                return(null);
            }

            TBD.InternalCondition internalCondition_TBD = AddInternalCondition_HDD(building, space, profileLibrary);
            if (internalCondition_TBD == null)
            {
                return(null);
            }

            zone.AssignIC(internalCondition_TBD, true);

            return(zone);
        }
Exemple #6
0
        public static List <TBD.zone> Zones(this TBD.InternalCondition internalCondition)
        {
            if (internalCondition == null)
            {
                return(null);
            }

            List <TBD.zone> result = new List <TBD.zone>();

            TBD.zone zone = internalCondition.GetZone(result.Count);
            while (zone != null)
            {
                result.Add(zone);
                zone = internalCondition.GetZone(result.Count);
            }

            return(result);
        }
Exemple #7
0
        public static List <TBD.dayType> DayTypes(this TBD.InternalCondition internalCondition)
        {
            if (internalCondition == null)
            {
                return(null);
            }

            List <TBD.dayType> result = new List <TBD.dayType>();

            TBD.dayType dayType = internalCondition.GetDayType(result.Count);
            while (dayType != null)
            {
                result.Add(dayType);
                dayType = internalCondition.GetDayType(result.Count);
            }

            return(result);
        }
Exemple #8
0
        private static bool HasDayType(TBD.InternalCondition internalCondition, TBD.dayType dayType)
        {
            int aIndex = 0;

            TBD.dayType aDayType = internalCondition.GetDayType(aIndex);
            while (aDayType != null)
            {
                if (aDayType.name == dayType.name)
                {
                    return(true);
                }

                aIndex++;
                aDayType = internalCondition.GetDayType(aIndex);
            }

            return(false);
        }
        public static bool UpdateInternalCondition_HDD(this TBD.InternalCondition internalCondition_TBD, Space space, ProfileLibrary profileLibrary)
        {
            if (internalCondition_TBD == null || space == null)
            {
                return(false);
            }

            InternalCondition internalCondition = space.InternalCondition;

            if (internalCondition == null)
            {
                return(false);
            }

            internalCondition_TBD.name = space.Name + " - HDD";

            return(UpdateInternalCondition_HDD(internalCondition_TBD, internalCondition, profileLibrary));
        }
Exemple #10
0
        public static List <bool> RemoveInternalConditions(this TBD.Building building, IEnumerable <string> names)
        {
            if (building == null || names == null)
            {
                return(null);
            }

            HashSet <string> hashSet = new HashSet <string>();

            foreach (string name in names)
            {
                hashSet.Add(name);
            }

            List <int> indexes = new List <int>();

            List <bool> result = new List <bool>();

            int index = 0;

            TBD.InternalCondition internalCondition = building.GetIC(index);
            while (internalCondition != null)
            {
                string name = internalCondition.name;

                bool contains = hashSet.Contains(name);
                result.Add(contains);

                if (contains)
                {
                    indexes.Add(index);
                }

                index++;
                internalCondition = building.GetIC(index);
            }

            for (int i = indexes.Count - 1; i >= 0; i--)
            {
                building.RemoveIC(indexes[i]);
            }

            return(result);
        }
Exemple #11
0
        public static TBD.zone UpdateZone(this TBD.Building building, TBD.zone zone, Space space, ProfileLibrary profileLibrary)
        {
            if (space == null || profileLibrary == null || building == null || zone == null)
            {
                return(null);
            }

            TBD.InternalCondition internalCondition_TBD = AddInternalCondition(building, space, profileLibrary);
            if (internalCondition_TBD == null)
            {
                return(null);
            }

            zone.AssignIC(internalCondition_TBD, true);

            List <string> values = new List <string>();

            //TODO: Update [Id] to [Element Id]
            if (space.TryGetValue("Element Id", out string id))
            {
                if (!string.IsNullOrWhiteSpace(id))
                {
                    values.Add(string.Format("[Id]={0}", id));
                }
            }

            //TODO: Update [LevelName] to [Level Name]
            if (space.TryGetValue(SpaceParameter.LevelName, out string levelName))
            {
                if (!string.IsNullOrWhiteSpace(levelName))
                {
                    values.Add(string.Format("[LevelName]={0}", levelName));
                }
            }

            if (values != null && values.Count > 0)
            {
                zone.description = string.Join("; ", values);
            }

            return(zone);
        }
Exemple #12
0
        public static List <TBD.InternalCondition> InternalConditions(this TBD.zone zone)
        {
            if (zone == null)
            {
                return(null);
            }

            List <TBD.InternalCondition> result = new List <TBD.InternalCondition>();

            int count = 0;

            TBD.InternalCondition internalCondition = zone.GetIC(count);
            while (internalCondition != null)
            {
                result.Add(internalCondition);

                count++;
                internalCondition = zone.GetIC(count);
            }

            return(result);
        }
Exemple #13
0
        public static List <TBD.InternalCondition> InternalConditions(this TBD.Building building)
        {
            if (building == null)
            {
                return(null);
            }

            List <TBD.InternalCondition> result = new List <TBD.InternalCondition>();

            int count = 0;

            TBD.InternalCondition internalCondition = building.GetIC(count);
            while (internalCondition != null)
            {
                result.Add(internalCondition);

                count++;
                internalCondition = building.GetIC(count);
            }

            return(result);
        }
Exemple #14
0
        public static TBD.InternalCondition InternalCondition(this TBD.zone zone, TBD.dayType dayType)
        {
            if (zone == null)
            {
                return(null);
            }

            int index = 0;

            TBD.InternalCondition internalCondition = zone.GetIC(index);
            while (internalCondition != null)
            {
                if (HasDayType(internalCondition, dayType))
                {
                    return(internalCondition);
                }

                index++;
                internalCondition = zone.GetIC(index);
            }

            return(null);
        }
        private static TBD.InternalCondition GetInternalCondition(TBD.zone zone, TBD.dayType dayType)
        {
            if (zone == null)
            {
                return(null);
            }


            int aIndex = 0;

            TBD.InternalCondition aInternalCondition = zone.GetIC(aIndex);
            while (aInternalCondition != null)
            {
                if (HasDayType(aInternalCondition, dayType))
                {
                    return(aInternalCondition);
                }

                aIndex++;
                aInternalCondition = zone.GetIC(aIndex);
            }
            return(null);;
        }
Exemple #16
0
 internal InternalCondition(TBD.InternalCondition InternalCondition)
 {
     pInternalCondition = InternalCondition;
 }
        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);
        }
Exemple #18
0
        public static List <Profile> ToSAM_Profiles(this TBD.InternalCondition internalCondition)
        {
            if (internalCondition == null)
            {
                return(null);
            }

            List <Profile> result = new List <Profile>();

            TBD.InternalGain internalGain = internalCondition.GetInternalGain();
            if (internalGain != null)
            {
                Profile profile = null;

                profile = ToSAM(internalGain, TBD.Profiles.ticI, ProfileType.Infiltration, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticLG, ProfileType.Lighting, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticOLG, ProfileType.Occupancy, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticOSG, ProfileType.Occupancy, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticESG, ProfileType.EquipmentSensible, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticELG, ProfileType.EquipmentLatent, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(internalGain, TBD.Profiles.ticCOG, ProfileType.Pollutant, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }
            }

            TBD.Thermostat thermostat = internalCondition.GetThermostat();
            if (thermostat != null)
            {
                Profile profile = null;

                profile = ToSAM(thermostat, TBD.Profiles.ticUL, ProfileType.Cooling, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(thermostat, TBD.Profiles.ticLL, ProfileType.Heating, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(thermostat, TBD.Profiles.ticHLL, ProfileType.Humidification, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }

                profile = ToSAM(thermostat, TBD.Profiles.ticHUL, ProfileType.Dehumidification, internalCondition.name);
                if (profile != null)
                {
                    result.Add(profile);
                }
            }

            return(result);
        }
Exemple #19
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);
        }
Exemple #20
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);
        }
        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);
        }
Exemple #22
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);
        }