Transient heat transfer in gh

Hello, How can I get wall surface temperature or heat flux by transient heat transfer method? Can Therm do this work?

THERM is stead state and cannot do transient calculations. You’ll see this stated on their website.

EnergyPlus does transient heat flow calculations but all heat flow is in one dimension, which is more geometrically limiting than THERM’s 2D heat flow calculation.

By now 3 years ago there was this project:

Called therm 8, back in the day I downloaded it, tried it a little, very promising… then I don’t know what happened to it.
There is a google discussion group…

You can still get the installer for THERM 8:

I’m not sure it is worth playing with, though, I guess there is a reason they took it off – it was labeled as “research version” when it was still available.

For transient HAM there is always WUFI (Wärme und Feuchte Instationär), it will take ages to run compared to conventional (not using the HAMT module) EnergyPlus simulations. You can use the Honeybee-PH plugin to transfer your model, but I haven’t used it:

Keep in mind, that you can always do 1D assessment with WUFI Pro, or in 2D with WUFI 2D.
They don’t have an interface to GH, as far as I know, @MingboPeng said in this thread, that Fraunhofer doesn’t have a plan to have a public API - maybe it has changed since then.

Getting back to OP, if you are reducing to 1D, you could (theoretically) use the above mentioned HAMT (Combined Heat and Moisture Finite Element) Heat Balance Algorithm in EnergyPlus with Honeybee. Keep in mind, that apart from changing the solver, you will have to provide a lot more information to provide enough data:

Essentially, the default EP material is a very simple representation of real world materials: not caring about the moisture and temperature dependency of e.g. the thermal conductivity, what you need for HAM: a reliable (and somewhat usably complete) source is the WUFI Light Pro database, in which you can enter the values by hand to the EP materials.

You can also factor in the temperature dependency e.g. using ISO 10456 to calculate other values based on the declared value. As a result, you would get something like this, where \lambda(T,\Phi) is displayed:

EnergyPlus’s HAMT module won’t care about it at this level of detail, only about \lambda(\Phi) (see the Github link above with the required objects, MaterialProperty objects do not describe temperature dependence).

I’ve tried to set a small example with Honeybee:
I thought it should be doable by adding the relevant info to the Honeybee constructions like in this example (like adding the Material:RoofVegetation), but I cannot pass an .idf material to a construction. Is this still doable somehow, @chris? It says it cannot the material in the material library, but I fail to figure out how to add it to it. (In this case I wanted to copy an example material from the MoistureMaterials.idf in its entirety and use the Material definiton from there.)

1. Solution exception:

Concrete,                !- Name
Rough,                   !- Roughness
0.1,                     !- Thickness {m}
1.6,                     !- Conductivity {W/m-K}
2300,                    !- Density {kg/m3}
850,                     !- Specific Heat {J/kg-K}
0.9,                     !- Thermal Absorptance
0.7,                     !- Solar Absorptance
0.7;                     !- Visible Absorptance" 

was not found in the opaque energy material library.

The original Hydra example:,-263.36395413822993

What about the rest, the MaterialProperty objects should best be appended as additional strings, like @RafaelA did in this example?

Green panels are from the Github example from above (lines 101-170).

The blue panel is the object to set EnergyPlus to use HAMT, but I guess there is a reason it is having the prefix Advanced/Research Usage:

I thought this would work, but adding the Heat Balance Algorithm additional string breaks the simulation:

Program Version,EnergyPlus, Version 23.1.0-87ed9199d4, YMD=2023.11.14 00:51,
   ** Severe  ** <root>[HeatBalanceAlgorithm] - Object should have no more than 1 properties.
   **  Fatal  ** Errors occurred on processing input file. Preceding condition(s) cause termination.
   ...Summary of Errors that led to program termination:
   ..... Reference severe error count=1
   ..... Last severe error=<root>[HeatBalanceAlgorithm] - Object should have no more than 1 properties.
   ************* Warning:  Node connection errors not checked - most system input has not been read (see previous warning).
   ************* Fatal error -- final processing.  Program exited before simulations began.  See previous error messages.
   ************* EnergyPlus Warmup Error Summary. During Warmup: 0 Warning; 0 Severe Errors.
   ************* EnergyPlus Sizing Error Summary. During Sizing: 0 Warning; 0 Severe Errors.
   ************* EnergyPlus Terminated--Fatal Error Detected. 0 Warning; 1 Severe Errors; Elapsed Time=00hr 00min  0.07sec

Runtime error (PythonException):    **  Fatal  ** Errors occurred on processing input file. Preceding condition(s) cause termination.

  line 269, in script

How should this be done with Honeybee (1.7 as of writing this post)?
Is this still applicable what is in this thread, that we need to change the .idf manually or do it via OpenStudio measures?

Playground GH file (unsuccessful run due to the things above): (54.9 KB)

1 Like

The Combined Heat and Moisture Finite Element (HAMT) Module that Energyplus uses is based on the equations written by Hartwig M. KĂĽnzel (, just like Wufi, in fact it requires the description of the following curves:

It can be used on single surface in the model (while the others calculated with CTF), or of some or even all surfaces in the model.
Extrapolating the data is not the easiest, one must then match the material layers with the required discretization and post-process them with excel or python.

In HB you can import them with add_str, calling the classes I wrote above plus of course HeatBalanceAlgorithm set to HAMT.
(Be careful not to confuse EMPD or Effective Moisture Depth which is totally different and does not use finite elements but transfer functions to solve the equations).

Using Schedule and EMS it is possible to vary the vapor created in a thermal block over time differentiating bathrooms, for example, from rooms and or living rooms, in a dwelling by evaluating same stratigraphies under different stresses.

Here are some outputs I had created for a thatched house:

Or even for a single stratigraphy with hygroscopic material:

for a 2D transition in transient you have to switch to Therm 8, although not very stable indeed, or for 3D nodes in transient I also use OpenFoam:

Obviously it is not so simple and straightforward…
Good work
See you soon