/// <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) { dataAccess.SetData(0, false); bool run = false; if (!dataAccess.GetData(5, ref run)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } if (!run) { return; } string path_TBD = null; if (!dataAccess.GetData(0, ref path_TBD) || string.IsNullOrWhiteSpace(path_TBD)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } string path_TSD = null; if (!dataAccess.GetData(1, ref path_TSD) || string.IsNullOrWhiteSpace(path_TSD)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } int day_First = -1; if (!dataAccess.GetData(3, ref day_First)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } int day_Last = -1; if (!dataAccess.GetData(4, ref day_Last)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } List <SurfaceOutputSpec> surfaceOutputSpecs = null; List <GH_ObjectWrapper> objectWrappers = new List <GH_ObjectWrapper>(); if (dataAccess.GetDataList(2, 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); } } } if (surfaceOutputSpecs != null && surfaceOutputSpecs.Count > 0) { using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD)) { TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument; Core.Tas.Modify.UpdateSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs); Core.Tas.Modify.AssignSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs[0].Name); sAMTBDDocument.Save(); } } bool result = Analytical.Tas.Modify.Simulate(path_TBD, path_TSD, day_First, day_Last); dataAccess.SetData(0, result); }
/// <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_gbXML = null; index = Params.IndexOfInputParam("_pathgbXML"); if (index == -1 || !dataAccess.GetData(index, ref path_gbXML) || string.IsNullOrWhiteSpace(path_gbXML)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } string path_TBD = null; index = Params.IndexOfInputParam("_pathTasTBD"); if (index == -1 || !dataAccess.GetData(index, ref path_TBD) || 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; } } AnalyticalModel analyticalModel = null; index = Params.IndexOfInputParam("_analyticalModel"); if (index == -1 || !dataAccess.GetData(index, ref analyticalModel) || analyticalModel == null) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid data"); return; } 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; } } Analytical.Tas.Modify.RunWorkflow(analyticalModel, path_TBD, path_gbXML, weatherData, heatingDesignDays, coolingDesignDays, surfaceOutputSpecs, unmetHours); index = Params.IndexOfOutputParam("analyticalModel"); if (index != -1) { dataAccess.SetData(index, analyticalModel); } if (index_successful != -1) { dataAccess.SetData(index_successful, true); } }
/// <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); } }