Recent developments in the expression language capabilities of Fluent have significantly streamlined HVAC workflows. Flow balancing, temperature monitoring and control decisions that used to require the writing of User Defined Functions (UDFs) can all now be easily defined, updated and error-checked using Expressions. We’ll take a look at an example below, involving two types of air handling unit for cooling a room containing heat-generating equipment.
In the scenario above, the requirement is to maintain the room below a target temperature while the coloured floor-mounted components continuously generate heat. The roof-mounted cassette units ingest air from the room and pass it over an evaporator coil to cool it. The wall-mounted units ingest air from outside the building, cool it and pass it into the room, maintaining a positive pressure. Excess air leaves through a small wall vent.
The floor-based heat generating equipment is typical of server rooms or electrical switch rooms. Heat generation data from manufacturer spec sheets is often used to create volumetric heat sources in CFD.
In reality there would be more variables to consider, such as humidity, influence of surrounding buildings, wall insulation material and solar loading to name a few. The principles we discuss in this article can be extended for those more in-depth simulations but will be omitted from this simplified example.
Expressions in Fluent include the definition box. Your expression syntax is continuously checked for valid syntax, which includes variable names, locations, functions and references to other expressions. After initializing data, you can query the present value of any expression to ensure it makes sense. The box near the bottom of the screen tells you where the expression has been used.
Expressions you’ve created are listed in the “Named Expressions” tree, and you can hover over them to view lots of info, without needing to open them one by one.
In order to specify the cassette unit parameters, these 5 expressions were created:
The above expressions use a mixture of constants, solution data, and references to other expressions. In general, the solution data queries will follow a convention as follows:
Function_type(Variable_Name,[‘Location1,<Location2>’],Weight=Type).
For example:
Average(StaticTemperature,['outlet--cassette'],Weight='Area')
calculates an area-weighted average of Temperature at the boundary named “outlet—cassette”. The list of available functions is extensive and is covered in the documentation.
Let’s now define the air cooling parameters for the external air feed in the same way.
A final modification that could be made would be to limit the supply air temperature to a value that HVAC equipment can support. For many chiller installations, the lowest feasible supply temperature they can provide is approximately 10 C.
The remaining expressions can then be created.
The IF statement and max function accomplish the same thing, and work much the same as they do in Microsoft Excel. In the case of the cassette and outside air based units, if the calculated inlet temperature would be lower than physically possible, then we clip the inlet temperature to that value.
Having created all of the expressions, they must next be applied to the respective boundary conditions. Those steps will not be covered here, but Fluent offers to pre-fill the expression names as you type them, which can allow you to apply them quickly and without errors.
The solution monitor below shows that the outside air based cooling unit (red) was able to cool the air to approx. 12 C. The internal cassette unit (black) reached a 10 C limit and was then clipped.
There are many more extensions available for complete modelling solutions to HVAC problems like this. Thermostats can be used to monitor temperature at point locations and make control decisions, air units and heat generation equipment can be controlled dynamically, and the space outside the room could also be modelled for a more accurate representation of ambient conditions.
A nice feature when you have to deal with writing multiple expressions (especially multiple expressions of a similar type) is to be able to define them in a text file and import them in one step. You can export your expressions by right-clicking and selecting “Export to File”.
Once you’ve made changes, you can “Import from File”. Any expressions which cannot be resolved will be listed in the tree with the keyword “(invalid)”, allowing you to identify and fix any errors.