Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

How to list and measure area surfaces

asked 2016-03-08 12:26:10 -0500

nachogo27's avatar

I have a large model (at least for my experience) with a conditioned area of more than 180 000 m2.

I only have a thermal zone for each floor to reduce simulation time now. I want to evaluate the savings due to the new constructions I have tested in the model so I need to know the outdoor surface area to calculate the costs. Do someone know how to list the outdoor surfaces (all these surfaces has Outside boundary condition as Outdoor) and measure the area?

I found the total floor area but I couldn't find a number for the outdoor surface area. One step forward would be to list the surfaces depending on the orientation too. I would appreciate if someone could help me.

P.S.:I'm using the Legacy Open Studio plug-in to generate the base IDF.

edit retag flag offensive close merge delete

4 Answers

Sort by ยป oldest newest most voted

answered 2016-03-09 14:48:44 -0500

updated 2016-03-09 14:50:28 -0500

Here's an answer using eppy which might not be what you're looking for but might help someone in the same situation in the future.

from eppy.modeleditor import IDF 

in_file = "eppy/resources/idffiles/V8_1_0/Boiler.idf"  # the path to your IDF
idd = "eppy/resources/iddfiles/Energy+V8_1_0.idd"  # or whatever IDD version you're using

with open(in_file, 'r') as infile:
    idf = IDF(infile)

# get the surfaces in the model, filtered by having Outdoors as the boundary condition 
surfaces = [s for s in idf.idfobjects['BuildingSurface:Detailed'.upper()] 
            if s.Outside_Boundary_Condition == 'Outdoors']    
total_external_area = sum(s.area for s in surfaces)

# get the glazing surfaces to remove from the total external areas
glazing = idf.idfobjects['FenestrationSurface:Detailed'.upper()]
total_glazing_area = sum(g.area for g in glazing)

# calculate the external areas by orientation
area_by_orientation = defaultdict(float)
for s in surfaces:
    surface_area = s.area - sum(g.area for g in glazing 
                                if g.Building_Surface_Name == s.Name)
    area_by_orientation[s.azimuth] += surface_area

# print the results
print "Areas by orientation"
for area in area_by_orientation:
    print "%s: %.2f m2" % (area, area_by_orientation[area])

print "Total area: %.2f" % total_external_area
print "Total glazed area: %.2f" % total_glazing_area

Areas by orientation

0.0: 125.77 m2

90.0: 28.80 m2

180.0: 33.60 m2

270.0: 30.72 m2

Total area: 226.58

Total glazed area: 7.68

edit flag offensive delete link more



May need to extend logic if model uses sub-surface or zone multipliers.

David Goldwasser's avatar David Goldwasser  ( 2016-03-10 08:48:56 -0500 )edit

Good point. I'll revise when I get a chance.

Jamie Bull's avatar Jamie Bull  ( 2016-03-11 11:36:25 -0500 )edit

That should work very well. But I can't find the "area" field... what am I missing?

Gio's avatar Gio  ( 2018-12-12 01:55:46 -0500 )edit

@Gio it's a calculated field, made available via a helper function which is added to surfaces when reading in the IDF.

Jamie Bull's avatar Jamie Bull  ( 2018-12-14 16:43:50 -0500 )edit

@Jamie Bull oh yes! That's great, thank you. This tool could be useful to calculate Ashrae unconditioned zones.

Gio's avatar Gio  ( 2018-12-15 05:16:43 -0500 )edit

answered 2016-03-08 16:22:56 -0500

updated 2016-03-08 16:23:26 -0500

The Opaque Exterior and Exterior Fenestration tables in the Envelope Summary Section of the tabular EnergyPlus output may give you what you need. You could past into spreadsheet to get totals for each construction. The opaque table does provide gross area, so you would need to do some work to get net (after deducting for fenestration).

edit flag offensive delete link more

answered 2016-03-09 21:09:58 -0500

santoshphilip's avatar

updated 2016-03-09 21:11:03 -0500

Jamie's answer here is excellent and will give you the correct results. Of course, if you have never used python or never used eppy, you would be wondering how to start. Follow the steps below and the answer will be revealed. (I am assuming you are on a windows machine.)

go to and install python 2.7

Open a dos window. You can do this by: clicking on the windows start button and running cmd

in the dos window type: pip install eppy and hit return this will install eppy (hopefully this works)

  • Save the program Jamie has written here in a file (call the file Let us say you saved this file in c:/somewhere/
  • Change line 2 and 3 in this file by putting your file name and idd file name. Give the full path name to the file such as "c:/my_models/amazingmodel.idf". note the the slashes are frontslashes "/" not backslashes "\"
  • the idd file is usually found in the folder c:/Energyplus8.0/E+.idd (I think)

go back to the dos window and type: python "c:/somewhere/" (hopefully this works too :-)

shazaam !! You should have your answers.

If you have any problems with these steps, open an issue at and we can use this opportunity to streamline the process, so it works for you and for others

edit flag offensive delete link more

answered 2016-03-17 14:11:45 -0500

nachogo27's avatar

Thanks @David Goldwasser @Jamie Bull @santoshphilip All the answers were useful: David's answer helped me to get what I want fast, Jamie's showed me a powerful tool and Santos' guided how to start with the tool.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer


Question Tools

1 follower


Asked: 2016-03-08 12:26:10 -0500

Seen: 937 times

Last updated: Mar 17 '16