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

f-factor ground floor construction

asked 2015-02-17 11:59:14 -0500

Gilles CR gravatar image

updated 2017-05-08 15:58:46 -0500

I am trying to model f-factor from ASHRAE 90.1 into OpenStudio.

According to the construction tab it looks as though I will need to input every floor area and perimeter associated with every slab on grade in my model. Surely there is another way. Any idea?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2015-02-18 08:25:00 -0500

updated 2015-02-18 09:35:50 -0500

to expand on Dan's answer (code was roo long for comment) here is method I use to calculate perimeter for building. You could adjust this for multiple possible boundary conditions and also for an individual space or surface.

As is it has a single counter for all edges common to an exterior wall and a floor with ground boundary condition.

    # currently takes in model and checks for edges shared by a ground exposed floor and exterior exposed wall. Later could be updated for a specific story independent of floor boundary condition.
def OsLib_Geometry.calculate_perimeter(model)    
  perimeter = 0
  model.getSpaces.each do |space|
    # counter to use later
    edge_hash = {}
    edge_counter = 0
    space.surfaces.each do |surface|
      # get vertices
      vertex_hash = {}
      vertex_counter = 0
      surface.vertices.each do |vertex|
        vertex_counter += 1
        vertex_hash[vertex_counter] = [vertex.x,vertex.y,vertex.z]
      # make edges
      counter = 0
      vertex_hash.each do |k,v|
        edge_counter += 1
        counter += 1
        if vertex_hash.size != counter
          edge_hash[edge_counter] = [v,vertex_hash[counter+1],surface,surface.outsideBoundaryCondition,surface.surfaceType]
        else # different code for wrap around vertex
          edge_hash[edge_counter] = [v,vertex_hash[1],surface,surface.outsideBoundaryCondition,surface.surfaceType]

    # check edges for matches (need opposite vertices and proper boundary conditions)
    edge_hash.each do |k1,v1|
      next if v1[3] != "Ground" # skip if not ground exposed floor
      next if v1[4] != "Floor"
      edge_hash.each do |k2,v2|
        next if v2[3] != "Outdoors" # skip if not exterior exposed wall (todo - update to handle basement)
        next if v2[4] != "Wall"
        # see if edges have same geometry
        next if not v1[0] == v2[1] # next if not same geometry reversed
        next if not v1[1] == v2[0]
        point_one =[0][0],v1[0][1],v1[0][2])
        point_two =[1][0],v1[1][1],v1[1][2])
        length = - point_two).length
        perimeter += length

  return perimeter
edit flag offensive delete link more


I should point out that this doesn't look at zone multipliers. Ideally I should add that for whole building perimeter use case, but if looking value for f-factor you may not want the multiplier.

David Goldwasser gravatar imageDavid Goldwasser ( 2015-02-18 08:36:19 -0500 )edit

We have considered adding perimeter length calculations to the OpenStudio Model API. If this is something you'd like please weigh in on the following feature request:

macumber gravatar imagemacumber ( 2015-02-18 09:58:00 -0500 )edit

answered 2015-02-17 20:35:07 -0500

updated 2015-04-06 14:51:08 -0500

This would be a good task to automate using an OpenStudio Measure. The measure could create a unique F-Factor construction for each floor, set the floor area of that construction, and assign that construction to the floor surface.

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: 2015-02-17 11:59:14 -0500

Seen: 665 times

Last updated: Apr 06 '15