Calculation methods

Mesh construction, steady-state heat transfer, moisture screening and dynamic estimates.

On this page

The Mesh

Both the standalone editor (2D) and the Rhino plugin (3D) discretize the geometry into a graded rectilinear grid: a structured grid of rectangular (2D) or box-shaped (3D) cells whose spacing varies along each axis. The same mesher is used in both.

Every interface is a grid line

In 2D, every material interface (layer and fill boundaries, stud edges, profile flanges and webs) becomes a grid line in both directions. In 3D, every axis-aligned face of the Rhino volumes, plus each volume's bounding planes, becomes a grid plane. As a result each cell holds exactly one material, and thin parts are never skipped or widened by where the grid happens to fall: a 1 mm steel plate is resolved at its exact thickness even with a 10 mm cell size. Faces closer together than a small tolerance are merged, so modelling noise does not create sliver cells.

Grading

Next to an interface, the cell size starts at the width of the thinner neighbouring part (so a 1.5 mm strip gets roughly 1.5 mm neighbours), but never smaller than 1/16 of the target size. Away from the interface it grows by at most 30 % from one cell to the next until it reaches the target size. Thick, uniform regions are meshed evenly at the target size. This puts small cells where temperature gradients are steep and keeps the cell count low everywhere else.

The recommended (Auto) size is a tenth of the characteristic thickness, at most 10 mm, rounded down to 1, 2, 2.5 or 5 × 10ⁿ. In 2D the characteristic thickness is the total construction thickness. In 3D it is the smallest extent of the material volumes along an axis on which the geometry changes; an axis without internal faces (such as the length of an extruded section) does not count. Thin parts do not need to be considered, because the mesh resolves every interface anyway. In the standalone editor, the mesh size button turns red when you choose a size coarser than recommended.

Voxelization in 3D

Each 3D cell gets the material or boundary condition of the highest-priority volume that contains the cell's centre (see layer order). Cells inside no volume are empty and act as adiabatic (no heat flow). Sloped faces add no grid planes; they are sampled by the cell centres.

Mesh independence check

ISO 10211 requires that doubling the number of subdivisions changes the heat flow by less than 1 %. With the check turned on (Verify in Rhino, the mesh check toggle in the standalone editor), Koala solves the model again at half the cell size and warns if the U-value changes by 1 % or more. The refined run takes roughly 4× the time in 2D and has up to 8× the cells in 3D.

Because thin parts are resolved exactly, coarse grids are now far more accurate than with a uniform voxel grid. Results on the validation models:

Model Cell size Uniform grid (before) Graded grid
3D test case 20 mm U = 1.107 W/m²K (9 % off) U = 1.225 W/m²K (0.3 % off)
3D test case, fine reference 5 mm 1.2226 W/m²K 1.2223 W/m²K
ISO 10211 case 2 (reference 9.5 W/m) 2.5 mm (recommended) 9.492 W/m at 0.5 mm, 9 s 9.511 W/m, about 0.1 s

How the Solver Works

The 2D and 3D analyses share one numerical core. For steady-state heat transfer, Koala solves the heat conduction equation

\[ \nabla \cdot \left( \lambda \, \nabla T \right) = 0 \]

Discretization

Temperatures are calculated at the grid nodes (the cell corners). Each cell connects neighbouring nodes along every axis with a thermal conductance \(G = \lambda A / L\), where \(A\) is the share of the cell face belonging to the node pair and \(L\) the cell length along that axis. Summing the conductances of all cells gives a sparse, symmetric system \([K]\{T\} = \{F\}\) with 5 entries per row in 2D and 7 in 3D. Because conductances are formed per cell, a sharp contrast such as steel (λ ≈ 50 W/mK) next to insulation (λ ≈ 0.035 W/mK) is represented exactly at the interface.

Boundary conditions

  • Surface films: Surface nodes on a boundary are connected to the boundary air temperature through a conductance \(A / R_s\) (Rsi or Rse), where \(A\) is the node's share of the surface. Uneven spacing is accounted for.
  • Adiabatic edges: In 2D, the top and bottom edges of the repeating unit are adiabatic (symmetry planes). In 3D, any material face that touches neither another material nor a boundary is adiabatic.
  • Floating parts: Parts that are not connected to any boundary through conduction have no defined temperature. They are reported and left out instead of making the solve fail.

Solving the system

When the problem fits in memory, the system is solved directly with a banded Cholesky factorization. The nodes are ordered with the largest grid direction outermost, which keeps the band narrow. A direct solve is exact up to rounding, and its cost does not depend on the conductivity contrast or a convergence tolerance. Larger 3D grids fall back to an iterative conjugate gradient solver with an incomplete Cholesky preconditioner; the console warns if it does not converge. Typical 2D sections solve in a fraction of a second; 3D grids of around 3 million nodes take a few seconds.

U-value and heat flux

The heat flow \(Q\) is summed over every surface film on the interior side, and the U-value follows as

\[ U = \frac{Q}{A \, (T_{i} - T_{e})} \]

where \(A\) is the interior contact area (in 3D, the area of all material faces touching interior boundaries). The heat flux view shows \(q = -\lambda \nabla T\) per cell.

Moisture (Glaser method)

After the temperatures are known, the saturation vapour pressure is calculated at every node. A second steady-state system of the same form is solved for the vapour pressure, using the vapour permeability \(\delta_{air} / \mu\) of each material and the relative humidity of the boundaries. Relative humidity is the ratio of the two pressures; nodes where the vapour pressure would exceed saturation indicate a condensation risk.

Dynamic properties (ISO 13786)

For dynamic analysis in the standalone editor, the construction is treated as a multi-layer system responding to a sinusoidal temperature wave with a period of 24 hours. Each layer is represented by a transfer matrix \(Z\) that relates temperature and heat flux on one side to the other:

\[ \begin{pmatrix} T_{out} \\ q_{out} \end{pmatrix} = \begin{pmatrix} Z_{11} & Z_{12} \\ Z_{21} & Z_{22} \end{pmatrix} \begin{pmatrix} T_{in} \\ q_{in} \end{pmatrix} \]

Multiplying these matrices for all layers gives the periodic thermal transmittance \(Y_{mn}\), which yields the decrement factor and time shift.

Mesh verification and reference cases

Mesh refinement evaluates sensitivity to grid resolution. In Rhino, Verify repeats the calculation at half the target cell size. Review the reported changes in heat flow and any other quantities used by the assessment.

The validation page documents the ISO 10211 reference cases and the THERM comparison. Reference-case verification and refinement of a project model serve different purposes; both should be reviewed within the scope of the calculation.

For window-specific assumptions and source classifications, see window analysis limits and frame configurations and sources.