Grasshopper and Ladybug, taught against a script that checks your canvas. The measure is UTCI, and the question it answers is what this weather does to a person standing outdoors in it.
Position carries meaning. The top row holds the principles, the centre cell is the live probe you run, and the foot of the grid is praxis: the two cities, the honest counter-case, and where to take it next.
▲ general / principle · the vertical axis is an abstraction gradient · special / praxis ▼
Air temperature is not what a body feels. The gap between the two is made by wind, sun and humidity, and in a maritime climate the gap is larger than the difference between cities.
The Universal Thermal Climate Index folds air temperature, mean radiant temperature, wind and humidity into one felt temperature, with published stress categories.
A TMYx year is twelve real months chosen from a stated span of real years and stitched into one. It describes the recent past.
Two pip packages, ladybug-core and ladybug-comfort,
are the same libraries the Grasshopper components call. Cork and Rome are
already in the folder.
Compute Cork's UTCI in the script, note the two numbers, then assemble the Grasshopper definition and make it agree.
Read the file, sun path and radiation, UTCI, then Honeybee daylight where your own geometry enters. Component by component.
UTCI describes a person standing in the open. It says nothing about a sheltered courtyard, and nothing at all about any building.
Both files run through the same measure. The cohort travels to Rome from 5 to 16 October 2026, and this is the climate they arrive in.
Into infrared.city for a street that exists, into the Revit and Dynamo work in the academy, and into your own dossier.
The claim the whole module tests.
Frames: Bröde et al. (2012), the UTCI operational procedure.
A site brief will give you an average temperature. It is almost always the air temperature, measured in a shaded ventilated box at two metres, and it is not what anybody standing on the site experiences. Wind strips heat off a body. Sun adds it back. Humidity decides whether sweating works.
Run the two files in this folder and the size of that difference stops being an abstraction. Cork's air averages 10.47 C across the year. What a body feels averages 2.82 C. The gap is 7.65 degrees, which is larger than the 6.8-degree difference between Cork's air and Rome's.
So the first move on any site is to find the gap, and the second is to find out what makes it. In Cork it is wind, and a design that shelters without trapping is worth more than a design that insulates.
What the number means and where the categories come from.
Source: Bröde et al. (2012), Int. J. Biometeorology 56(3), 481-494.
UTCI answers one question: given this air temperature, this mean radiant temperature, this wind speed and this humidity, what air temperature in a reference condition would feel the same. So the output is in degrees Celsius, and it is a felt temperature rather than a measured one.
The index carries published stress categories, and these are its own terms. Do not rename them to fit a legend.
| Range | Category |
|---|---|
| above 46 C | extreme heat stress |
| 38 to 46 C | very strong heat stress |
| 32 to 38 C | strong heat stress |
| 26 to 32 C | moderate heat stress |
| 9 to 26 C | no thermal stress |
| 0 to 9 C | slight cold stress |
| -13 to 0 C | moderate cold stress |
| -27 to -13 C | strong cold stress |
| -40 to -27 C | very strong cold stress |
| below -40 C | extreme cold stress |
And what it can never tell you.
An EPW holds 8760 rows, one an hour for a year, with temperature, humidity, wind, radiation and sky conditions on each. The year is not a real year. A TMYx is assembled by picking, for each month, the most typical instance of that month from a stated span of real years, then stitching the twelve together.
The files here are TMYx 2011-2025, so they describe the fifteen years to 2025. That has two consequences you carry into every figure you report. The file is a record of the recent past. And the year span is part of the citation, because a Cork file assembled from 2004-2018 gives different answers.
Every analysis in this module is structural and none is predictive. It shows what a change of frame reveals. It never says a number will move by an amount, because a typical year assembled from the past cannot support that claim.
Ten minutes. No Rhino licence at this stage.
Ladybug Tools has a Python core, and the Grasshopper components are a canvas over it. Installing that core gives you the same engine without Rhino, which matters twice: a learner without a licence can still do the analysis, and everybody gets a reference to check the canvas against.
python -m venv venv source venv/bin/activate # macOS or Linux venv\Scripts\activate # Windows pip install -r requirements.txt
Cork and Rome are already in weather/, so there is
nothing to download to start.
The hands-on core of the module.
First the script, so you have a number before you have an opinion.
python utci_from_epw.py weather/IRL_ST_Cork.AP.039550_TMYx.2011-2025.epw
You are looking for a UTCI annual mean of 2.82 C and 30 hours at no thermal stress. Those two numbers are your target for the rest of the session.
Then open Grasshopper and build definition 3 from
the definitions sheet: import the EPW,
derive outdoor mean radiant temperature, wire air temperature,
humidity, wind and that MRT into LB UTCI Comfort.
If the canvas gives you something near 10 C, you have left the wind input unconnected. The component runs happily without it and assumes still air. In Cork that single omission moves the annual mean by about seven degrees, because wind is doing almost all the work. This is the most useful mistake in the module, and it is worth making once on purpose.
Two settings decide the answer and both belong in your dossier. Wind is recorded at 10 m in an EPW and the index is defined at 1.1 m, so the component reduces it. And mean radiant temperature is not in the file at all: it is derived, assuming a person standing in the open with nothing shading them. Change either and you have answered a different question, so say which one you answered.
1. Read the weather file. The one everything else starts
from. File path into LB Import EPW, dry bulb into a
monthly chart.
2. Sun path and radiation. Location into
LB SunPath, direct and diffuse radiation into
LB Cumulative Sky Matrix and a sky dome. Cork's path is
visibly flatter than Rome's, and the difference is ten degrees of
latitude.
3. UTCI. The one the module turns on, described above.
4. Honeybee daylight. Where your own geometry enters: a room as a closed brep, apertures by ratio, then annual daylight through Radiance. Start with one room and a coarse grid, because Radiance is slow. A fine grid over a whole model will run for a long time.
No .gh files ship with this module. A Grasshopper definition is a binary file written by Rhino, and nothing in this repository can author one. A file that claims to be a working definition and turns out to be empty is worse than no file, so the sheet gives the component sequence and you assemble it once. Assembling it is the better exercise: a definition handed over as a black box teaches you to press a button.
The honest limit, and the one to state before anybody asks.
UTCI as computed here describes a person standing outdoors in the open, in the wind recorded at an airport weather station, with the sky above them unobstructed. Almost no interesting place in a city is like that.
A courtyard is sheltered, so its wind is a fraction of the recorded figure and its UTCI is much higher. A north-facing lane never gets the sun the file reports. A street canyon radiates stored heat back at night. None of that is in these numbers, and reporting a station UTCI as though it described your site is the error this section exists to stop.
What the station figure is good for is the climate the site sits in, the size of the gap between air and experience, and what makes that gap. Those hold across a city. The moment you want a figure for one place, you need the microclimate, and that is what infrared.city does next door.
Both from the files in weather/, computed 30 August 2026.
| Measure | Cork Airport | Rome Fiumicino |
|---|---|---|
| Latitude | 51.85 | 41.80 |
| Air temperature, annual mean | 10.47 C | 17.24 C |
| UTCI, annual mean | 2.82 C | 15.51 C |
| The gap | 7.65 C | 1.73 C |
| UTCI minimum | -27.84 C | -26.33 C |
| UTCI maximum | 31.40 C | 43.25 C |
| Hours at no thermal stress | 30 | 877 |
| Share of the 8760 hours | 0.3% | 10.0% |
Read the minimum row twice. Cork and Rome bottom out within a degree and a half of each other, which is not what anybody expects. The two climates differ in how much of the year sits in the comfortable band, and hardly at all in how cold it can get on the worst hour.
The maximum row is where they part: Rome reaches 43.25 C on the index, which is very strong heat stress, and Cork never leaves moderate. A design move that is obviously right in one column can be obviously wrong in the other, and the fortnight in Rome is when that stops being a table and becomes something the cohort stands in.
The instruments this one hands off to.
infrared.city takes the next step: a street that already exists, read as UTCI, wind and solar grids, with the question of whether added canopy actually cools it. This module gives the climate, that one gives the microclimate.
The academy holds the Revit and Dynamo side: Revit fundamentals, two family guides, the Dynamo workflow, and the Jitterbug parametric family automation that runs the synergetics geometry into a Revit family. Where this module reads a climate, that one builds the thing that sits in it.
Emergy Explorer on ENGAGE, for Odum's energy accounting, and AECO2 BIM Canvas for actors, stocks and flows.
Into your own dossier. Every project in the module carries a climate reading. Name the weather file with its year span, say whether wind and mean radiant temperature were included, and report the gap as well as the mean. A UTCI figure without those is not checkable by anybody, including you in six weeks.
Bröde, P., Fiala, D., Błażejczyk, K., Holmér, I., Jendritzky, G.,
Kampmann, B., Tinz, B., and Havenith, G. (2012). Deriving the operational
procedure for the Universal Thermal Climate Index (UTCI).
International Journal of Biometeorology, 56(3), 481-494.
https://doi.org/10.1007/s00484-011-0454-1
Verified at Crossref on 30 August 2026, all eight authors in that order.
Crossref returns 2011 for issued because that is the
online-first date; the issue is May 2012 and 2012 is the year to cite.
Weather data from climate.onebuilding.org, TMYx 2011-2025, retrieved 30 August 2026.
Ladybug Tools, ladybug.tools. Open source under AGPL. Rhino and Grasshopper are commercial and a student licence covers the module.
It does not predict. Every figure on this page is computed from a typical year assembled out of the recent past, and nothing here can support a claim that a number will move by an amount. Where a question cannot be answered from the record, the module says so and names what answering it would take.
AT6012 Design Research: Technology Transformations, Cork Centre for Architectural Education, University College Cork. Back to the module · The MOOC school · Frame School on ENGAGE. Written 30 August 2026.