Description
Key Learnings
- Learn how to create new workflows by writing formulas that provide options for the data that calculations are going to be completed using
- Learn how to use Dynamo to automate huge amounts of work into seconds using data stored within families
- Learn how to manage data requirements across different types of families efficiently so you can be sure your families contain all of the data you require
- Discover a secret objective that may be announced on the day of the session
Speaker
- ADAndrew DuncanAndrew is an Associate Director based in London. He is dedicated to using digital technology to improve project efficiency and deliverable quality. Andrew joined Arup as an apprentice in 2005 and has spent much of the time since working on buildings designed by some of the world's leading architects. An AU veteran, Andrew is a passionate advocate of sharing knowledge with clients and peers in order to help advance the industry's collective capability. In regards to notable work, Andrew was the driving force behind Project_OVE, an internal experiment to create a building in the shape of a human being (inside and out), and he co-created the Arup BIM Maturity Measure, a tool designed to measure BIM use on a project. Andrew's latest project has been to create a single Revit standard to be used by Arup globally.
ANDREW DUNCAN: Here we go. This is really horrible, because I want to be able to stand out here, but I can't see what's coming in. So I might walk backwards and forwards a bit.
So this is a follow-up class on one I did two years ago called "Creating Smarter MEP Families." How many of you went to or have seen that class, out of interest? OK, only about a dozen here. That's fine. How many of you have been to, or seen online, one of my other classes from previous AUs? OK, so about a third of the room total. Cool.
So let's say this is a follow-up class on "Creating Smarter MEP Families." This time we're going to be looking at a little bit of Dynamo thrown in for good measure. I'm going to keep asking you questions. How many of you have used Dynamo in any capacity? Good. Now, keep your hands up. How many of you would consider yourselves proficient Dynamo users?
[CHUCKLING] Half of them went, no! OK.
So the objectives of the previous class were making families with complex geometry that you can adjust parametrically. Creating family templates we're going to touch on again today so that you can provide users with things that they can finish off rather than start from scratch. Using formulas and families to do calculations-- we're going to talk about that in detail today. And how you can use access families-- we're not going to touch that at all.
These are the learning objectives for today. The first one, when I reread it, was horrific. So actually this is the slimmed-down version. And what we're going to do is we're going to learn how to create automated workflows that provide some optionality as to how the calculations are actually completed. I'm amazed there was a queue outside, but thanks for joining.
We're also-- and I'm going to caveat this. We're going to learn how to use Dynamo to automate a huge amount of work into seconds in an hour and a half. This is one of the learning objectives, so actually it's more like about half an hour of the class. And of course, I can't actually teach you the ins and outs of how you're going to use Dynamo to do that. But what I am going to do is share with you in quite a significant amount of detail our strategy in regards to how we're using Dynamo to do exactly that and take you through one of the tools that we've created inch by inch, and that will become clear as we go along, as to the techniques we use within Dynamo scripts themselves to make the scripts that we're generating, provide us with those sorts of efficiency [INAUDIBLE].
Absolutely crucial to achieving any of those efficiency gains is how you manage the data within your Revit projects and more so within your families and shared parameters libraries and so on. We're going to cover that in detail. And then I was deliberately obscure about a secret objective that I was going to plan to announce today. I am going to talk to you about that at the end of the class. It's not quite the announcement I wanted to make, but hopefully that will still resonate.
I also do need to cover off who I work for, because they pay for me to be here, and a little bit about who I am, just to give you some context. I work for a company called Arup. How many have you have heard of Arup? OK, good. Arup was founded by this guy in the '50s, I think. He was known as a philosopher. Ove Arup was known as a philosopher engineer, very deep thinker and wanted to provide total integrated design-- so bringing all engineering disciplines together and offering a holistic, whole solution.
We have offices everywhere. We've got lots of offices in the US. I am actually based out of London. I joined Arup circa 12 years ago now. I joined as a youngling. I'm now not so young. I now lead what we call the digital design development team for the UK-MEA Buildings Practice. UK-MEA Buildings is about 5,000 people. I earn-- no, it's not. It's about 2,500. people. UK-MEA is about 5,000 people.
And the work that we produce is used by that entire number of staff across the entire region. And actually, a lot of it is starting to be used across the rest of Arup as a whole. I'm MEP by background, you'll have guessed from the title of the class. I'm mainly mechanical. Every time I talk about MEP, I tend to talk about mechanical. But today I've got some electrical stuff in there as well.
I've got a background academically in doing services engineering, and a couple of years ago I did a masters in BIM and integrated design, which I thought would just be going to get a little bit of paper, but actually I learned a huge amount about lean production methodologies, manufacturing techniques. And a lot of that has informed my thinking since completing that course. I'd encourage you to go and look at lean yourselves.
I'm also a three-time Revit Gunslinger. Autodesk has renamed that now. It's not quite so PC. It's inside the factory. You get the opportunity to go into the Autodesk Development Offices, beat up next year's version of Revit, and help Autodesk to improve it. I'm very fortunate to work quite closely with Autodesk now in regards to developing the next versions of Revit. And I'm also-- this is my seventh AU, and it's the fourth I think that I'm speaking at. After the five classes, I think this is the sixth.
I'm also somewhat of a general technology nerd. I like to do things like control my lights from my watch when I'm away at conferences to wind up the missus. And I was looking for opportunities to use Animojis in my presentation, but I've been quite restrained and managed to not do that too much.
As I say, I lead digital Design Development. And the remit of that team is effectively to look at anything that improves efficiency, improves the quality of what we do, or reduce the risk associated with the information that we eventually throw at our clients. That kind of adds up to everything, which is quite nice for me. It means I can be quite nosy and stick my nose in wherever I want. But effectively what we're trying to do is fulfill our deputy chairman's ambition. He's one of the guys that looks after digital for Arup, which is reducing the effort to do the usual, the necessary, in order to provide more time to be innovative and creative. And I think everybody would quite like that in regards to their general day jobs and how they go about the business.
The way that we're doing that at the moment is to look at the processes that we commonly undertake in projects, and then to think about the data that is required in order to complete that process. So if you can isolate the data that informs a standardized process, you can create a data structure and an automated workflow that, say, would consume that data structure, which ideally provides more value out the back. It's more efficient, it's better quality, it's reduced risk, and so on. And then actually what you can do is you can continually learn from and improve that process over time by revisiting your thought process, revisiting the data, and continually iterate it.
So that's kind of where we're going to start. We're going to look at how to create automated workflows and specifically-- as I said, somewhat as a follow-up to my previous session-- providing optionality around how we complete calculations within families is particularly important in that respect. So we'll cover a couple of the-- well, the reason why that's important and then the techniques as to how you can actually do that yourself on your own projects.
If you think about-- I mean, I'm the consulting engineer. So this is the sort of stuff that we typically produce on projects. We do lots of calculations, we produce drawings, we create models, we do analysis, we do all sorts of stuff to create reports, datasheets, specifications, lots of unconnected deliverables that eventually leave the door. And unfortunately for us, we have to use a huge amount of different bits of software in order to do that. Now, this is just the tip of the iceberg of the software that we use. Apparently someone did some sort of study. We've got 14,500 members of the staff. Someone did a study a little while back, and we worked out that we're using 14,000 pieces of software, which is bonkers.
But basically, where we are today-- and I think it's as true for Arup as it is for the rest of the industry. We're not alone in this. Most of these bits of software are silos. And especially Excel is particularly guilty of being silos, not only to whole businesses but to individual members of staff and engineers as they go about their daily work. You know, most people sit next to someone who's doing a similar sort of thing to what they are, but they tend to use different spreadsheets to do it, because they don't trust the guy they sit next to or the spreadsheet that they've put together. It's bonkers.
So in order to-- Andy what's-his-face, the new CEO, stole my thunder and used this slide basically exactly the same as I did yesterday. But in order to be more efficient and to think about things in an automated way, we have to think about how the data flows through a process such that the next process is geared to receive the data that we've produced already. And then what we wanted to do is try and daisy-chain those things together. In order to do that, we need to be much more structured around our thoughts processes in regards to the processes we undertake on projects and how we're going to feed data into those processes to generate a final outcome.
This is a very simple process. It's one that I've used in previous classes. This is around heating design and the steps involved. So we generate some heating loads at one point. We then size the equipment, or if we're doing it again, resize it, divide the heating loads over said equipment, calculate the water flow rates, and then eventually size pipes. And if you look at that as an overall compound process, these are the different bits of software that we, as Arup-- say, kind of UK skewed, because lots of people use different tools for heating loads-- these are the tools that we use in order to undertake those processes, typically or historically.
And the reality is that pretty much the interfaces between all of those steps are manual. If they're in spreadsheets, they're in different spreadsheets. They're being done by different people. They're being marked up, put on bits of paper, and given to other people to interpret into what is the final deliverable, which is bonkers.
So what we want to do, as I said before, is think about what is the process we're undertaking, and what data do we need in order to inform that process? What we also need to do is structure that data far more so with a much greater degree of rigor than we would have done previously if we're going to be able to pass it from one task to the next to the next to the next. And the way that we've been tackling that from a strategy perspective is using Revit as a database.
I don't like to describe Revit as a 3D-modeling program. I describe Revit as a database that happens to be able to express itself in 3D. Someone else described it to me as a database with lipstick on, but you take whichever definition that you want. An effectively, once we've got a structured database-- and unlike Excel, if you put a number into Excel, it's just a number. You put a water flow rate into Revit, it's a water flow rate. You try and convert it into a voltage, and Revit will just give you a horrible error message saying "inconsistent units," which I'm sure most of you have seen before.
Once we've got that consistent database, we can then start to think about the tools that we're going to use in order to pass information from one task to the next in that database and how we're going to churn through that data in order to achieve the next thing. And in this instance, we're using Dynamo, Revit functionality itself, because Revit can do things like size pipes, so why create a custom tool to do that? And very specifically, and the first thing we're going to look at, is using formulas in families to undertake formulas that would otherwise be done in spreadsheets.
So this is old slide of an old tool that takes heating loads for a space and divides the heating loads within that space over the heating equipment in the space able to provide heating. That just about made sense. This is something that Revit doesn't do out of the box, so basically, as we adjust the heating load, you can see it's dividing over the different pieces of heating equipment. And then what the heating equipment is doing is using formulas within the families to calculate the water flow rate, which goes into the pipe work, which then you can use to size the pipes automatically. All right, class done. You can all go.
No. So what we're going to do-- if I can skip on-- this is part of-- it was one of my old classes. I think this is the "Creating Smarter Families" one. Basically, this is the formulas that we put within the families to work out what the heating load is. So you've got-- or heating water flow rate. So you've got the heating load, and that goes into our formula. Don't do that. That's horrible. OK, you don't really need to see the background, but we've got a water density, we've got a specific heat capacity, a [INAUDIBLE] without delta T, and so on.
What that does is calculates our water flow rate. So you're using the information we're storing within families, combining that together into a formula, and using that to calculate what would otherwise be a manual process that doesn't live within the model. However, the reason why this is starting off this class is because when we actually went to turn this from effectively a proof of concept to demonstrate how Dynamo and Revit could be used to automate this stuff, we found that because this uses a formula within a parameter, that parameter is locked to only use that formula alone, which means that if someone wants to enter a manual water flow rate, they can't, which means they can't use the families, which means that absolutely every project Arup ever does in the UK would have to use the heating load to derive the water flow.
Now, although I think that's a good idea on the majority of projects, I can appreciate that there are instances within a model you just want to give something a water flow rate. So what we need to do is think again as to how we are going to facilitate that sort of functionality for our users so we could incorporate these automation techniques using formers and families but also provide them with the opportunity to do something different, as in when the requirements of the project dictated that was necessary.
So the way that we overcame that was with the Selection Method Technique. And that's the first thing I want to cover for you in this class. Selection Method Technique relies on if-statement formulas. I'm waiting to see as to whether or not this is something that you guys find revolutionary-- because I don't think if-statements are revolutionary-- or whether or not this is something that you find a little bit more mundane. But the reality of implementing this workflow for us was that by using if-statement formulas and combining many different calculation methodologies with a Selection Method, we were able to implement effectively the workaround that allows us to use this on all of our projects now.
So an if-statement, for those of you that might not be aware, is a logical test combined with a value if the logical test is found to be true or a value that it'll give you if the logical statement is found to be false-- ie, you ask the question. If it's correct, do this thing. If it's wrong, do this other thing. And what you can do with if-statements is you can nest them, as you can with any other kind of formulas, really. You can nest them into one another.
And if you do that-- and this, I colored it so it's slightly easier for you to understand. But actually, this is also-- I've just copied and pasted directly out of a Revit family I've put together. And I don't know whether you can paste it back in with the line breaks. I need to double-check that. But this was a particularly good way for me to work out how the if-statement all goes together.
Effectively, if you got three tests or three different questions you're asking, you have three brackets at the end. You're opening a bracket every time you ask a question. You need to close the brackets at the end of all your questions. That means for every question you ask, you have to have your brackets closed at the end. So three tests is three brackets, n tests is n brackets.
And rather than focus on the water flow example that I showed you before, I'm going to use another tool, which we're going to go through in detail in a moment-- the Automatic Mechanical Power Supplies tool. Those of you that are electrically inclined will realize how awesome that name is. And the reason we're going to do that is because the formulas we use in this are exactly the same and structured in exactly the same way as the water flow example, except the parameters are shorter, so they fit on a PowerPoint slide.
So we've got our Electrical Power Selection Method. And our Electrical Power Selection Method is an integer family, or an integer parameter. It is going to allow you to select one, two, three, four, et cetera. Not 1.1 or whatever. You can use a number parameter if you want. They just look horrible.
We're also going to have an Electrical Power parameter. And the Electrical Power parameter then references a number of other parameters using if-statements. So if our Selection Method parameter is set to 1, I want the electrical power to reference the Electrical Power Full Load parameter. If it's set to 2, I want it to reference the Electrical Power Running parameter. And because you have to have a value, if the logical statement is found to be false, if it equals anything other than 1 or 2, give me a really, really stupid power that couldn't ever possibly crop up on a project so that my engineer knows that something's gone wrong. One day in the future we're bound to have an engineer oversize the building by 400 times because they've not realized that the number is wrong, but we'll cross that bridge when we come to it.
In order to reference a parameter, you then also need to create the parameters that are referenced. In this instance, these are manually entered values. And what this is doing is it's providing our engineers within the AMPS tool-- and I'll show you a demo in a moment-- to use the value that they need in order to size the piece of equipment in the context of the building that they're actually placing that equipment into, or the design that they're placing it into. Not only do we do this for power within AMPS, we do exactly the same thing for Current. These are the Current parameters, the Current formulas, and what we have to put in to make this work.
And I'm also, at this point-- because I've been asked once or twice already, going to cover off a question that I'm sure I'm going to be asked otherwise-- there isn't a handout for this class. These slides are your handout. You're here to listen to me and hopefully for me to be able to share with you what we've been working on and how this works. I'm going to-- there's been a lot of work going into this presentation, and I'm showing you a lot of what we've been doing as a business. And unfortunately, any of you that have attended any of my classes in the past will know how excellent I am at producing handouts. I think of the five classes I've done, I've done one handout. And that was the only class I did with a co-presenter. Guess who did the handout.
So I put a lot of details into the slide so that I don't also have to do a Word file. Any of you that take issue with that, that's fine. If you don't want me to come back in the future, please select that rating in the surveys. Those of you that do want to hear me again, this is your handout.
Anyway, right. Demo-- so this is what AMPS looks like. And by putting in those Selection Method parameters, what we've got over here here is we've got the electrical information about the mechanical kit that's been entered ideally by the mechanical engineer at the top. Then the electrical engineer can run through that data and choose the data they want to use in order to inform the outcome from what is ultimately going to be a Dynamo script.
This means that they can choose the values that they need in order of the context, the building that they're working on, or the design of the system that the equipment is being entered into. So we've got the ability to choose between full load power, running power, and then starting current, running current, or a current calculated from the chosen power, which uses a formula in the family to generate that.
Once we've made those decisions, and-- oh, rubbish. Here you are. Make sure you're on it. There you go. Bear with me. I thought I hadn't included [INAUDIBLE], but I have. Once we've made those decisions, we're then able to use Dynamo script. It looks a bit like this. It's big, scary, and the only thing the engineers need to know is it's got a Run button. There's no other means of interacting with it.
And basically, by pressing the Run button, every piece of mechanical equipment gets a power supply. Not only does it get a power supply, it gets the right type of power supply for the mechanical equipment. So a boiler gets an isolator, a [INAUDIBLE] beam or a [INAUDIBLE] unit gets a fused spur. In addition to that, all of the electrical information from the mechanical equipment is transferred to the power supply. A link is created between the two. So if you close the Dynamo script and reopen it, run it again, they don't all get another power supply. Only new pieces of equipment get a power supply.
And then if you have a Duff voltage value, if you've copied one of the supplies to another piece of equipment and then rerun it, if you've not got a power supply big enough within your project to actually provide a supply to the piece of equipment and a couple of other things, the script will also color in the objects to say, something's gone wrong, you need to pay attention here. Other than that, this automates pretty much weeks of work into seconds. And it is only able to do that because we're providing the optionality-- which could be in the Dynamo script, right, we could put the Selection Methods within the Dynamo script itself-- asking people to interact with a schedule and select some numbers on a column with that number in it. I know from experience it's a lot easier than saying to someone, OK, I've just about made you less scared of Revit. Now I'm going to introduce you to Dynamo. And within Dynamo, there's all these nodes. And this little slider thing changes how it works. And you just watch someone's head explode if they're not used to interacting with that sort of stuff.
So this Selection Method technique with a formula embedded in a family provides a simple and easy interface so it can figure how you want something like a Dynamo script to run. But it could just as easily reference a formula that exists within a family. So that's what we did on the water flow version. These are the parameters and the formulas that go into the water flow example that I showed you earlier.
And in this instance, what we ended up doing is having a water flow rate heating parameter that referenced a formula that could base the water flow rate on the heating load, one that you could base the flow rate on the heating capacity, should you say, actually, I want to just-- this thing needs to be able to cover off the absolute max that this piece of equipment would ever, output-- which I don't expect people to use very often, but we can provide it as an option-- and the ability to just reference a manual valley, which is what we were talking about at the beginning of the class. So now they can use the automation tool that we've created that allows them to automate that effort into a significantly short period of time. But they can also, should they choose to do so, actually just say, no, set it to 3, and this is the water flow rate that I wanted to go into the system.
Something I've kind of skipped over with this is, I think we've got lots of parameters within our library. This is an excerpt of all of our parameters circa two years ago. There's a couple of thousand of them that we went through. I painstakingly went through and had to name about 3/4 of them myself. They're named hierarchically, they use engineering parameter types-- so a water flow is a water flow, a current is a current, et cetera-- and we looked at all the standards out there and decided that there was no one standard that fits on these, so we just added another one.
But as standards start to homogenize in the future, what we can do is either map our stuff to a standard as it arises, or we'll just swap everything out and start again. The reason for mentioning that is that all those parameters go into the Revit standard that we now use across the entire UK within Arup. Ideally, we'll be using that across the rest of the world in Arup at some point in the near future. Some other parts of the business do use what we've done. Some other parts of the business don't, and that's just a matter of the autonomous nature of the way Arup does business.
But the reason why I cover that is, effectively things like the Selection Method Technique I've just shown you and AMPS allow you to ask questions of your model. And the only way they allow you to ask questions of your model consistently is if you've got consistently structured data within your model. Use different parameters in different families. If you use families with different names in all of your different projects, you're going to really, really struggle to do anything in regards to automation, or especially things like the formulas, but particularly in regards to Dynamo.
You know, the simplest example of asking a Revit model a question is using a schedule. You create a schedule, say, I want a table of data that shows me the values for this parameter and this parameter and this parameter. This is an example of the equipment data sheets we produce out of Revit for a handling unit. If you understand how-- well, I gave an explanation of how to build this air handling unit in my previous class, the previous class to this one, the "Creating Smart Families." If you've got any questions about that, come and ask me afterwards.
But I would not want anybody ever to have to create all of these tables from scratch because we've used different parameters in different families, and that's been inconsistent. Actually, what we've done is we've been able to create standardized families with standard parameters with standard schedules that go in our standard template, which means that everybody, as standard, can put that all on a standard sheet-- really quick and efficient. And actually what we've done-- I need to put some more work into it-- is create an automation routine that says, click on the air handling unit, and it creates the sheet for you. It just dumps all of those tables onto the sheet, pulls the data down from the families, asks the questions that it needs to, and gives that back to you as a deliverable.
So what we're going to talk about now is how to use Dynamo to automate huge amounts of work into seconds. And actually, I don't think it will come as any surprise-- or we'll cover this quickly first-- as I just said, we need consistent data. And once we've got consistent data, consistent data is what unlocks the opportunity for us to have consistent workflows. The way that I'm defining consistent data is to think in regards of your Revit parameters and your Revit families. If you've got consistent parameters using consistent families, you can start to develop consistent workflows. Those workflows can express themselves both in terms of standardized Revit workflows-- ie, the schedules that I was just talking to you about-- they can express themselves in terms of formulas, so being able to reference one value from another within Revit, or in terms of Dynamo. There's other ways as well, but these are the three that we're talking about today.
And once you've done that, you will be able to consistently generate the same type of project output. So you've got projects that you can start to ask questions of. And what we're going to do is go through the workflow example for AMPS. So this is the process that will typically be undertaken by an electrical engineer on a given project. Again, you can map the software to it. And again, the interfaces between these are all completely manual. To go over how-- well, at least the way we used to do it, I'm all for full exposure and honesty in these discussions because there's far too much misinformation that gets bandied about. The way that a lot of people still do this is, go print off a drawing of the mechanical design, go sit in the corner of the office with a red pen and a laptop, and work out, OK, that's a fan coil unit. What's the-- OK, I need the [INAUDIBLE].
OK, that's going to have an oscillator, and it's going to be this size. And I'm going to draw it on a red symbol on a bit of paper. And I'm going to do that for about three days and then give it to a technician or a drafter to then convert into a drawing, by which time the mechanical engineers change the design and I have to loop back around and do the whole thing again. That sound familiar? Yes, OK. That's what we all do. Welcome to the construction industry.
And what we're going to do is think about that process in a different way, think about the data that we need to actually undertake that process, use Revit as a structured database that can carry all of the information that we need to produce, and then think about how we're going to undertake the process differently in order to generate the data that we're ultimately going to store within Revit itself. We've already covered off how to use formulas and families in Selection Method Technique. AMPS does all this bit. And actually, you can kind of extend it left a bit as well, because we're using Revit to input the data upon which the AMPS tool runs.
So there's quite a lot to cover there. And I've already shown you, AMPS will do that lot in seconds rather than in weeks. And I have to admit, I was a bit pained as to how I was going to go through this and do this with you in in half an hour. But actually, if we get the PowerPoint working again, unlike most people, I don't think about Dynamo as a tool for generating funky parametric geometry. This is a video that I nicked off of the Autodesk website showing you how to do a pylon or column thing, create different lines of different lengths. And you can use sliders to make it taller, shorter, and fatter and thinner and all that sort of stuff. And that's great for structural engineers. That means absolutely nothing to me as a mechanical engineer.
We did a session two years ago on how to use Dynamo for MEP. And effectively, the way I use Dynamo is as a really funky calculator that can do all sorts of stuff and interact with 3D geometry. This class covered things like nodes, as you'd expect it to, and the details as to how different nodes work. It also covered list structure. Lists are incredibly important within Dynamo. If you don't understand how lists are passing through a Dynamo graph, you don't understand Dynamo.
We also covered things like lacing within Dynamo-- lacing and how you lace nodes together, not the little line between nodes. Lacing is the behavior of a node. You can make it behave either shortest, longest, or cross product. And Dynamo team, of which there's a couple of people here today, keep changing the way that this stuff works. But this is really, really important in regards to how you use Dynamo.
And I don't think it's going to come as any surprise, we're not covering this in detail today. I've done a class on this before. You can go back and look at that class. There's an hour and a half worth of material for you to go and learn about how to use lists, how to use lacing, and effectively learn that there. This session is going to tell you about how we take these principles of effectively using Dynamo. We've got an input, you use it to perform some sort of function, and then you generate an output. In regards to AMPS, we've got some data. We've got some mechanical equipment in the model. We're going to use all of that data to effectively derive some outcomes through many different functions that are chained together.
So just to cover back off some of what AMPS does, AMPS-- and let's stay here to read this-- AMPS automatically creates power supplies for any piece of mechanical equipment. It does what it says on the tin. It automatically sizes each of these power supplies. So if you got a certain amount of current, you get the right size power supply. It automatically transfers all of the data from the mechanical equipment to the power supply.
It creates a link-- and the way it does it, because we don't cover it in detail at the moment-- is it transfers the GUID of the mechanical equipment to the power supply and the GUID of the power supply to the mechanical equipment, so that they each understand the exact reference to which they relate. And it draws a temporary Dynamo line between the two, which is quite cool. And it highlights any element that's causing an error to occur in regards to the tool.
This is what AMPS looks like. It's quite a lot of nodes. Trust me, there are some nodes there. Someone in the office said that they'd go through and count it for me, but they haven't done that yet. I think it's probably a couple of hundred nodes chained together. But what this is is effectively the same engineering logic that an engineer would otherwise apply going and sitting in the corner of the office with a red pen and marking up drawings condensed down into a logic diagram that uses the model as the basis of what it's going to do to undertake task and automate it all for you.
And what we're going to do in order to cover off the techniques that we've used to generate this tool is actually walk through the tool bit by bit. And we're not going to cover of the function of absolutely every node. We're not going to talk about how the list passes through it at all, because I said you can go back to the other class. But there are some specific things that we're doing and some techniques we use over and over and over again, not just in this tool but in many others that I'd like to think you can take away and apply to your own problems to come up with your own solutions. So it's really difficult to think about how to frame this in such a way that you can take away something useful. But I really hope going through this in some detail gives you the ability to do that.
It does also mean, unlike in this view, you'll get to see the majority of the nodes how they are actually laced together and the lacing that's been applied to each of them. So if you want to go away and try and recreate certain portions of it, you can. So all of that detail, as shown here-- you can't quite see it probably [INAUDIBLE]-- you kind of can see it-- the names of the nodes so you understand how the things work together.
And you can also see the top right hand corner. Got a little key showing roughly where we are. That's going to keep stepping through just to kind of show you roughly where we are on the kind of awesome map that is AMPS. So we start off with asking the model what elements it has. And we start doing that with a very specific node that-- I keep getting static shocks off of this-- that only references the elements in the active view. That's a conscious choice for two reasons. One, we don't want to do anything to the model that the engineer can't see.
You could do it to the entire model if you want. If something goes wrong on another floor, how are they going to know? So, in this instance with this tool, we use AMPS to automate all of that stuff for one floor at a time. Having done that, we then also retrieve some information from the elements that are on the active view. The first piece of information we retrieve is the Revit category. So I want to go and find only things that are-- well, I want to find them the categories of all the equipment that's been-- all of the elements that have been selected on that view. Then I go and ask each of those elements, are you either a piece of mechanical equipment or a duct accessory? The reason why I ask for those two things is because they're the only two things we've configured AMPS to be compatible with thus far.
In reality, you could probably also do the same thing for pipe accessories with actuators on valves and that sort of stuff. You can extend this further, but that's the way it works today [INAUDIBLE]. And then we take all of the elements that we selected from the active view, we take the information that we've retrieved from each of those elements, and the result of the question that we asked, are you a piece of mechanical equipment or are you a duct accessory, and then we run that through a filter. And we use that filter to get rid of everything that isn't a piece of mechanical equipment or a duct accessory. And that's achieved through the [INAUDIBLE] using these nodes called Filter By Boolean Mask.
Now, I've had the opportunity to run for some of the Dynamo team through this, and they've said, you use a lot of filters. And yes, I do. The way that I go about doing a lot of my work is I use loads of filters to go through and start off with a big question and slowly whittle down that big question into more and more specific data. You're distilling your model. When you interact with Revit generally, through Dynamo, you can only really start off with some really big, specific questions. And then I use these filters to filter it back.
This is an example of how we're actually using this in a way that you can see actually within the list structure itself. So on the left hand side, we've got a number sequence, 1 to 10. We've then got a test in the middle. Are those numbers less than or equal to-- and in this instance, 4. And what you can see is, you get a list of true values and a list of false values. False is where it's not less than 4, or less than or equal to 4, and true is where it is less than or equal to 4.
And then what you get out of the back is two outputs, a list of things where that was found to be true and a list of things that were found to be false. Now, in the first instance where we start off in this script, everything that isn't a piece of mechanical equipment or a duct accessory I don't care about at all. So I have nothing that comes out of-- and these need to be renamed, but you've got an in output and an out output. The out output is the stuff that failed the test. The in output is the stuff that passed the test. In this instance, we don't do anything with the stuff that failed the test because we don't care about it. We're not providing a power supply for a wall. We're only providing a power supply for mechanical equipment or duct accessories.
Then, next part of the script, as it slowly chugs its way along the graph, is asking another question. Right, I've got a piece of mechanical equipment. Does it actually require a power supply? Revit defines mechanical equipment as a very binary thing. It's just mechanical equipment. We all know that mechanical equipment actually expresses itself in terms of things like radiators, fan coil units, AHUs, and, and, and, and.
What we also have to do, because it doesn't come with Revit families out of the box, is tell the piece of equipment it actually requires a power supply. You could potentially use another technique to actually go and find out if there's an electrical connector within the family. Actually, to my mind, that doesn't necessarily mean it requires a power supply, because it might be a power supply. That's actually where most of your electrical connectors are created.
So what we do is we add some family parameters into all of our mechanical equipment families that tell the model what types of systems they're connected to. So a fan coil unit, or a heating and cooling fan coil unit, for example, would have a cooling connection, a heating connection, a power supply, and a condensate drainage output. A cooling only would have all of the same bar the heating connection. What we can use this for is we can use it in things like this Dynamo script. So we go and ask every single family that has ever been created in our library, do you have an electrical power connection? If you do, right, you're going to need a power supply.
What we can then also do is use these parameters to configure things like our view templates. So what we do is we say, anything that needs-- anything that is mechanical equipment that requires a power supply we want to be shown on the electrical drawings. But we show them grayed back, and we use the filters within the view templates to gray back those pieces of mechanical equipment, but still show them so that you don't just see whole loads of power supplies floating in midair in the hope that one of them might actually be attached to something. You see a power supply hovering over a gray box, which is a fan coil unit or a pump, whatever. So we use this data structure to provide more intelligence to the model itself.
Then, as I said, Revit only defines mechanical equipment as mechanical equipment. So we have another parameter. We have a parameter called identity category. And what that is is a category of the thing that we've put that parameter into. In our mechanical equipment, they are prefixed with a whole lot of abbreviations.
So you can see here, is it a pump, a fan coil unit, a VAV, that one's an air cool chiller, I think, boiler [INAUDIBLE], a GWH, whatever that is, [INAUDIBLE]. And what that's doing is it's saying, of the things that we've configured that we know we can as a default provide a power supply to, because there's defined logic for those types of equipment, ask the pieces of mechanical equipment that we've selected using Dynamo script, are you those types of mechanical equipment or duct accessories? Because if you're not, again, I don't care. Go away. You're going to have to be sized manually because we can't automate the logic yet. Maybe we extend it [INAUDIBLE] to do so.
So again, we're asking a question of our model. One thing to be very mindful of in regards to this, if you're selecting elements from either a view or using most other techniques, there's something small to get your head around in Dynamo that means you have to think about Revit in a slightly different way. When you're using Dynamo, you're not looking necessarily at a family definition or a parameter definition at times. You start off with an element. Elements don't exist anywhere else within the Revit UI but are actually the things that you select. They're the elements that you create. When you select something from an active view, you're selecting the instance element of a family. The instance exists on that plan.
In order to go and retrieve a type of parameter which this particular is, you have to take that instance and say, I want the type of that instance. And from that point, you get the type element. But effectively, when you're first asking something like a view, you're by default retrieving the instance elements because it is the instance of the family within the file. So it takes a little bit of getting your head around. But if you try and ask an instance for a type parameter, it won't work. It will just say, no, that parameter doesn't exist because it doesn't exist within the instance. It exists within the type.
So this is an example of if we've gone and selected a model element within the project-- so we're going to do so manually. Just select, and we get an instance element-- I can go and get the instance parameters directly from that instance element. If I want to get a type parameter, I have to convert it using that family instance type. And then I can go and retrieve a type parameter. Again, that's something that's particularly important in regards to this, and that's why I wanted to take you through it.
All right. We're inching our way through. We then go and ask another question. This question is, does it have a valid Selection Method? If we don't have a valid Selection Method, it would have been highlighted in the schedule. That doesn't mean that I want AMPS to be able to function with anything that someone hasn't noticed as an invalid value within the schedule. So we ask that question again within the Dynamo script. If it doesn't have a Selection Method between 1 and 3 for the current and 1 and 2 for the powers, then do nothing. Get rid of everything else. But for the first time, from the stuff that's going to fail the test, we're going to do something with it.
And what we're going to do is we're going to override-- and there's many different ways you can cover off the error handling. We do this in a slightly different way in some of our more modern scripts [INAUDIBLE] loop back and update AMPS. In this instance, what we're doing is we're going to override the color of the element as it exists within the project. So something that fails the test goes red or green or blue, depending on what question you ask. And what we do is depending on which question has failed, we color it in a different color, and then we provide the color legends to people using the tool. Say, if it's gone green, it's not worked for this reason. If it's gone red, it's not worked for this reason, and so on.
What we do now-- and we're going to cover this a little bit later-- is we actually take a whole lot of information out of the Dynamo script as an export at this point. And I'll tell you how we do that shortly. Right. Next thing we do-- we're going to start to move through a bit quicker now.
The next thing we do is-- and we're not going to go through this in detail because the principles are more or less the same as some of the stuff we've covered already-- separately we go and select any existing power supplies that already exist in the model. That's what's happening in-- I don't know if you can see it. You see you've got a blue input at the top on the left hand side?
There's another blue input below it. That second blue input, rather than going and selecting mechanical equipment or duct accessories, is selecting the power supplies that already exist in the project. We go and ask those power supplies, are you already associated with a piece of mechanical equipment by asking it for the GUID of any mechanical equipment that might be within a specific parameter.
We then compare the GUIDs of the power supplies to the GUIDs in the mechanical equipment that already exist. And if there's a match, we filter them off and we don't do anything with them, because they've already got a power supply. If there isn't a match, it goes through into the rest of the graph. And then it will eventually get a power supply.
In some more detail, you can see we've jumped right up to the top middle section of the graph. Something else-- excuse me, the air conditioner has been playing havoc with me all week.
[COUGHING]
Right. Something else to cover off, you can see we've done things like grouped the graph into different colors. There's some logic-- we're a bit more consistent, again, with this now than we were in AMPS. We use the same colors for different things or the same things in different graphs. So if we're doing filtering, we use one color. If we're selecting elements from the model, we use another color. If we're inputting data back into the model, we use another color.
One thing I'm also particularly anal about is making sure you can see where the lines go. I've seen some horrific Dynamo scripts that only the person who's created them could possibly understand. If we're to have people use these tools as part of their daily work, even if they don't understand what a node does, the bare minimum we can do is actually allow them to interpret that node is connected to this thing. Right, who do I need to go and ask, what the hell is this stuff doing? But if we don't even give them that option, they're never going to understand if they want to try and do so.
And to be honest, coming back and trying to edit this-- going through to put this class together as much as anything else-- it was really, really useful for me to be able to see what was connected to everything else, because after you created it, you kind of forget how it all works and you have to teach yourself again. So this particular piece-- now that we've determined it is mechanical equipment or a duct accessory, it does have a valid Selection Method, it is the right type of mechanical equipment, we then pass different pieces-- we start two streams.
And we are asking questions again. And the reason we start asking questions again is because we've done a high-level pass of questions to just see, right, what's actually going to go into this and get far enough to even consider having a power supply? We then start asking, all right, what pieces of equipment-- we did everything that we said does need a power supply is the type of equipment that would get an isolator. Because we're going to go into a very specific section of the graph that creates the isolators.
There's another piece just below this that has the types of equipment that would require a fuse spur. So we're creating now two sets of equipment-- one that does need an isolators, one that doesn't need a fuse spur. From there, you can see there's lots of nodes from the slides to help you understand it-- we then check the voltages of the equipment that need an isolator or a fuse spur. In the UK, if it's three phase, it's 400 volts. If it's single phase, it's 230 volts. If we have a value-- and in the US it's something else. Not my fault you guys get it wrong.
If it's anything other than those values, then again someone's done something wrong, get rid of it and color it in a different color. If it is one of those values, right, then go through and either pass it to single phase or three phase, depending on the value. And we're doing exactly the same thing again, filtering based on asking the model, do you have 400 volts? Do you have 230 volts? 400 volts, go that way. 230 volts, go this way.
And then, surprise surprise-- and one of the reasons I loop back to if-statments earlier on is the next thing we do is use a load of statements. It took me ages to get my head around how if-statments work in Dynamo, because unlike most nodes, if-statments almost work backwards. Most nodes, the stuff flows from the left to the right. That's true for if-statments except for you have to have stuff that goes the other way first and then kind of comes back as the question. It's a bit odd.
So I've used the same color legend as I used before. This is an if-statment in Dynamo. This is the logical test. So we were asking-- we're actually going and retrieving the electrical current from the mechanical equipment at this point. So how much current do you require? If you're less than 16 AMPS, you would pass the test. And that's the test there.
The value of if that's found to be true-- in this instance, we're actually going to say, we want to get a family by its name and type. The family name, because we've already determined it needs an isolator, because we've created a list of things that says, these things require isolators. That's the family name, and that has to be consistent. And that's the type name. And you're going to get a power supply that would be no greater than 16 AMPS.
What we also do-- and I skipped over it in the last slide-- is we take the current from the mechanical equipment or duct accessory, and we add a margin to it. We times it by-- we add an additional 20% so that we're not creating a 16 AMP power supply for something that requires 15.9 AMPS, as an engineer would do. They'd add a design margin and create a power supply with a slightly higher [INAUDIBLE].
Then, we've actually got nested if-statments. And the value if false is the next test, the next size up. Right, if you're not 16 AMPS, are you less than 20 AMPS? Are you less than 32? Are you less than 64-- and, and, and, all the standard isolator sizes. And what that does is for all the equipment that got that far, that answered all the questions that we asked of it, that has currents, is it generates a list of all the sizes of isolators that are required for each of the different types of equipment. And all of that is facilitated through being able to ask the model questions. The only way you can ask model questions is if you created the data within the model that carries the value for the question you're asking. If you haven't done that, there's very few questions that Revit will facilitate you asking out of the box. It's things like, what category are you? What level do you exist on? And, and, and. Things like water flow rates, currents, voltages, et cetera, you have to do yourself.
Once we've done that-- and we can see we're actually now 3/4 of the way through our graph. We've gone all the way through the first questions up past the sizing logic, and then we get to this bit. This bit is the bit that actually creates the power supply. So we do one more thing. We take the mechanical equipment we selected at the beginning of the script that passed all the tests. And before we converted it into a type earlier, we actually go and grab the geometry of that mechanical equipment, or duct accessory. And we take-- we convert that into a bounding box, then into a cube, and then we get the center of the cubes. It gives us the center of the piece of mechanical equipment or duct accessory.
Having got that, we use that coordinate point as the point at which we're going to create our electrical power supply, except for we actually choose to change the height of where the power supply is created. We deliberately, using this tool, create the power supply at a nominal 1,500 millimeters or five foot, something like that, so it just sits in the middle of the floor plate. Because you need to work out, unless we stored a whole load of other data within families, is it based on the floor? Is it based in the ceiling? If it is based in the ceiling, what side of the equipment is it on, all that sort of stuff.
You can't really automate that. You're generating your model. We've not automated that yet. What we do is we create the supply which someone then needs to go and put in the right place if you're coordinating the positions of the supplies. If you just need to create them, you stick it in at a nominal 1,500, and you're done.
And then this last node actually creates the supplies. And what it does is it takes the coordinates from where we found the equipment to live, it takes the family types that we generated earlier on by asking all our if-statements, and it takes the level of the piece of equipment that it was found to be on. And that was something I had to learn as I was going through and doing it, because there's a number of ways to create elements, one of which includes level. If you don't use this level method-- you just use Create a Family-- you end up creating everything at a single level depending on how high it is, and you end up with all sorts of wonky heights for your power supplies.
What we also do is we create a line between a temporary Dynamo line between the mechanical equipment and the power supply so that we can view visually how far away is-- if it preexist. All the ones that are created by the tool are going to have exactly the same distance. They're all going to be 1,500 millimeters away from the thing that actually exists, except for-- because this interacts with preexisting power supplies and mechanical equipment, what this will do is it will draw a line between anything that was created previously and the equipment it was created for. So if someone's moved something three meters away, you'll see a line shooting across your drawing. Or if they've moved it up to a different level, you'll see the line going up to a different part of the model.
Using some of that temporary functionality within Dynamo that will disappear as soon as you close Dynamo has actually proven to be a really valuable thing in regards to checking that the model is still in good fit order. So again, it's a technique I would suggest that you look for your own purposes.
One of the last things we do is transfer the GUID from the mechanical equipment to the newly created power supplies and vise versa to create that pairing, so that if that model is run again we know we're not going to automatically create another 200 power supplies for all the pieces of mechanical equipment. It was a really, really hard day when I got all this working and I'd only ever tested it by running it once and then closing the file that when I opened it back up, run it again, and realized, oh bugger, I've got more power supplies. I've got more power supplies. So this technique works particularly well for us in this instance, and hopefully it will work for you.
And the other thing-- the absolute final thing that we're using in AMPS-- is we take all of the electrical power that's stored in the mechanical equipment itself and transfer it to the power supply, which again you can see on the left hand side. And you can take all these nodes away for yourself.
We've got a number of different parameters that we're setting. We've had to create all of those. None of those come out the box in any Revit families. If you want to talk about current voltage, power factor, and other stuff, you're going to have to set it. You're going to have to create parameters, you're going to have to create families, you're going to have to load them all in, and that's how you're going to ultimately unlock the ability for you to automate this stuff by asking your model questions.
The very final thing it does is it sets a parameter value by name, and that node works in exactly the same way as get parameter value by name. You can only set an instance parameter using that for instances of elements. You can only set type parameters using type elements of that for type elements. You know what I mean.
All right, that looked bonkers before we ran through it. It's taken about 20 minutes, maybe 25. Hopefully that looks a little less bonkers now, and you can almost navigate yourself through it. For those of you that are more proficient Dynamo users, that might have covered off some stuff you already know. For those of you that aren't proficient Dynamo users, hopefully that's introduced you to a few techniques.
And actually, what we're doing with some staff at work is taking some opportunity to walk them through this, at least from a workflow perspective, how does the tool function, not necessarily taking them through node by node, as I've done with you guys, so that it's not just a black box. I did a talk recently to a whole lot of our clients where I discuss the topic of black boxes because ultimately I think we do need to move in somewhat of a position where we have less understanding of what's happening under the hood, we use well-created tools that do something for us because they've been created by someone that we know and trust that's defined logic within the tool that we can ultimately consume.
The analogy I used with that was actually a fighter jet. Modern fighter jets are designed to be aerodynamically unstable. If a pilot was to get into a modern fighter jet and turn the computer off, regardless of how talented they are, the jet would fall out of the sky.
The only alternative to not trusting the computer, trusting the black box that's helping fly the plane, is to get into an older fighter jet. The reason why we're designing new modern fighter jets is because we need them to be as fast, as agile, and as high-performing as possible. And I think that's how we need to think about construction and the tools that we use.
Ultimately that means as engineers, which is the antithesis of what a lot of engineers want to do, we have to let go of some of the logic understanding that we all create in our own little spreadsheets and have to start using and trusting tools like this. But I particularly like Dynamo as a means of creating those tools because the way I describe Dynamo if you create tools like is, the black box has a lid on it. It's not [INAUDIBLE] that's next to impossible for someone to actually get into in the first place and see the code and if they can get in, they've got to read it line by line. It's at least a logical flow diagram where you can see how the information is being passed around. And if you can understand, because it's got a title on it, what the node is doing, or we had some grouping with some annotation telling you this part of the script does this thing, this part of the script does this thing, from a logic perspective, you can follow it through even if you don't know Dynamo at all.
And I've been able to take engineers through who have never used Dynamo and get them to understand this in about five minutes, without going in node by node, as I've just done with you, but just going through the box of colors. We're getting rid of stuff here, we're getting rid of stuff here, we're getting rid of stuff here, we're creating a list of the sizes provided, actually create the power supplies, and then transfer over the data at the end. That's what I could have done over the course of that presentation.
What I also said was, we created this tool in the past. And this is another example of where the [INAUDIBLE] use similar techniques. I'm not going to walk you through this one step by step, you'll probably be pleased to hear. But what I wanted to cover off with this, this is the Dynamo script that we spoke about in my class from two years ago. This section is the bit that actually takes the heating load for the space and divides it over all of the families in the space able to provide heating. The bit on the right hand side just colors them in, doesn't do anything cleverer than that. This is the new version of the script or graph, depending on what [INAUDIBLE] you use. And that's the bit that does all of the heating design stuff.
The reason why this is so much bigger is much the same way-- or much the same reason why AMPS is a really large script. Actually, when you get down into the weeds of how is this going to apply to every project, what nuances do I need to be able to cater for within the tool itself so that it's not just a binary, "in every situation always do this" thing, we actually need to be a little bit cleverer and able to understand the context of the actual project.
This is now called the Space Load Allocation Manager. What we do is we come up with the name first so we can come up with an acronym, and then we can create a talk. This is what SLAM looks like. I still want a better name. And-- play? Yes, there we go.
So by default, Revit has no link between the space heating load and the load of the equipment within a space. SLAM changes that. So you can see by changing the load nothing happens. And we don't get any different behavior. Again, big scary Dynamo graph, don't need to know anything, because [INAUDIBLE] for the schedule, so it's only got a Run button.
By default, the equipment within the model we've configured to have the space load distributed evenly over the heating element. So we press Run, we get our 20 kilowatts turned into 5 kilowatts for each of the four heating elements. What we've also done is provide via a Selection Method Technique the ability to put a certain percentage of the flow into one family. So actually the radiator at the top we've said we want to have 50% of the overall space heating load. In this instance, it now gets 10 kilowatts, and the rest gets divided evenly again. I don't need to change the decimal points. It should be 3.33.
After that point, we've also provided one other way of doing it, and that's to be able to set a specific amount of heating load. So if we change it to specific and actually make it 0, we effectively make it a standby, that means we get 10 in the top one, 5 in each of the others, and 0 in our other piece of equipment.
In this instance, this tool was also configured to do some other stuff, which we're going to have to run back over here for. Not only is there no link between the heating load of space and the heating load in the equipment, there's no link between the temperature of a system and the temperature in the equipment. So if you change the temperature, which I've just done, you won't be able to see the value at a bottom, change it from 60 to 70 and nothing happened. If I press the Run button again, this tool uses a technique that goes and finds the system on which an element exists, goes and gets the temperature, and sets that temperature value within the families to which it's connected, which is then what's used to calculate the water flow.
So as I said earlier, we've then got three methods of calculating the water flow-- calculate it from the load, calculate it from the capacity, or just set it manually. This uses very similar techniques to those that were used in AMPS. So I've gone through and taken you through how AMPS works. This is what this tool does. It basically uses most of the same techniques to achieve a very, very different thing. And that's why I wanted to show you this other example. This is also a follow-up on the stuff that we were doing before.
The only other thing that this does that AMPS doesn't really do is it goes and finds out what spaces a family exists in. And it does that by creating the geometry for the space, creating the geometry for the family, and then smushing the two together to find out where there are clashes. And if there's a clash, it must exist in that space. So it groups it into the space and takes the heating load and divides it, blah blah blah blah.
The details for how we did that are in the previous class for which this is a follow-up. A couple of little bits, just to help you with this. Most people's schedules don't look like this. Most of our schedules don't look like this. But we're now starting to do quite a lot of customization of the schedule UI. I'd love to be able to do more, but there's only certain things you can do.
One of the things that we are doing is including instructions at the top of the schedule itself. You can create an additional header row if you want. You can actually create two or three of them. If you've got a complicated schedule that you need people to interact with, you can create a PDF, and it will create something elsewhere. But you can also put those instructions on the schedule that they're actually planning to use themselves. You can't miss it if it's written there. If someone tells you where do I go, where do I need to go to understand this stuff, you can just kind of point them two rows up.
The other thing we do-- and this is quite a useful thing-- is we use conditional formatting to color the values of the rows, the values of the columns that we've based our Selection Methods. So you can see really easy visually-- and we also put the name of the Selection Method number in the column itself. So it's quite intuitive. And if I'm asking you for a number over here and there's a column with a 1 in it, that probably means I've selected 1. And where I have selected 1, the value has highlighted the right color. It kind of makes sense-- make things easy for people, if you can.
Also, really, really important, because lots of our parameter names are really long because they refer to very specific bits of data, which means you have to have effectively lots of fields in them. Use the grouping on your schedules to make your name smaller, so you don't have this schedule that's kind of this wide that people have to keep scrolling through to look at information. Where we've got things like our Heating Load Selection Method, that parameter name will be something along the lines of Performance Heating Load-- something or other. It's long, and it's going to have a load of underscores in it.
By putting it into a group that is the heating loads and then saying this is the even heating load, actually I can reduce it to one word. And again, just make it easy for people to understand how to interact with your models. The conditional formatting is also used in different columns. You can only have one conditional format apply to a column, which is a bit of a pain. So what we do is we use additional conditional formatting on other columns to do error checking. So you can see here that a number of-- well, actually, this is a bit of a daft example. But what we have is things like the capacity of the equipment and the load of the equipment. So if the load exceeds the capacity, highlight it red because the equipment is too small. You need to go and select a bigger piece of equipment.
And this is how you do the conditional formatting for your columns. We actually go and look at the-- it's effectively an if-statement again. Go and look at the Selection Method. If it equals 1, highlight me green, because I'm only ever going to be highlighted if I am in that 1 column. And the same for 2, the same for 3, et cetera. Who'd have thought that if-statements could be so revolutionary?
One other thing which I talked about in a previous class and I'm going to talk about today. All of this stuff is only any use if you remember when you're creating things like heating water flow rates or electrical connection values that you connect them to the connectors which exist in your families. If you forget to actually connect the parameters to the connectors, nothing will happen and your model won't work. It's a really easy thing to forget, but please try not to.
So taking you through SLAM, we also have some other tools that don't have quite so awesome names. It's one of the reasons why I have not spoken to you about them. One of them is the Space Criteria Populator. I really need a new name for that one. What that is is a standardized spreadsheet and a Dynamo script where we set all of the design criteria for a building within different space types within a building in a spreadsheet.
We then use a Dynamo script to Hoover all that data out of the spreadsheet and put it into our structured Revit database-- which once the data exists in Revit, we can use things like the Anticipated Maximum Demand Calculator to take those data inputs, compute them into another data output, which is also stored in the Revit model. We've got other versions of those working on which just need converting into finished tools for ventilation flow rates, for heating loads based on heating load densities, cooling loads based on cooling load densities, and and and. And you can only do that once you've got the values in the model.
But the reason for mentioning this stuff-- and I'll skip over the other stuff-- is the real aim of what we're trying to do with a lot of this stuff is when we've got data that we know is going to inform a process, what we want to have is the output data of that process be the input data for the next, and for the output data of that process to be the input data for the next one.
So what that allows us to do is to effectively-- I keep pressing Next-- iterate the design far more quickly than we would have done traditionally. So that means that rather than just do one design on behalf of our client, we do 10 designs on behalf of our client, or 20 designs, or actually, if you go and use Fractal, 5,000 designs on behalf of our client, in the same amount of time that it would have traditionally taken us to do one. And if we do that, what we can do is present our clients with a choice of 5,000 designs from which they can then choose which best suits their needs. And we do all of that by reducing the time required to do the usual, the necessary, and using it to be creative. We're actually passing some of that creativity to the computer, but then what we're doing is using the generated creativity that comes out of the back of that process and really providing out the main knowledge, using up the main knowledge, to drill down into what is the best engineering solution that we could have possibly created on behalf of our client.
Right, I showed you this earlier. And you can see, there's a lot of stuff at the bottom of this. So there's probably some other stuff that will appear, right? If we've got consistent data structure, which I've been banging on about for about the last hour and a bit, we can generate consistent workflows. By generating consistent workflows that consume consistent data structure, we effectively generate consistent project data, not only at an individual project level but across multiple projects. What that allows us to do is things like project level analytics. So I can use things like schedules to go and ask, how much water is contained in all of my families. Because I can say, water content in all heating families, that's the total amount of water that should exist in my system. Or you can use some other methodology to do some of that stuff.
But in addition to that, because you've got like structured databases for all your projects, not only can you do individual project-level analytics, you can do cross-product analytics, which is much, much more interesting. We all start our projects pretty much with a blank sheet of paper more or less informed from what we've done in the past or from what the guys that we work with in the office have done in their previous experience. Wouldn't it be nicer to be able to look at all the projects that we've ever designed and go ask them, right, how many of these projects have a floor area of greater than this with a heating load of less than this that use this type of system for this type of building?
Only way you can do that is by having consistently structured data. You can-- you know, machine learning will help us overcome some of those problems. But machine learning functions best when it has standardized inputs. You create more standardized inputs, you're going to get better data analytics out of the back. And ultimately, you also have to be able to teach everybody how to use this stuff. And if you've done it in the right way, you can create consistent training that tells people how to use your families, how to use your workflows, how to create their projects, how they do individual project-level analytics, and how they do cross-product analytics.
If you do things differently at every level of this chart thing-- if you do things differently all the way through, you're going to constantly be presenting people with different challenges, and they're going to really struggle to pick that up and use it on projects. And it's only through having similar interfaces through things like the schedules that we've created, by having similar parameter names in all of our families, by having similar family names, people know to go and get from we use Unify to distribute all of our content, by having all of our content on Unify, et cetera.
The more consistency you have, the more people become comfortable with it and accustomed to using it on their own projects. And what we've done is we've discussed how we use Revit in order to set that consistent data schema, how we've used Revit and formulas and families in Dynamo to create the workflows. What we haven't discussed yet, beyond producing the Revit data outputs, is how we do project analytics. How many of you have heard of a program called Power BI? I'm hoping a few. Good, right.
How many of you have used Power BI? Good. I'm not going to ask you if you're competent users or not. Power BI is an excellent program. For anyone that really, really likes Excel, your head kind of gets exploded when you first see Power BI and what it can do. And what we're doing in regards to using it with Dynamo is also particularly clever. So I said before, this is SLAM. This is the bit of SLAM that does the stuff that we were doing previously.
This bit at the back exports a whole load of what SLAM does out as a CSV file. And what we do, by generating a CSV file-- I'll have to skip through this a little bit quickly-- this is the collection of nodes. These are the specific bits that we actually run through. So we take out things like the project site information, what's the project's longitude and latitude, we take out what version of the Dynamo script it's using, the time and date that the Dynamo script was run, what the project name is, what the project number is, what the file name is called, and and and. We're Hoovering up all this user-level analytics.
What we also do-- blah blah blah-- is Hoover up the metadata that comes out the back of the tool. What was the heating load for a space? What was the cooling load for a space? And and and. And all of that-- you can see a long list of parameters that we're using-- what level did the equipment exist on, what's its reference, what system is it connected to, what is its water flow rate, what temperatures does it have, and all that sort of stuff. And all of that goes out into a CSV file. The advantage of taking out just a little thing into a CSV file rather than an Excel file, if you take it out as Excel via Dynamo, Excel boots in the background, you see Excel-- if you take it as a CSV file, you don't see anything as a user. It doesn't actually do anything to Windows, which means we can get away with doing this without telling most of the people in the office that we're doing it in the first place. So I'll tell you lot first.
And what I'm going to do is show you an example of what that means to us. Excellent. That's what Sri Lanka looks like, by the way. It's a great country if you get the opportunity to visit it. Right. This is what Power BI looks like when we're starting to Hoover up some data.
So we've got a thing called the Anticipated Maximum Demand Calculator. That takes electrical requirements for spaces and translates it into electrical power requirements. What this does is that rather than using the model-- and the model upon which this is based looks a bit like this one. It's the A in our logo, because I only work on weird projects that don't exist, like my body. It's the A in our logo.
And we could use color plans within Revit to look at things like the electrical requirements within the project. But actually, the people who want to check this stuff, we don't necessarily always want to be pointing back to Revit. We want to be pointing them at the data. And at the moment, they can only really access that through Revit, because that's where it exists. So they have to be able to know how to open Revit, open a central file, they have to have a powerful enough computer to do that, and then they have to wait for it to open, go to the right view in the model, look at the-- blah blah blah.
If we make the data shoot out the back of the Revit file as it's produced, go into a CSV, and come into Power BI, this is what the data looks like. It's just loads of rows of data. What we do is we make the most consistent stuff-- ie, what's the file name, repeat in every column. And then as the data gets more specific, you end up with unique values. So the file name, the date and time, the version-- all those are the same for every row of data. And the nodes I showed you on the previous slides include the structure as to how you create this yourselves. And then we get into the most specific stuff. What was the name of the space-- which I haven't bothered to name in this instance. What's the number of the space, the room, the room name, and and and.
And then you start to get into the numeric values. Once you've got all this stuff, you can then create these interactive charts which allow you to do things like, well, I just want to see what the electrical load is for the fourth floor. Select that-- all right, that's my electrical load for the fourth floor. That's how much is general power. That's how much is lighting power. And that's how much is mechanical power. And that represents that proportion of load across these space types.
Actually, I want to look at the power requirements for the open office. I've got open offices on the fourth, third, second, and first floor. If I want to look at the cellular offices, actually there's a lot less of those. And if I hover over it, I've got 45 cellular offices on that tool tip. But that's requiring a lot less power than the open offices, for which there are only four, one on each level, and and and. This is allowing you to view the data that is contained within your Revit database through a different lens in a way that requires a lot less computational power, a lot less power in the workstation, that can actually be embedded on our website, embedded on a SharePoint, emailed to people as a Power BI file, and and and.
I'm not advocating that Revit is going to be used to interact with the data in every instance. We need to have different tools that provide different functionality on jobs. What Revit is doing in this instance is providing us with some commonality through which we can then export the data to view it through a number of different lenses. Power BI is a particularly powerful lens to view the data.
It will come as no surprise, I don't think, considering we're effectively-- I'll just go back to the PowerPoint for a second. An hour and 20 minutes into the presentation, we've done two learning objectives, there's two more to go. It's not going to be any surprise to you that the second learning objectives are a lot shorter.
Effectively, what we're doing, in terms of managing our data requirements across all of our families-- we use some other tools that I'll introduce you to in a moment-- this script is an old version of something we now do in a different way. And because it's an old version-- I still think it's a perfectly viable way of doing it-- I'm actually quite happy to give this one away. So this one, when I upload the PowerPoint for this, I will also upload this Dynamo script.
This Dynamo script takes the data structure that exists within your families and produces a CSV file that goes out into a Power BI schedule, a Power BI report that it allows you to interact with, and look at how you've structured the data within your families. That looks like-- if I do this one-- do do do do do. There's probably a quicker way of doing this, but there you go. That looks a bit like this.
So this is one of the pages that I generated in this original Power BI report. What this does is it allows you to look for links between data in the families, the parameters that exist, and so on. So what we can do is do things like-- ooh. Excellent. [INAUDIBLE].
Oh, dear. One second. I might have to just drag this. It's going to be horrible doing it this way. It allows you to do things like select a parameter type. So I can select on here and select things like electrical current. These are all of the electrical current parameters-- ugh, that is horrible-- all of the electrical current parameters that exist within a families that we actually harvested out of our project.
On the right hand side, you can see how many times each of these parameters have been used. Again, I've veen banging on about data consistency for that last hour and 20 minutes. We've got a number of electrical parameters that are used 22 times. We've then got a few that are used once or twice. So what we want to do is use these sort of interfaces to ask ourselves the question again, do we really need those as different parameters, or did we create one too many parameters and can we make it yet even more consistent, so that we can make it easier and easier for ourselves to ask questions of the model and ultimately do other cleverer things?
You can also do things like select a-- let me see. It be nice if this just worked, but there you go. I can actually select on the right-hand side a specific parameter, and that will give me just the families that existed. So I can see, actually, why was that parameter created? It was created in a transformer. That is quite different to something else. OK, that prompt, that one does need to exist.
But this ability to look at your data in a completely different interactive way is proving to be incredibly valuable for us. And I suggest it would probably be incredibly valuable for you. Right. Back to PowerPoint. There we go, just by magic. So that's what that Dynamo script does.
As I covered in my previous class, we also use an old tool created by a guy called Alan Jackson that used to work at Case-- or might still work [INAUDIBLE], I'm not sure-- which is the Shared Parameter Writer. It's a spreadsheet that creates parameters. It actually creates the shared parameters file. It just exports it out. We use that to create our parameters, because it's easier to create them in Excel than it is to create them in Revit itself.
And then we use the CTC BIM Manager Suite. And this has saved us an absolute fortune. The Shared Parameter Writer is free. The CTC BIM Manager Suite isn't. I think it's a couple hundred dollars. It's not expensive. It might be up to $1,000 or something. But really, really, in the grand scheme of what it saved us, it's pittance. It allows you to deploy 100 parameters into a family at one time or into 50 families at one time. It allows you to set formulas, to create them as instance or type parameters, it allows you to go through and ask questions like, is the room calculation point on, or to set the room calculation point on, and all that sort of stuff. You can do a huge amount of batch processing of families using this tool. And it is absolutely epic for doing large updates to your libraries.
What it also allows us to do-- I don't know-- oh yeah, that slide is in there for that reason. We've got pre-configured families that come out of the box. This is a fan coil unit family. There's a lot of parameters in a fan coil unit family in our library. What we do, because we can't create every different type of family that everyone will ever require, those parameters we publish into a set of template families. And then the template families come with all the parameters pre-loaded in. So if you want to go and create your own geometry, you can. But at least you've got 90% of the data set with all of the formulas, with all of the default values, for this is a fan coil unit family, so the identity category is set to FCU. The system connections are that it might have some data if it's got some power, heating, cooling, and and and. You can set all of that on behalf of your users, even if they are creating their own families.
And then, just to cover off this mystery learning objective that I've not told anybody about yet, it might come-- hopefully it's hit home by this point. Doing all this stuff requires everybody to have some consistency in regards to the data that they all [INAUDIBLE] their projects with. And it will come as no surprise that-- I don't know why that's highlighted. That's fine. If you don't have consistent data, you can't do anything that I've just been talking about for the last hour and a half.
Every project that we work on we work on with other stakeholders, other collaborators. I've got a really good slide here. There's 60 different companies that work on the same project. At the moment, because most Revit families come with a very narrow view of the data required for those families, you have to create for electrical fixtures voltage parameters, current parameters, and and and. If you create a parameter, you also create a GUID. If someone else on your project creates a voltage parameter and you've created a voltage parameter, if you try and tell them what your voltages are and you've created it with a different parameter yourself, you're talking a completely different incompatible language, which is crap.
So in order to create some more consistency, one thing, not quite-- so I planned to kind of say, and what we'd like to do today-- we didn't quite get there this year. But I have got quite a lot of support now from my senior leadership back at home. What we are planning to do at some point in the future is publish everything that we've done publicly. So all of our family library, I don't think we'll put our Dynamo scripts out there-- maybe-- but we will be putting our family library and our parameter library out for public consumption to create some consistency where there is currently chaos.
I've taken this up with lots of the large family creators on behalf of companies like BIMobject. BIMobject and some of the other family creators, none of them use the same shared parameters library. If I want to set pumps and go to BIMobject and I go to another provider and I want to schedule them within my project, I can't because they're using different sets of parameters. We don't actually use manufacturer's content at all in any of our models, which is a completely separate thing. So I'm actually not losing out on much of their stuff.
But I don't particularly agree with-- and the reason I mention BIMobject is because I kind of had it out with the CEO of BIMobject at a conference last year. So I don't mind throwing them under the bus lightly. I think that we need better generic content through which we can articulate our design requirements. And the work that we've done, I believe, is certainly moving our business on. I think it has the ability to move some of the industry on. I think if you get the ability to download this at some point in the future, I'm sure certain people will find things and say, I wouldn't have done it like that and that bit is broken, because that's what our users find occasionally in the office.
But if we can try and work collaboratively together and we can start a conversation as to how this information should be structured for the industry, when I send you a family or a voltage and you receive a voltage, that's got to be better than where we are today. So hopefully that's something that we'll be able to do in future.
And just to give that some sort of timescale, you know, hopefully if I get that signed off that will happen within the next year, I said that very flippantly a couple of years ago, that if I got my way we'd just publish this stuff, and I got people asking me on things like YouTube, when are you going to publish this library? And I said, oh, well, I didn't actually say we're going to do it. But I am saying we are set up to publish this at some point in the future. It's moved on from the last time I had the opportunity to talk about it.
One other thing I'm going to mention, because it was also in my previous class, this is a schematic. Is this gonna play? No. OK, this video doesn't play. This is a schematic in Revit. This is actually a 3D Revit model that looks like a schematic. So it's not just a dumb 2D diagram. As you change airflow rates at one point in the schematic, it changes them all the way along the schematic itself.
At the time at which I first talked about this, this was under construction. I submitted two AU classes this year. The other was to talk about smart schematics. This is also a 3D Revit model that you look at as if it was a schematic diagram. This actually functions-- we call them smart schematics now. This is what it looks like. So I've got a radiator in the top right hand corner and some water flow connected through the radiator. If I change the water flow rate-- come on, keep up with myself. Change the water flow rate, you'll see it will change the water flow up there. But that water flow will actually bounce all the way through the system so you get updated water flows, updated pressure losses through friction. You can then use that data with a standard pipe sizing or duct sizing functionality, because this works on pipes and ducts, to size the pipes and ducts.
Today this doesn't link through to the 3D model. But because we've got a Revit data structure for the schematic and a Revit data structure for the 3D model, the very least we can do is overlay the two and do a comparison. If we get the time to move on to it next year, we're actually going to start to work on a version that creates a dynamic link between the model and the schematic itself. This is kind of like-- having a schematic that helps to drive the model or vise versa has been the Nirvana for all the engineers in our office for as long as I can remember.
We've got really, really close. And the only reason for mentioning this is this class didn't happen. I got rejected. I got turned down. I had plans to come back and talk to you guys about how we're doing this and why we're doing it. And I said I tried not to use animojis, but I failed.
I know of a certain activity that's going on within-- or just generally. I think this has got a lot of legs. If you want to understand more about this in the future, one of the things that you could do is-- this is going to come across as a bribe now, and it wasn't meant to come across like this. If you want me to come back and talk about this next year, leave some nice comments in the survey section of this class, and I will put those comments in my application for next year saying, we have this thing I'd like to talk to people about, but I need some collateral from people like you to be able to say, this is something I know people want to see because when I tried to put it forward myself this year, unfortunately it didn't get selected. Maybe next year.
And that's it. Thank you very much for attending. I hope you enjoyed it.
[APPLAUSE]