Skip to content

Hourly tracking, advanced module geometry, custom scans

Choose a tag to compare

@cdeline cdeline released this 14 Nov 16:20
3d581f6

Version 0.2.3 has a lot of new features!

RadianceObj.makeModule has new input parameters:

RadianceObj.makeModule(name = '1axis_2up', x = 0.995, y = 1.995, torquetube = True, tubetype = 'round', 
    diameter = 0.1, tubeZgap = 0.1, panelgap = 0.05, numpanels = 2)

In the above example, numpanels = 2 makes the array 2-up.
torquetube = True adds a torque tube behind the panels.

this tube is 0.1m in diameter, round with a 0.1m gap between panels and the tube.
There is a 5cm gap from one panel to the next in the slope direction.

Here's a 1-up example with round tube, 0.05m gap between panels and tube:

1up_tube

makeScene now allows custom length and location scans:

RadianceObj.makeScene(module_name,sceneDict, nMods = 20, nRows = 7,sensorsy = 4, modwanted = 5, rowwanted = 2)

In the above example the normal 9-point scan is modified by only doing 4 measurement points with sensorsy = 4. modwanted = 5 scans along the 5th module in the row (from the south or west) out of 20. rowwanted = 2 scans along the second row in the array (out of 7).

1-axis tracking hourly workflow:

# NEW hourly gendaylit workflow.  trackerdict is now returned with hourly time points as keys 
#   instead of tracker angles.
trackerdict = RadianceObj.set1axis(cumulativesky = False)  
# this cumulativesky = False key is crucial to set up the hourly workflow.  

Note that the new trackerdict returned by set1axis has keys of timesteps, not angles

# create the skyfiles needed for 1-axis tracking - hourly timesteps now.
trackerdict = RadianceObj.gendaylit1axis()  
# optional parameters 'startdate', 'enddate' inputs = string 'MM/DD' or 'MM_DD' 

It doesn't take too long to create 8760 skyfiles, but if you don't need a full year, you can pass in startdate and /or enddate strings (mm/dd or mm_dd format) to only create the skyfiles you need.

sceneDict = {'pitch': module_height / gcr,'height':hub_height,'orientation':'portrait'}  
trackerdict = demo2.makeScene1axis(trackerdict, module_type,sceneDict, cumulativesky = False, nMods = 20, nRows = 7) 
#makeScene with cumulativesky = False begins to make hourly tracker Radfiles

This step isn't too different from the original workflow. makeScene1axis goes through the geometry in trackerdict and makes .RAD files for each hourly point.

# Loop over the 8760 timepoints in trackerdict.keys(). 
#   Note this takes a long time, and will probably require parallel computing. 
for time in sorted(trackerdict.keys()):  # the full year. if you want a partial year, loop over e.g. ['01_01_11','01_01_12']
    RadianceObj.makeOct1axis(trackerdict,time)
    RadianceObj.analysis1axis(trackerdict,time)

The existing functions makeOct1axis and analysis1axis now allow a specific key from trackerdict to be passed in. They'll only run on the specific key (hour or tracker angle, depending on whether cumulativesky = False or not)

This functionality allows you to run through multiple hourly simulations and create a new simulation for each. The RadianceObj keeps track of the overall RadianceObj.Wm2Front and RadianceObj.Wm2Back, so you should have a cumulative value when you're done.