Пример #1
0
        public static List <Guid> AddDesignDays(this TBD.Building building, IEnumerable <DesignDay> coolingDesignDays, IEnumerable <DesignDay> heatingDesignDays, int repetitions = 30)
        {
            if (building == null)
            {
                return(null);
            }

            building.ClearDesignDays();

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

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

            if (coolingDesignDays != null && coolingDesignDays.Count() != 0)
            {
                TBD.dayType dayType = dayTypes?.Find(x => x.name == "CDD");
                List <TBD.CoolingDesignDay> coolingDesignDays_TBD = building.CoolingDesignDays();
                foreach (DesignDay designDay in coolingDesignDays)
                {
                    if (designDay == null)
                    {
                        continue;
                    }

                    TBD.CoolingDesignDay coolingDesignDay_TBD = coolingDesignDays_TBD?.Find(x => x.name == designDay.Name);
                    if (coolingDesignDay_TBD == null)
                    {
                        coolingDesignDay_TBD = building.AddCoolingDesignDay();
                    }

                    coolingDesignDay_TBD.Update(designDay, dayType, repetitions);
                    result.Add(Guid.Parse(coolingDesignDay_TBD.GUID));
                }
            }

            if (heatingDesignDays != null && heatingDesignDays.Count() != 0)
            {
                TBD.dayType dayType = dayTypes?.Find(x => x.name == "HDD");

                List <TBD.HeatingDesignDay> heatingDesignDays_TBD = building.HeatingDesignDays();
                foreach (DesignDay designDay in heatingDesignDays)
                {
                    if (designDay == null)
                    {
                        continue;
                    }

                    TBD.HeatingDesignDay heatingDesignDay_TBD = heatingDesignDays_TBD?.Find(x => x.name == designDay.Name);
                    if (heatingDesignDay_TBD == null)
                    {
                        heatingDesignDay_TBD = building.AddHeatingDesignDay();
                    }

                    heatingDesignDay_TBD.Update(designDay, dayType, repetitions);
                    result.Add(Guid.Parse(heatingDesignDay_TBD.GUID));
                }
            }

            return(result);
        }
Пример #2
0
        public static TBD.dayType DayType(this TBD.TBDDocument tBDDocument, string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                return(null);
            }

            TBD.Calendar calendar = tBDDocument?.Building?.GetCalendar();
            if (calendar == null)
            {
                return(null);
            }

            int index = 1;

            TBD.dayType dayType = calendar.dayTypes(index);
            while (dayType != null)
            {
                if (dayType.name.Equals(name))
                {
                    return(dayType);
                }

                index++;
                dayType = calendar.dayTypes(index);
            }

            return(null);
        }
Пример #3
0
        private static TBD.dayType[] GetDayTypeArray(TBD.TBDDocument tbdDocument)
        {
            TBD.dayType[] aDayTypeArray = new TBD.dayType[365];

            TBD.Calendar aCalendar = tbdDocument.Building.GetCalendar();
            for (int i = 0; i < 365; i++)
            {
                aDayTypeArray[i] = aCalendar.days(i + 1).dayType;
            }

            return(aDayTypeArray);
        }
Пример #4
0
        public static BHE.SimulationDayType FromTAS(this TBD.dayType tbdDayType)
        {
            if (tbdDayType.name.Equals("Weekday"))
            {
                return(BHE.SimulationDayType.Weekday);
            }
            if (tbdDayType.name.Equals("Monday"))
            {
                return(BHE.SimulationDayType.Monday);
            }
            if (tbdDayType.name.Equals("Tuesday"))
            {
                return(BHE.SimulationDayType.Tuesday);
            }
            if (tbdDayType.name.Equals("Wednesday"))
            {
                return(BHE.SimulationDayType.Wednesday);
            }
            if (tbdDayType.name.Equals("Thursday"))
            {
                return(BHE.SimulationDayType.Thursday);
            }
            if (tbdDayType.name.Equals("Friday"))
            {
                return(BHE.SimulationDayType.Friday);
            }
            if (tbdDayType.name.Equals("Saturday"))
            {
                return(BHE.SimulationDayType.Saturday);
            }
            if (tbdDayType.name.Equals("Sunday"))
            {
                return(BHE.SimulationDayType.Sunday);
            }
            if (tbdDayType.name.Equals("Public Holiday"))
            {
                return(BHE.SimulationDayType.PublicHoliday);
            }
            if (tbdDayType.name.Equals("CDD"))
            {
                return(BHE.SimulationDayType.CoolingDesignDay);
            }
            if (tbdDayType.name.Equals("HDD"))
            {
                return(BHE.SimulationDayType.HeatingDesignDay);
            }
            if (tbdDayType.name.Equals("Weekend"))
            {
                return(BHE.SimulationDayType.Weekend);
            }

            return(BHE.SimulationDayType.Undefined);
        }
Пример #5
0
        /// <summary>
        /// Gets TAS Internal Condition Day Types
        /// </summary>
        /// <param name="InternalCondition">TAS Internal Condition</param>
        /// <returns name="DayTypes">Day Type List</returns>
        /// <search>
        /// TAS, InternalCondition, DayTypes, Day Types
        /// </search>
        public static List <DayType> DayTypes(InternalCondition InternalCondition)
        {
            List <DayType> aDayTypeList = new List <DayType>();

            int aIndex = 1;

            TBD.dayType aDayType = InternalCondition.pInternalCondition.GetDayType(aIndex);
            while (aDayType != null)
            {
                aDayTypeList.Add(new DayType(aDayType));
                aIndex++;
                aDayType = InternalCondition.pInternalCondition.GetDayType(aIndex);
            }
            return(aDayTypeList);
        }
        /// <summary>
        /// Gets all TAS TBD Substitute Element Day Types
        /// </summary>
        /// <param name="SubstituteElement">Substitute Element</param>
        /// <returns name="DayTypes">Day Type List</returns>
        /// <search>
        /// TAS, TBD, SubstituteElement, Substitute Element, DayTypes, GetDayTypes, Day Types
        /// </search>
        public static List <DayType> DayTypes(SubstituteElement SubstituteElement)
        {
            List <DayType> aDayTypeList = new List <DayType>();

            int aIndex = 0;

            TBD.dayType aDayType = SubstituteElement.pSubstituteElement.GetDayType(aIndex);
            while (aDayType != null)
            {
                aDayTypeList.Add(new DayType(aDayType));
                aIndex++;
                aDayType = SubstituteElement.pSubstituteElement.GetDayType(aIndex);
            }
            return(aDayTypeList);
        }
Пример #7
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);
        }
Пример #8
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);
        }
Пример #9
0
        public static List <TBD.dayType> DayTypes(this TBD.Calendar calendar)
        {
            if (calendar == null)
            {
                return(null);
            }

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

            for (int i = 1; i <= calendar.GetDayTypeCount(); i++)
            {
                TBD.dayType dayType = calendar.dayTypes(i);
                if (dayType != null)
                {
                    result.Add(dayType);
                }
            }

            return(result);
        }
Пример #10
0
        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);;
        }
Пример #11
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);
        }
Пример #12
0
        public static AnalyticalModel RunWorkflow(this AnalyticalModel analyticalModel, string path_TBD, string path_gbXML = null, Weather.WeatherData weatherData = null, List <DesignDay> heatingDesignDays = null, List <DesignDay> coolingDesignDays = null, List <SurfaceOutputSpec> surfaceOutputSpecs = null, bool unmetHours = true)
        {
            if (analyticalModel == null || string.IsNullOrWhiteSpace(path_TBD))
            {
                return(null);
            }

            string directory = System.IO.Path.GetDirectoryName(path_TBD);
            string fileName  = System.IO.Path.GetFileNameWithoutExtension(path_TBD);

            string path_TSD = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "tsd"));

            if (!string.IsNullOrWhiteSpace(path_gbXML))
            {
                string path_T3D = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "t3d"));

                string guid = null;
                using (SAMT3DDocument sAMT3DDocument = new SAMT3DDocument(path_T3D))
                {
                    TAS3D.T3DDocument t3DDocument = sAMT3DDocument.T3DDocument;
                    guid = t3DDocument.Building.GUID;
                    sAMT3DDocument.Save();
                }

                float latitude  = float.NaN;
                float longitude = float.NaN;
                float timeZone  = float.NaN;
                using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
                {
                    TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                    if (weatherData != null)
                    {
                        Weather.Tas.Modify.UpdateWeatherData(tBDDocument, weatherData);
                    }

                    if (!string.IsNullOrWhiteSpace(guid))
                    {
                        tBDDocument.Building.GUID = guid;
                    }

                    TBD.Calendar calendar = tBDDocument.Building.GetCalendar();

                    List <TBD.dayType> dayTypes = Query.DayTypes(calendar);
                    if (dayTypes.Find(x => x.name == "HDD") == null)
                    {
                        TBD.dayType dayType = calendar.AddDayType();
                        dayType.name = "HDD";
                    }

                    if (dayTypes.Find(x => x.name == "CDD") == null)
                    {
                        TBD.dayType dayType = calendar.AddDayType();
                        dayType.name = "CDD";
                    }

                    latitude  = tBDDocument.Building.latitude;
                    longitude = tBDDocument.Building.longitude;
                    timeZone  = tBDDocument.Building.timeZone;

                    sAMTBDDocument.Save();
                }

                using (SAMT3DDocument sAMT3DDocument = new SAMT3DDocument(path_T3D))
                {
                    TAS3D.T3DDocument t3DDocument = sAMT3DDocument.T3DDocument;

                    t3DDocument.TogbXML(path_gbXML, true, true, true);
                    t3DDocument.SetUseBEWidths(false);
                    analyticalModel = Query.UpdateT3D(analyticalModel, t3DDocument);

                    t3DDocument.Building.latitude  = float.IsNaN(latitude) ? t3DDocument.Building.latitude : latitude;
                    t3DDocument.Building.longitude = float.IsNaN(longitude) ? t3DDocument.Building.longitude : longitude;
                    t3DDocument.Building.timeZone  = float.IsNaN(timeZone) ? t3DDocument.Building.timeZone : timeZone;

                    sAMT3DDocument.Save();

                    Convert.ToTBD(t3DDocument, path_TBD, 1, 365, 15, true);
                }
            }

            AdjacencyCluster adjacencyCluster = null;

            bool hasWeatherData = false;

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                hasWeatherData = tBDDocument?.Building.GetWeatherYear() != null;

                analyticalModel = Query.UpdateFacingExternal(analyticalModel, tBDDocument);
                AssignAdiabaticConstruction(tBDDocument, "Adiabatic", new string[] { "-unzoned", "-internal", "-exposed" }, false, true);
                UpdateBuildingElements(tBDDocument, analyticalModel);

                adjacencyCluster = analyticalModel.AdjacencyCluster;
                UpdateThermalParameters(adjacencyCluster, tBDDocument.Building);
                analyticalModel = new AnalyticalModel(analyticalModel, adjacencyCluster);

                UpdateZones(tBDDocument.Building, analyticalModel, true);

                if (coolingDesignDays != null || heatingDesignDays != null)
                {
                    AddDesignDays(tBDDocument, coolingDesignDays, heatingDesignDays, 30);
                }

                sAMTBDDocument.Save();
            }

            if (!hasWeatherData)
            {
                return(new AnalyticalModel(analyticalModel, adjacencyCluster));
            }

            Query.Sizing(path_TBD, analyticalModel, false, true);

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                if (surfaceOutputSpecs != null && surfaceOutputSpecs.Count > 0)
                {
                    Core.Tas.Modify.UpdateSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs);
                    Core.Tas.Modify.AssignSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs[0].Name);
                    sAMTBDDocument.Save();
                }

                Simulate(tBDDocument, path_TSD, 1, 1);
            }

            adjacencyCluster = analyticalModel.AdjacencyCluster;
            List <Core.Result> results = AddResults(path_TSD, adjacencyCluster);

            if (unmetHours)
            {
                List <Core.Result> results_UnmetHours = Query.UnmetHours(path_TSD, path_TBD, 0.5);
                if (results_UnmetHours != null && results_UnmetHours.Count > 0)
                {
                    foreach (Core.Result result in results_UnmetHours)
                    {
                        if (result is AdjacencyClusterSimulationResult)
                        {
                            adjacencyCluster.AddObject(result);
                        }
                        else if (result is SpaceSimulationResult)
                        {
                            SpaceSimulationResult spaceSimulationResult = (SpaceSimulationResult)result;

                            List <SpaceSimulationResult> spaceSimulationResults = Query.Results(results, spaceSimulationResult);
                            if (spaceSimulationResults == null)
                            {
                                results.Add(spaceSimulationResult);
                            }
                            else
                            {
                                spaceSimulationResults.ForEach(x => Core.Modify.Copy(spaceSimulationResult, x, Analytical.SpaceSimulationResultParameter.UnmetHourFirstIndex, Analytical.SpaceSimulationResultParameter.UnmetHours, Analytical.SpaceSimulationResultParameter.OccupiedUnmetHours));
                            }
                        }
                    }
                }
            }

            AnalyticalModel analyticalModel_Temp = new AnalyticalModel(analyticalModel, adjacencyCluster);

            //if (System.IO.File.Exists(path_TSD))
            //{
            //    string path_TPD = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "tpd"));

            //    CreateTPD(path_TPD, path_TSD, analyticalModel_Temp);
            //}

            adjacencyCluster = UpdateDesignLoads(path_TBD, analyticalModel_Temp.AdjacencyCluster);

            return(new AnalyticalModel(analyticalModel, adjacencyCluster));
        }
Пример #13
0
 public static TBD.dayType ToTAS(this BHE.SimulationDayType dayType, TBD.dayType tbdDayType)
 {
     tbdDayType.name = dayType.ToTASString();
     return(tbdDayType);
 }
Пример #14
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="dataAccess">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess dataAccess)
        {
            int index_successful = Params.IndexOfOutputParam("successful");

            if (index_successful != -1)
            {
                dataAccess.SetData(index_successful, false);
            }

            int index;

            bool run = false;

            index = Params.IndexOfInputParam("_run");
            if (index == -1 || !dataAccess.GetData(index, ref run))
            {
                run = false;
            }

            if (!run)
            {
                return;
            }

            string path_TBD = null;

            index = Params.IndexOfInputParam("_path_TBD");
            if (index == -1 || !dataAccess.GetData(index, ref path_TBD) || string.IsNullOrWhiteSpace(path_TBD))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data");
                return;
            }

            AnalyticalModel analyticalModel = null;

            index = Params.IndexOfInputParam("_analyticalModel");
            if (index == -1 || !dataAccess.GetData(index, ref analyticalModel) || string.IsNullOrWhiteSpace(path_TBD))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data");
                return;
            }

            WeatherData weatherData = null;

            index = Params.IndexOfInputParam("weatherData_");
            if (index != -1)
            {
                if (!dataAccess.GetData(index, ref weatherData))
                {
                    weatherData = null;
                }
            }

            List <DesignDay> heatingDesignDays = new List <DesignDay>();

            index = Params.IndexOfInputParam("heatingDesignDays_");
            if (index == -1 || !dataAccess.GetDataList(index, heatingDesignDays) || heatingDesignDays == null || heatingDesignDays.Count == 0)
            {
                heatingDesignDays = null;
            }

            List <DesignDay> coolingDesignDays = new List <DesignDay>();

            index = Params.IndexOfInputParam("coolingDesignDays_");
            if (index == -1 || !dataAccess.GetDataList(index, coolingDesignDays) || coolingDesignDays == null || coolingDesignDays.Count == 0)
            {
                coolingDesignDays = null;
            }

            List <SurfaceOutputSpec> surfaceOutputSpecs = null;

            List <GH_ObjectWrapper> objectWrappers = new List <GH_ObjectWrapper>();

            index = Params.IndexOfInputParam("surfaceOutputSpec_");
            if (index != -1 && dataAccess.GetDataList(index, objectWrappers) && objectWrappers != null && objectWrappers.Count != 0)
            {
                surfaceOutputSpecs = new List <SurfaceOutputSpec>();
                foreach (GH_ObjectWrapper objectWrapper in objectWrappers)
                {
                    object value = objectWrapper.Value;
                    if (value is IGH_Goo)
                    {
                        value = (value as dynamic)?.Value;
                    }

                    if (value is bool && ((bool)value))
                    {
                        SurfaceOutputSpec surfaceOutputSpec = new SurfaceOutputSpec("Tas.Simulate");
                        surfaceOutputSpec.SolarGain    = true;
                        surfaceOutputSpec.Conduction   = true;
                        surfaceOutputSpec.ApertureData = false;
                        surfaceOutputSpec.Condensation = false;
                        surfaceOutputSpec.Convection   = false;
                        surfaceOutputSpec.LongWave     = false;
                        surfaceOutputSpec.Temperature  = false;

                        surfaceOutputSpecs.Add(surfaceOutputSpec);
                    }
                    else if (Core.Query.IsNumeric(value) && Core.Query.TryConvert(value, out double @double) && @double == 2.0)
                    {
                        surfaceOutputSpecs = new List <SurfaceOutputSpec>()
                        {
                            new SurfaceOutputSpec("Tas.Simulate")
                        };
                        surfaceOutputSpecs[0].SolarGain    = true;
                        surfaceOutputSpecs[0].Conduction   = true;
                        surfaceOutputSpecs[0].ApertureData = true;
                        surfaceOutputSpecs[0].Condensation = true;
                        surfaceOutputSpecs[0].Convection   = true;
                        surfaceOutputSpecs[0].LongWave     = true;
                        surfaceOutputSpecs[0].Temperature  = true;
                    }
                    else if (value is SurfaceOutputSpec)
                    {
                        surfaceOutputSpecs.Add((SurfaceOutputSpec)value);
                    }
                }
            }

            bool unmetHours = false;

            index = Params.IndexOfInputParam("_runUnmetHours_");
            if (index != -1)
            {
                if (!dataAccess.GetData(index, ref unmetHours))
                {
                    unmetHours = true;
                }
            }

            if (System.IO.File.Exists(path_TBD))
            {
                System.IO.File.Delete(path_TBD);
            }

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                if (weatherData != null)
                {
                    Weather.Tas.Modify.UpdateWeatherData(tBDDocument, weatherData);
                }

                TBD.Calendar calendar = tBDDocument.Building.GetCalendar();

                List <TBD.dayType> dayTypes = Grashopper.Tas.Query.DayTypes(calendar);
                if (dayTypes.Find(x => x.name == "HDD") == null)
                {
                    TBD.dayType dayType = calendar.AddDayType();
                    dayType.name = "HDD";
                }

                if (dayTypes.Find(x => x.name == "CDD") == null)
                {
                    TBD.dayType dayType = calendar.AddDayType();
                    dayType.name = "CDD";
                }

                Analytical.Tas.Convert.ToTBD(analyticalModel, tBDDocument);
                Analytical.Tas.Modify.UpdateZones(tBDDocument.Building, analyticalModel, true);

                if (coolingDesignDays != null || heatingDesignDays != null)
                {
                    Analytical.Tas.Modify.AddDesignDays(tBDDocument, coolingDesignDays, heatingDesignDays, 30);
                }

                sAMTBDDocument.Save();
            }

            analyticalModel = Analytical.Tas.Modify.RunWorkflow(analyticalModel, path_TBD, null, weatherData, heatingDesignDays, coolingDesignDays, surfaceOutputSpecs, unmetHours);

            index = Params.IndexOfOutputParam("_path_TSD");
            if (index != -1)
            {
                string directory = System.IO.Path.GetDirectoryName(path_TBD);
                string fileName  = System.IO.Path.GetFileNameWithoutExtension(path_TBD);

                string path_TSD = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "tsd"));

                dataAccess.SetData(index, path_TSD);
            }

            index = Params.IndexOfOutputParam("analyticalModel");
            if (index != -1)
            {
                dataAccess.SetData(index, analyticalModel);
            }

            if (index_successful != -1)
            {
                dataAccess.SetData(index_successful, true);
            }
        }
Пример #15
0
        public static bool Update(this TBD.DesignDay designDay_TBD, DesignDay designDay, TBD.dayType dayType = null, int repetitions = 30)
        {
            if (designDay_TBD == null)
            {
                return(false);
            }

            designDay_TBD.yearDay     = designDay.GetDateTime().DayOfYear;
            designDay_TBD.repetitions = repetitions;

            if (dayType != null)
            {
                designDay_TBD.SetDayType(dayType);
            }

            return(Weather.Tas.Modify.Update(designDay_TBD?.GetWeatherDay(), designDay));
        }
Пример #16
0
        public static bool Update(this TBD.HeatingDesignDay heatingDesignDay_TBD, DesignDay designDay, TBD.dayType dayType = null, int repetitions = 30)
        {
            if (heatingDesignDay_TBD == null || designDay == null)
            {
                return(false);
            }

            heatingDesignDay_TBD.name = designDay.Name;
            foreach (TBD.DesignDay designDay_TBD in heatingDesignDay_TBD.DesignDays())
            {
                designDay_TBD?.Update(designDay, dayType, repetitions);
            }

            return(true);
        }
Пример #17
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);
        }
Пример #18
0
 internal DayType(TBD.dayType DayType)
 {
     pDayType = DayType;
 }
        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);
        }
Пример #20
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="dataAccess">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess dataAccess)
        {
            int index_successful = Params.IndexOfOutputParam("successful");

            if (index_successful != -1)
            {
                dataAccess.SetData(index_successful, false);
            }

            int index;

            bool run = false;

            index = Params.IndexOfInputParam("_run");
            if (index == -1 || !dataAccess.GetData(index, ref run))
            {
                run = false;
            }

            if (!run)
            {
                return;
            }

            string path = null;

            index = Params.IndexOfInputParam("_path_TBD");
            if (index == -1 || !dataAccess.GetData(index, ref path) || string.IsNullOrWhiteSpace(path))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data");
                return;
            }

            AnalyticalModel analyticalModel = null;

            index = Params.IndexOfInputParam("_analyticalModel");
            if (index == -1 || !dataAccess.GetData(index, ref analyticalModel) || string.IsNullOrWhiteSpace(path))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data");
                return;
            }

            WeatherData weatherData = null;

            index = Params.IndexOfInputParam("weatherData_");
            if (index != -1)
            {
                if (!dataAccess.GetData(index, ref weatherData))
                {
                    weatherData = null;
                }
            }

            List <DesignDay> heatingDesignDays = new List <DesignDay>();

            index = Params.IndexOfInputParam("heatingDesignDays_");
            if (index == -1 || !dataAccess.GetDataList(index, heatingDesignDays) || heatingDesignDays == null || heatingDesignDays.Count == 0)
            {
                heatingDesignDays = null;
            }

            List <DesignDay> coolingDesignDays = new List <DesignDay>();

            index = Params.IndexOfInputParam("coolingDesignDays_");
            if (index == -1 || !dataAccess.GetDataList(index, coolingDesignDays) || coolingDesignDays == null || coolingDesignDays.Count == 0)
            {
                coolingDesignDays = null;
            }

            if (System.IO.File.Exists(path))
            {
                System.IO.File.Delete(path);
            }

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                if (weatherData != null)
                {
                    Weather.Tas.Modify.UpdateWeatherData(tBDDocument, weatherData);
                }

                TBD.Calendar calendar = tBDDocument.Building.GetCalendar();

                List <TBD.dayType> dayTypes = Grashopper.Tas.Query.DayTypes(calendar);
                if (dayTypes.Find(x => x.name == "HDD") == null)
                {
                    TBD.dayType dayType = calendar.AddDayType();
                    dayType.name = "HDD";
                }

                if (dayTypes.Find(x => x.name == "CDD") == null)
                {
                    TBD.dayType dayType = calendar.AddDayType();
                    dayType.name = "CDD";
                }

                Analytical.Tas.Convert.ToTBD(analyticalModel, tBDDocument);
                Analytical.Tas.Modify.UpdateZones(tBDDocument.Building, analyticalModel, true);

                if (coolingDesignDays != null || heatingDesignDays != null)
                {
                    Analytical.Tas.Modify.AddDesignDays(tBDDocument, coolingDesignDays, heatingDesignDays, 30);
                }

                sAMTBDDocument.Save();
            }

            index = Params.IndexOfOutputParam("analyticalModel");
            if (index != -1)
            {
                dataAccess.SetData(index, analyticalModel);
            }

            if (index_successful != -1)
            {
                dataAccess.SetData(index_successful, true);
            }
        }