algorithmic modeling for Rhino

Adaptive comfort Chart and outdoor running mean temperature: doubts and clarifications

I have verified the air temperature data of the .epw file with the monitored data from the period 18 July and 31 July 2017:

As you can see the two trends are not the same for the first days of the considered period.

Even if the end of July for the mediterranean climate is not the best period to perform an adaptive comfort analysis (it's just a pretest to define a LB model) I want to refine the Adaptive comfort Chart (AC) by changing the external air temperature data imported from the .epw file with that of monitored data as reported here below:

Where the monitored ext air temperature are in this form (green panel below):

I have used the comfortPar component to set the following parameters:

  1. Adaptive chart as defined by EN 15251
  2. 90% of occupants comfortable
  3. the prevailing outdoor temperature from a weighted running mean of the last week
  4. fully conditioned space (even if it is not properly in line with AC as already discussed)

The question is this: the AC component could correctly apply the code below if there is only a list of external temperature data for a restricted period (without indication about the limits of this period) and not for an entire year?

#Calculate a running mean temperature.
alpha = 0.8
divisor = 1 + alpha + math.pow(alpha,2) + math.pow(alpha,3) + math.pow(alpha,4) + math.pow(alpha,5)
dividend = (sum(_prevailingOutdoorTemp[-24:-1] + [_prevailingOutdoorTemp[-1]])/24) + (alpha*(sum(_prevailingOutdoorTemp[-48:-24])/24)) + (math.pow(alpha,2)*(sum(_prevailingOutdoorTemp[-72:-48])/24)) + (math.pow(alpha,3)*(sum(_prevailingOutdoorTemp[-96:-72])/24)) + (math.pow(alpha,4)*(sum(_prevailingOutdoorTemp[-120:-96])/24)) + (math.pow(alpha,5)*(sum(_prevailingOutdoorTemp[-144:-120])/24))
startingTemp = dividend/divisor
if startingTemp < 10: coldTimes.append(0)
outdoorTemp = _prevailingOutdoorTemp[7:]
startingMean = sum(outdoorTemp[:24])/24
dailyRunMeans = [startingTemp]
dailyMeans = [startingMean]
prevailTemp.extend(duplicateData([startingTemp], 24))
startHour = 24

Views: 1064

Replies are closed for this discussion.

Replies to This Discussion


The adaptive comfort model calculates the running mean outdoor temperature as a weighted average of the previous week's temperature.  The notion is that people adapt themselves based on what they have recently experienced and that it typically takes about a week for people to fully adapt to a new outdoor thermal condition.  This is why you need to provide more that just an outdoor temperature for the range that you are interested in to get the adaptive chart to work correctly.  In your case, it might be worth it to just stitch in some data before and after your recording period to get this to work.  Just be wary that the first week of your recording period will be using the stitched data of the previous week to determine comfortable conditions.


I realized that I should also clarify that the "running mean" option that you have selected is using the previous week's temperature but the "monthly average" option will just use the monthly average outdoor temperature to compute the comfort temperature. Both options usually require outdoor temperature data that is outside of the time period that you are studying so this is why the components requires the full annual data stream of outdoor temperature.

Chris, sorry for the delay.

It was clear the definition of running mean temperature...  

I have two questions:

1)  if I want to define the adaptive comfort chart for just a day of the above considered period (from 18th to 31th July 2017), for example the 25th July 2017, I have all hourly data of the previous week so I can define the ruuning mean temperature. In this case it is not required the full annual data stream of outdoor temperature. It's correct?

2) if I use the "monthly average" option, in the case of a shorter period than one month, the average monthly value can be replaced by the average calculated on the basis of the available data. It's correct?


Sorry for the late reply. These are good questions and, to answer them:

1) When you plug in a list of 8760 values with a header that says "Dry Bulb Temperature," the component automatically does the math for you to figure out the prevailing outdoor temperature (whether this is averaging monthly temperature or calculating a running mean temperature).  However, when you plug in numbers that do not have a header on them, you have to do the math yourself and make sure that the values you plug in are representative of "prevailing" or average conditions and not the raw conditions themselves.  I am thinking that I should add a small component to help you calculate this when you have a raw data set but the code to do it is here:

I should also say that you can "hack" the methods of the component just by plugging in 8760 values with a header into prevailingOutdoorTemp and using dummy data to fill in all of the hours of the year that you do not have. You can then use the prevailingTemp output from the component and select out your analysis period to run a study on just your time of interest.

2)  Using the "monthly average" option is a lot easier. If your study period is just a month, calculate the average of your data set's outdoor conditions and plug this since value in for _prevailingOutdoorTemp.



thank you! 






  • Add Photos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service