Switching from Honeybee Plus - 3 phase to LBT to use Pollination

I was running a daylighting analysis using 3/5 phase matrix method using Honeybee Plus for daylight simulation. I am trying to do a sensitivity analysis study with WWR shade, shade openness factor, and shade overhang depth with multiple shade positions (roller shades) - (100 % open,75 % open, ……fully closed) and a few other geometry-based variables for different lighting and shading controls.

I used a BSDFs file for windows and shades for shade properties for different openness factors when working with the 3 phase method.

However, I recently switched to the new LBT plugin to use the pollination cloud to run a parametric simulation/sensitivity quicker.

I am a bit confused about what is the best recipe for the 3-phase method (in Honeybee Plus), considering I am using a BSDF as the input (the goal is just to get hourly illuminance values at all the sensors and not calculate any metrics such as DA, UDI … etc.). Is the Annual Daylight recipe recommended? I am using just one BSDF file per parametric run (and using the next one in the next run) and not like how one used in the Honeybee plus with Window group state. In the parametric run, I am trying to change the geometry (WWRs and shade overhand depth) and shade properties (shade openness factor). Also, if I use the Annual daylight recipe, can I use shade overhangs with it?

Thank you for your support and guidance!

Hi @vanageso,

What exactly are the BSDF files a representation of? Sounds like to me that it is a combined unit, e.g., window/glazing + roller shades?

You can use annual-daylight. Depending on the geometry you could model it as an aperture group. It is possible to add additional geometry such as shade overhangs to each state of the aperture group. Just to be clear, is the window size one of the parameters?

Yes, that should be possible.

Can you share a screenshot of the facade? I would like to see the surface that you want to apply the BSDF file to, as well as the geometry that you want to change for each parametric run.

I am not sure that 3-phase is the ideal recipe (or more suitable than annual-daylight). I am not saying you cannot use it, but it will be more clear if you can answer the questions above.

Yes, the BSDFs are for the combined unit: for the window and the roller shades.

Yes, the window-to-wall ratio is one of the variables.

A few images for the façade are attached below. I am further splitting the window into sections to simulate the opening and closing of the shades too.

Thanks, @vanageso. I would start with the annual-daylight recipe. You can use both recipes, so just let me know if you at any point wish to try the 3-phase recipe.

Going back to my comment above, I do not think that you should create aperture groups (unless you care about controlling each aperture individually).

I might need the aperture groups, and I am currently setting up the model very crudely with multiple simulations that can be combined into one. I am adding a few more images related to my geometry to explain better what I am doing. Is there a better way to set up this workflow? Thank you for your help!

And then between the parametric runs

Thanks for sharing the images, @vanageso. It is more clear to me now.

You can set up two aperture groups - one for the lower partition, and one for the upper partition. Then you want to add states to both aperture groups. So with your example in the image below you want to add all three types as states to both aperture groups. The order in which they are added to the aperture group is important since we need to know the order when post-processing the results.

For the post-processing, you have to add the results for the two aperture groups to get the illuminance for all the combinations. I.e., for “Parametric run 2, Shade 50% open” you need to add the following aperture groups / states:
ApertureGroup_Lower: state 0 + ApertureGroup_Upper: state 2

You can use the _array_from_states method to return the raw illuminance for a combination of states. This returns a NumPy array of the illuminance. I can help you with this if it is not clear.

Whether you use annual-daylight or three-phase, the methodology described above is the same.

1 Like

I updated my model with multiple states for the upper and lower window apertures. I have attached a simplified version of the model for your reference.

I might need some help to extract the raw illuminance values using the array states script, as I have not worked with those before. Are there any example files that you can share? I can use those to recreate my model

I saw a few posts on the forum regarding “ApertureGroupTest” method for states_ (is that how I should model it? Does that method work with multiple Aperture groups)

(Dynamic Shade Groups and Scheduling States - #24 by mikkel - honeybee - Ladybug Tools | Forum)
(Automatic window shade inclination to block the direct sunlight - #20 by LaFleur - honeybee - Ladybug Tools | Forum)

One other question => Have I added the shade overhangs in the right way, or those should be added with HB Dynamic state geometry (currently, I have just used HB Louver shades)

sensitivity_5.0_pollination_PO_sim_v3_forum.gh (620.4 KB)
no_shade.xml (1.6 MB)
shade_1_openness.xml (1.6 MB)
shade_3_openness.xml (1.6 MB)
shade_5_openness.xml (1.6 MB)
shade_10_openness.xml (1.6 MB)

Thank you for your help!

Hi @vanageso,

Let’s start with the modeling. You should avoid spaces for the name of the ApertureGroups. This is because it needs to be a valid Radiance name. What you got there works, but only because the spaces are removed under the hood, so, in reality, the name is changed to Northtopgroup. You can swap the spaces for underscores, i.e., North_top_group. We need to know the name later for post-processing.

When adding the states you should not use the StateGeo component in this case. This geometry is only if you want to add additional geometry to the state. That could for example be exterior shading. But since you added the actual Aperture geometry in the StateGeo component it will appear twice, once with the default glazing modifier, and once with your BSDF modifier.

You should use the State component, and add the BSDF as the modifier. This modifier will replace the modifier of the parent Aperture.

You did it the right way. But you can also add it in the StateGeo component. I mentioned above that you could add exterior shading to the StateGeo component, however, it only makes sense to do that if the shading is changing. I can see that you have two different depth sizes of your overhangs – so you could add the overhangs in StateGeo, but you would need to create double the amount of states because of the two depth sizes.


I do not have any examples other than those within the Results class of the results folder (but see below).

Those examples only work for one ApertureGroup.

I can share a WIP method that works for any number of ApertureGroups. This is all within Grasshopper so it will only make sense if you can use HB Annual Results to Data to process the raw illuminance. If not you have to take the results folder from your simulation and create a Results object to post-process and get the illuminance with the _array_from_states method.

Thank you for your comments. I made the changes to the model based on things you mentioned

I would like to keep everything in Grasshopper as I have several steps to be done after getting the raw illuminance (in Grasshopper) and before the final energy simulation.

I was using the HB Annual Results components to process raw illuminance (when I was doing it crudely). If you can share the WIP method (to extract results by states), that would be really helpful. Thanks!

Another question that I forgot to ask is that, If I simultaneously have two aperture groups per orientation (that is 8 in total for North, East, South, and West). The model will calculate the results for all the possible combinations of states for all the apertures (that might be too many combination)

In that case, will it be advisable to have a different simulation for each orientation and add the illuminance values in the end? (that might reduce the number of combinations)

Final ill = Ill of selected states for North +
Ill of selected states for East +
Ill of selected states for South +
Ill of selected states for West

Hi @vanageso,

I would keep everything as one simulation.

I have attached a file with the WIP method. You will need the latest version of honeybee-radiance-postprocess, so update your core libraries with LB Versioner if you have to.
sensitivity_5.0_pollination_PO_sim_v3_forum.gh (640.1 KB)

The schedule can be a list of integers, or just a single integer, in which case it will be a static schedule (the same state for all hours). In the file, there are 4 states, so the valid integers are 0, 1, 2, and 3. And of course, you would have to copy the groups below to add schedules for east, south, and west.

There is a modified version of HB Annual Results to Data. This will give you the illuminance for whatever combinates of states that you chose.

Let me know if it does not work.

1 Like

Updated the core libraries to version [1.6.54] using LB Versioner

The HB Annual Results to Data is trying to pull data for .ill files

Instead, the files available after the simulation are NPY files under subfolders (shown below)

Are there any additional steps I am missing?

Hi @vanageso,

When syncing the components I think it also changed this component. Can you try to redownload the file I shared above, and just copy the HB Annual Results to Data component from that file, or use the file attached to this message?
hb_annual_results_to_data_modified.gh (8.8 KB)

Current error

I pushed this change earlier, which means that you do not have the latest version of honeybee-radiance-postprocess. Can you please try to run LB Versioner again, but leave the version input empty.

Thank you. The component works now!!

However, when I use it with more than one aperture per group, it shows an error (error attached below)

One question about the aperture groups (I couldn’t find any post about it on both Ladybug or the Pollination forum)

— If a list of apertures is provided to the aperture group (should the output be one group or a list as it gives out now). Does it affect the WIP method as it is being used now?

Hi @vanageso,

I am not able to recreate the error. Can you share the Grasshopper file?

The output you get there is simply the apertures that you connected to the component – they are not converted into one object. However, all those apertures are now sharing the same dynamic group identifier (“East_top_group” in your example). To answer your question; the output should be a list of the apertures and it should work with the WIP method.

Not letting me upload a file anymore.

Hi @vanageso,

If it still fails to upload here you can attach it in a mail: mikkel@ladybug.tools