public static global::OpenStudio.Model CreateModel(List <List <BHE.Panel> > panelsAsSpaces, global::OpenStudio.Model modelReference) { List <BHC.Construction> uniqueConstructions = panelsAsSpaces.UniqueConstructions(); //Create a curtain wall construction BHC.Construction curtainWallConstruction = new BHC.Construction(); curtainWallConstruction.Name = "Curtain Wall Construction Replacement"; BHC.Layer curtainWallLayer = new BHC.Layer(); curtainWallLayer.Thickness = 0.1; BHM.Material curtainWallMaterial = new BHM.Material(); curtainWallMaterial.Name = "Curtain Wall Construction Replacement"; BHEM.SolidMaterial curtainWallMaterialProperties = new BHEM.SolidMaterial(); curtainWallMaterialProperties.Roughness = BHEM.Roughness.VerySmooth; curtainWallMaterialProperties.SpecificHeat = 101; curtainWallMaterialProperties.Conductivity = 0.1; curtainWallMaterialProperties.EmissivityExternal = 0.1; curtainWallMaterialProperties.SolarReflectanceExternal = 0.1; curtainWallMaterialProperties.LightReflectanceExternal = 0.1; curtainWallMaterialProperties.Density = 0.1; curtainWallMaterial.Properties.Add(curtainWallMaterialProperties); curtainWallLayer.Material = curtainWallMaterial; curtainWallConstruction.Layers.Add(curtainWallLayer); Dictionary <string, Construction> osmConstructions = new Dictionary <string, Construction>(); foreach (BHC.Construction c in uniqueConstructions) { osmConstructions.Add(c.UniqueConstructionName(), c.ToOSM(modelReference)); } osmConstructions.Add("CurtainWallReplacementConstruction", curtainWallConstruction.ToOSM(modelReference)); foreach (List <BHE.Panel> space in panelsAsSpaces) { ThermalZone osmZone = new ThermalZone(modelReference); Space osmSpace = new Space(modelReference); osmSpace.setThermalZone(osmZone); foreach (BHE.Panel be in space) { string conName = be.Construction.UniqueConstructionName(); //be.ToOSM(modelReference, osmSpace, (conName == "" ? null : osmConstructions[conName])); Surface host = be.ToOSM(modelReference, osmSpace, osmConstructions, be.OutsideBoundaryCondition(be.AdjacentSpaces(panelsAsSpaces))); foreach (BHE.Opening o in be.Openings) { conName = o.OpeningConstruction.UniqueConstructionName(); o.ToOSM(host, (conName == "" ? null : osmConstructions[conName]), modelReference); } } } return(modelReference); }
public static global::OpenStudio.OpaqueMaterial ToOSMOpaqueMaterial(this BHM.Material material, BHEM.Roughness roughness, double thickness, global::OpenStudio.Model modelReference) { BHEM.SolidMaterial matProp = material.Properties.Where(x => x.GetType() == typeof(BHEM.SolidMaterial)).FirstOrDefault() as BHEM.SolidMaterial; StandardOpaqueMaterial osmMaterial = new StandardOpaqueMaterial(modelReference); osmMaterial.setName(material.Name); osmMaterial.setRoughness(roughness.ToOSM()); osmMaterial.setThickness(thickness); if (matProp != null) { osmMaterial.setConductivity(matProp.Conductivity); osmMaterial.setDensity(matProp.Density); osmMaterial.setSpecificHeat(matProp.SpecificHeat); osmMaterial.setThermalAbsorptance(1 - matProp.EmissivityExternal); //ToDo Review for external and internal as appropriate at some point osmMaterial.setSolarAbsorptance(1 - matProp.SolarReflectanceExternal); //ToDo Review for external and internal as appropriate at some point osmMaterial.setVisibleAbsorptance(1 - matProp.LightReflectanceExternal); //ToDo Review for external and internal as appropriate at some point } return(osmMaterial); }
public static global::OpenStudio.StandardGlazing ToOSMGlazing(this BHM.Material material, double thickness, global::OpenStudio.Model modelReference) { BHEM.SolidMaterial matProp = material.Properties.Where(x => x.GetType() == typeof(BHEM.SolidMaterial)).FirstOrDefault() as BHEM.SolidMaterial; StandardGlazing glazing = new StandardGlazing(modelReference); //ToDo: Front and back side checks and inclusion when required - issue raised glazing.setName(material.Name); glazing.setOpticalDataType("SpectralAverage"); glazing.setThickness(thickness); glazing.setSolarTransmittance(matProp.SolarTransmittance); glazing.setFrontSideSolarReflectanceatNormalIncidence(0); glazing.setBackSideSolarReflectanceatNormalIncidence(0); glazing.setVisibleTransmittance(matProp.LightTransmittance); glazing.setFrontSideVisibleReflectanceatNormalIncidence(0); glazing.setBackSideVisibleReflectanceatNormalIncidence(0); //ToDo: Figure out infrared transmittance if required glazing.setFrontSideInfraredHemisphericalEmissivity(0); glazing.setBackSideInfraredHemisphericalEmissivity(0); glazing.setConductivity(matProp.Conductivity); glazing.setSolarDiffusing(false); return(glazing); }