8

f-factor ground floor construction

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?

Gilles CR's avatar
241
Gilles CR
asked 2015-02-17 11:59:14 -0500
__AmirRoth__'s avatar
4.4k
__AmirRoth__
updated 2017-05-08 15:58:46 -0500
edit flag offensive 0 remove flag close merge delete

Comments

add a comment see more comments

2 Answers

7

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.

macumber's avatar
12k
macumber
answered 2015-02-17 20:35:07 -0500, updated 2015-04-06 14:51:08 -0500
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
4

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]
      end
      # 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]
        end
      end
    end

    # 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 = OpenStudio::Point3d.new(v1[0][0],v1[0][1],v1[0][2])
        point_two = OpenStudio::Point3d.new(v1[1][0],v1[1][1],v1[1][2])
        length = OpenStudio::Vector3d.new(point_one - point_two).length
        perimeter += length
      end
    end
  end

  return perimeter
end
David Goldwasser's avatar
20.4k
David Goldwasser
answered 2015-02-18 08:25:00 -0500, updated 2015-02-18 09:35:50 -0500
edit flag offensive 0 remove flag delete link

Comments

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's avatar David 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:

https://github.com/NREL/OpenStudio/is...

macumber's avatar macumber (2015-02-18 09:58:00 -0500) edit
add a comment see more comments