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

How do I describe a roof surface with a hole (a 'ringed' surface)?

asked 2016-08-24 04:23:06 -0500

yair's avatar

updated 2016-08-24 14:37:26 -0500

Is there a way to describe in the IDF file a surface with a hole?

My model has a hole in a roof, as in the images below. This hole is actually another building component - the ceiling of the space beneath or floor of a space above).

model

The model

surface

The surface

I am trying to figure out if there's a way to describe this hole purely by describing the coordinates of the roof and the hole in the BuildingSurface:Detailed object.

edit retag flag offensive close merge delete

4 Answers

Sort by ยป oldest newest most voted
4

answered 2016-09-14 18:45:15 -0500

You can fix this situation using geomeppy (PyPI, GitHub). The function geomeppy.polygons.break_polygons splits the larger surface into two surfaces that surround the hole.

To use it you need to convert the surfaces to geomeppy.Polygon3D objects.

from geomeppy import IDF
from geomeppy.polygons import Polygon3D
from geomeppy.polygons import break_polygons

# set your IDF up as normal, but using the IDF object imported from geomeppy

# get your surfaces
# larger_surface is the one which has a hole
# smaller_surface is the one which is a hole

surface = Polygon3D(larger_surface.coords)
hole = Polygon3D(smaller_surface.coords)

new_surfaces = break_polygons(surface, hole)  # produces two sets of coords for the split surface

# get the global geometry rules for your IDF
try:
    ggr = idf.idfobjects['GLOBALGEOMETRYRULES'][0]
except IndexError:
    ggr = None

# add the new surfaces to your IDF
for i, new_coords in enumerate(new_surfaces, 1):
    new = idf.copyidfobject(larger_surface)
    new.Name = "%s_%i" % (larger_surface.Name, i)
    set_coords(new, new_coords, ggr)

# remove the old surface
idf.removeidfobject(larger_surface)

Alternatively, if you read your IDF into geomeppy then it will take care of all the surface intersections for you. Just call idf.intersect() on your geomeppy.IDF object.

Here's the result of calling idf.intersect() on a test building similar to the one in your example.

image description

edit flag offensive delete link more
3

answered 2016-09-16 07:29:10 -0500

Ivan Korolija's avatar

Hi Jamie and Yair,

Another approach can be to subtract the hole from the base surface by adding the coordinates of the hole in the opposite direction from the Vertex Entry Direction specified in the GlobalGeometryRules object. For example if the Vertex Entry Direction is Counterclockwise than the hole coordinates direction has to be Clockwise. However, the outer ring has to be connected to the inner ring somewhere (red line in the chart bellow). The surface with hole presented in the chart, in order to be recognized by E+, should have the following coordinates:

(0,0,Z),(4,0,Z),(4,3,Z),(0,3,Z),(0,0,Z),(1,1,Z),(1,2,Z),(3,2,Z),(3,1,Z),(1,1,Z)

image description

This can get a bit more complex if there is more than one hole. In that case there have to be more than one connection between the inner ring and the outer ring. I found the most suitable place to connect inner ring with outer ring to be the shortest distance between coordinates of these two rings as shown in the second figure.

image description

edit flag offensive delete link more

Comments

1

Thanks Ivan, I remember you describe this approach when we met. One issue with it is that the results is a non-convex polygons. This, in turn, will cause sever errors when EnergyPlus calculates shadows (while I`ve found that these errors seem to have a minimal impact on results, if any at all, they are still Sever Errors).

yair's avatar yair  ( 2016-09-16 08:00:41 -0500 )edit
1

I am not sure that a non-convex surface causes severe error. It raises a warning, however, L-shape is also non-convex polygon which results in warning when determining shadowing combinations (in case when there is a shading from other zone or detached shading element).

Ivan Korolija's avatar Ivan Korolija  ( 2016-09-16 08:15:39 -0500 )edit
2

answered 2016-08-24 13:59:23 -0500

updated 2016-08-24 14:39:56 -0500

No, you can't put a hole in a BuildingSurfaces:Detailed object (other than as a sub-surface). You can however put two or more BuildingSurfaces:Detailed objects together that result in a hole.

Look at the stacked spaces on the left of the screenshots in this post. It shows how to model a "hole" in the roof by having 4 non-convex surfaces.

edit flag offensive delete link more

Comments

@yair I know you're interested in doing this automatically (as am I) so the important part of the linked post is the link to the ruby code in the BCL, which leads you on to the C++ code in OpenStudio here.

Jamie Bull's avatar Jamie Bull  ( 2016-08-24 17:28:09 -0500 )edit

Thanks @David Goldwasser, I tried the first approach (hole as a sub-surface): describing it as a "FenestrationSurface:Detailed",(door) but got some issues: There seems to be an issue with the contradiction between the fenestration`s "Outside_Boundary_Condition_Object" (which I tried either "blank" or the name of the matching surface the floor above) and its source Building_Surface_Name (i.e., the roof, which is exposed to the sun and wind):* Severe * GetSurfaceData: Subsurface="W0" exterior condition [interzone surface] in a base surface="14" with exterior condition [ExternalEnvironment]

yair's avatar yair  ( 2016-09-14 12:46:12 -0500 )edit

"FenestrationSurface:Detailed" inherits its outside boundary condition from the base surface that hosts it. You can't have a base surface with "Outdoors" and have a sub-surface with something different. The "Outside Boundary Condition Object" for the sub-surface is only used if it is on a base surface has outside boundary condition of "Surface".

David Goldwasser's avatar David Goldwasser  ( 2016-09-14 13:04:36 -0500 )edit

So, if this is the case, I understand that I can not use a sub-surface to describe the ceiling of the case above? Is there any other approach, other than braking the roof into 4 non-convex surfaces as you described in your post above?

yair's avatar yair  ( 2016-09-14 13:14:36 -0500 )edit

Not that I can think of, other some variations on how specifically you break up the surface.

David Goldwasser's avatar David Goldwasser  ( 2016-09-14 13:23:40 -0500 )edit

Your Answer

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

Add Answer

Training Workshops

Careers

Question Tools

2 followers

Stats

Asked: 2016-08-24 04:23:06 -0500

Seen: 762 times

Last updated: Sep 16 '16