public static double InfiltrationAirFlowPerExteriorArea(this BuildingModel buildingModel, Space space) { if (buildingModel == null || space == null) { return(double.NaN); } double volume = double.NaN; space.TryGetValue(SpaceParameter.Volume, out volume); if (double.IsNaN(volume)) { return(double.NaN); } InternalCondition internalCondintion = space.InternalCondition; if (internalCondintion == null) { return(double.NaN); } double airFlow = SAM.Analytical.Query.CalculatedInfiltrationAirFlow(space); if (double.IsNaN(airFlow)) { return(double.NaN); } if (airFlow == 0) { return(0); } List <IPartition> partitions = buildingModel.GetPartitions(space); if (partitions == null || partitions.Count == 0) { return(double.NaN); } partitions.RemoveAll(x => !buildingModel.ExposedToSun(x)); double area = 0; foreach (Panel panel in partitions) { double area_Temp = panel.GetArea(); if (!double.IsNaN(area_Temp)) { area += area_Temp; } } if (area == 0) { return(0); } return(airFlow / area); }