Intended Users:
There are a few different intended users for SolarSet depending on the use case. Architects may use SolarSet to determine the solar feasibility of a project during the schematic design phase. Owners and developers may use SolarSet to see what payback or NPV they may achieve before they decide to commission an actual solar study. Lastly, SolarSet will be used the most by MEP engineers who are designing and sizing PV systems for energy models, LEED submittals, or final design documents.
The Need:
The feasibility of solar PV systems is often evaluated too late in the design process. It is often done after the roof geometry has already been locked in and there is little to no flexibility to change it depending on the needs of the systems. Existing tools tend to either require dedicated PV software or are completely disconnected from the building model. SolarSet helps to bridge that gap by being a Revit/Dynamo based tool that helps to give designers real panel layouts, performance data, and financial feedback all in the same BIM platform where the roof geometry is being decided.
Inputs:
- Roof boundary - selected face in the Revit model or Dynamo geometry with parametric inputs like length and width
- Roof Setback distance - how far from the edge of the roof the panels can be to comply with fire code
- Panel Width - in feet
- Panel Height - in feet
- Panel Tilt Angle - desired angle from horizontal
- Panel Wattage - rated output of Watts per panel
- Assumptions (Constant for the project):
- Project Latitude - used to compute the minimum row spacing
- Peak Sun Hours - location specific annual average of hours/day
- System Performance Ratio - system efficiency factor
- Utility Rate - Electricity cost in $/kWh
- Utility Escalation - percentage every year
- Installation cost per Watt - in $/Watt
- Project lifetime - how long the building or system should last for
- Discount rate
Underlying Model Logic:
To determine the optimal panel layout, the roof boundary is first offset by the setback distance in order to find the usable placement zone. Then, the minimum row spacing is calculated using the panel tilt and the project latitude by taking into account the winter solstice sun altitude angle which is the worst shading condition throughout the year. Then, using the offset roof boundary, a grid of points is formed for the center point of each PV panel. Then, a set of points is derived from the center points to represent the corner points of each PV panel. These points are checked to make sure they fall within the offset roof boundary and if they are, an adaptive PV panel component is placed in the Revit model. From there, the panel count is multiplied by the rated wattage to find the system capacity and then that number is multiplied by the peak sun hours and performance ratio to find the annual generation. Then, the annual savings are calculated using the utility rate and the escalation rate. Lastly, the system calculates the simple payback period and the NPV of the system.
Outputs:
- Panel Layout Geometry - Revit masses are placed on the roof surface
- Panel Count - the number of panels to be installed
- System Capacity - kW DC
- Annual Generation - kWh/year
- Simple Payback Period - in years
- Net Present Value - 25-year NPV at the specified discount rate
SolarSet is a Dynamo-based rooftop PV configurator that helps to bridge the gap between architectural design, mechanical engineering, and owner/developer needs and financial analysis. Rather than requiring separate tools to layout the PV panels, make an energy model, and complete a financial analysis, SolarSet combines these three things into one Revit tool. It takes in a roof element from an existing Revit model along with a set of project parameters and returns a fully laid-out solar PV array with system and financial performance metrics. It automatically computes the panel placement while adhering to setback boundaries and panel shading. This tool is intended for use during either the schematic design or design development phase and helps to give every member of the project team a common reference point for solar decisions that are made early in the design process when they really matter.
What you need:
- Revit Building Model with a Roof Surface
- SolarSet Dynamo script: 4units_AlyssaSchwengel_Module9.dyn
- PV Panel Adaptive Component loaded into your Revit project: Rect_Seamless Panel - 4 pt (1)
SolarSet can either be operated in the DynamoPlayer or by downloading the actual Dynamo graph however the process is very similar either way:
- Open you Revit project and ensure the PV Panel Adaptive Component is loaded in.
- Make sure that your roof surface only contains surface area where you are okay putting PV panels. Be cognizant of mechanical equipment or stairs.
- Open the Dynamo Player, or Dynamo File, and select the SolarSet Dynamo Script.
- Click the Select button next to Roof Boundary and select your roof element in your Revit model
- Fill in all of your project parameters. The parameters that are specific to you site and should not change are labeled as CONSTANT. Everything else can be modified until you find your ideal system.
- Click Run - you will see PV panels populate the roof in your Revit model along with performance results in the Dynamo Player or Dynamo graph.
- Adjust any inputs and re-run until you find your desired PV system.
Inputs - Pink:
The project inputs are grouped in pink groups. The first one is called “Project Inputs” and are the parameters that can be changed to determine the optimal PV system. The second group is called “Project Assumptions (One-Time Inputs)” and these are values that are project and location specific and should only be input once and not changed throughout the iterations.


Creating the Setback Roof Boundary - Green:
This group takes in the selected model element and first finds the top face and creates a polycurve out of it. Then, it offsets that polycurve by the setback distance (input).

Determining the Row Spacing - Green:
This group computes the row spacing between PV panel rows by using the project latitude to determine the winter solstice sun angle. From there, it uses the panel height and PV tilt to determine the row spacing.

Determine the Usable Roof Space - Green:
This group utilizes a bounding box to create the minimum coordinate (minX, minY) and the maximum coordinate (maxX, maxY) at which a PV panel can go.

Creating a Grid of PV Panel Center Points - Green:
This group creates a grid within the bounding box of PV panel center points based on the panel width and calculated row spacing. It then places a point at each of those coordinates.

Determining the Corner Points of Each PV Panel and Ensuring they are in the Setback Boundary - Green:
This group creates a list of corner points of each PV panel projected onto the roof surface. I projected it onto the roof surface so I would be able to make sure all of the points were within the boundary without the system getting messed up by the PV tilt. Once I had my lists, I used Polygon containment tests to make sure all of the points fell within the setback boundary. Then I created one Boolean value that took in all four corners of each panel and then filtered by Boolean mask to get my final list of points.

Placing PV Panel Adaptive Components in the Revit Model - Green:
From there, the group creates the actual corner points of the PV panels taking into account the PV tilt and disregarding the PV panels that were out of bounds. Then, I created a final list of points and placed the PV Adaptive Component at each point, using all four corners at the input.

Solar PV System Performance Calculations - Green:
Once I had the panels placed, I first completed solar PV system performance calculations

Solar PV System Financial Calculations - Green:
Then, I completed Solar PV Financial Calculations

Outputs - Orange:
This left me with my final project outputs.

The main that changed in my system designed is that by using the actual Revit roof component instead of Dynamo geometry, I was able to consider more irregular roof shapes. I had to take this into account when developing some of the other nodes, but I ended with a product that does not need a simple rectangle roof to work.

