NandradSolver: the Engine Behind VICUS Buildings

How does a dynamic building simulation actually solve its equations? From the energy balance via ydot, dependency graph and CVODE to the Newton iteration and linear system — explained interactively.

What you will learn in this article:

  • Why the solver balances energy rather than temperature directly
  • How a balance equation becomes the rate of change `ydot` — and how a whole building emerges from it
  • What the three nested loops (time → Newton → LSE) mean
  • Why building simulations compute implicitly (stiffness) and what that costs
Table of Contents

Every dynamic building simulation stands or falls with its computational core — the piece of software that turns geometry, building components, weather and use into a physically reliable temperature and load profile. In VICUS Buildings this core is NANDRAD, a simulation solver matured over more than 20 years of research at TU Dresden. This article lifts the hood: step by step it shows what the NandradSolver computes and how it does it — from the physical balance equation via time integration to the linear system of equations at its heart.

You do not need a numerics degree for this. The central idea fits in a single sentence and can be „cranked through” yourself with the interactive demos below.

The core idea in one sentence

The solver describes the building (and possibly a pipe network) as one large system of coupled ordinary differential equations and integrates this system step by step through time. The heart of it is always the same question:

„How fast is the stored energy changing in every room and in every wall layer?”

Once you know this rate of change, you can take a small step into the future, compute the new temperatures and start over. In vector notation — exactly how the time integrator „sees” it — this reads:

dydt=ydot(t,y)\frac{d\mathbf{y}}{dt} = \texttt{ydot}(t,\,\mathbf{y})

Here y\mathbf{y} is the state vector (a long list of all conserved quantities), ydot\texttt{ydot} their rate of change and tt the time.

The schema and three live demos

The interactive visualisation below summarises the whole process — and makes it tangible. At the top the functional schema with the three nested loops (hover the boxes to see the relevant source files; toggle between implicit and explicit). Beneath it three live demos in which you can turn the time step, grid fineness and heat-exchanger parameters yourself and find the stability limit.

How the NandradSolver computes

From building model to solution – three nested loops & the y→ẏ data flow
$\dfrac{d\mathbf{y}}{dt} = \texttt{ydot}(t,\,\mathbf{y})$

How to read this visualisation — from the overview to ever more strongly coupled systems of equations: How to read this visualisation — from a single equation to many that are connected:

SchemaOverview: the three nested loopsOverview of how the solver works
Roomone ODE — one stateone equation — a room cools down
Wallone PDE → N coupled ODEsmany equations — heat travels through the wall
Heat exchanger2N coupled ODEs, two streamstwo fluids exchange heat
📖 Each term in one sentence (look up any time)
$\mathbf{y}$ — statelist of all conserved quantities (internal energy of every zone & wall layer).the long list of all temperatures/energies that change over time.
$\dot{\mathbf{y}}$ = ydot — rate of changethe derivative dy/dt: how fast each state changes.how fast everything is changing right now (the slope).
Balanced(energy)/dt = Σ inflows − Σ outflows — where each equation comes from.what comes in minus what goes out.
$F$ — residual$F=y-y_n-dt\,\texttt{ydot}(y)$; zero when the new state is correct.how far a guess is still off (0 = right).
$J$ — Jacobian$\partial F/\partial y$: how F reacts to small changes of each state.sensitivity table: which knob acts how strongly.
$\Delta y$ — correctionthe Newton step that improves the guess.by how much the guess is corrected.
LSElinear system of equations $J\,\Delta y=-F$, once per Newton iteration.the system of equations that computes the correction.
Newtoniteration that solves the nonlinear implicit equation $F(y)=0$.stepwise approach toward the correct solution.
BDF order (1–5)accuracy degree of the implicit method; higher → larger steps.how „smart" the solver estimates — higher = larger time steps.
Stiffnessvery fast and very slow processes at once (air vs. walls).fast and sluggish at the same time → explicit needs tiny steps.
$r$ (Fourier number)$r=\alpha\,dt/\Delta x^2$; explicit stable only for $r\le\tfrac12$.measure of step size on the grid — too large → explicit blows up.
NTU · C_rheat exchanger: NTU = UA/Ċ_min (size), C_r = Ċ_min/Ċ_max (stream ratio).heat exchanger: NTU = how „big", C_r = how unequal the two streams are.
Program start
Initialisation build models & graph, set y₀
① Time loop while t < t_end
pick dt · t → t+dt
compute time step
BDF, order 1–5 · adaptive step size + error control
② Newton iteration solve F(y)=0
② + ③ are dropped for explicit — $y_{n+1} = y_n + dt\cdot\texttt{ydot}(t_n, y_n)$
↳ in every iteration ydot(t, y) is evaluated — the building data flow in 3 stages
Head · first

State → temperature

„unpack“ energy y

  • rooms
  • constructions
  • networks
Middle · graph

Compute fluxes

physics at known T

  • conduction, solar
  • ventilation, int. gains
  • HVAC, network
Tail · last

Σ fluxes → ẏ

close the balance

  • rooms
  • constructions
  • networks
↳ from ẏ, Newton builds both parts of the LSE:
residual $F = y - y_n - dt\,\dot y$  →  right-hand side $-F$
Jacobian $J = I - dt\,\dfrac{\partial \dot y}{\partial y}$  →  coefficient matrix of the LSE — the $A$ in $A\,\Delta y = b$
③ Linear system of equations (LSE)
$J \cdot \Delta y = -F$  // J numerically via finite differences + sparsity
Direct · dense matrix
Direct · sparse
Iterative · Krylov
Iterative · Krylov (variant)
Newton convergence · ‖F‖ per iteration
Each iteration solves the LSE once and shrinks the residual ‖F‖ — usually below tolerance after 2–3 steps. That is how often Newton runs within a single time step.
Finish step & write output interpolate onto output times
📄 Output files
Result · room temperature over accepted time steps
Only once Newton has converged is the time step accepted — yielding a new, reliable temperature value. Here a room cools from 22 °C toward 5 °C.
① Time (CVODE) ② Newton ③ LSE Head: energy→T Middle: fluxes Tail: Σ→ẏ

Step by step: a room cools down

The smallest conceivable NANDRAD model: one zone, one equation. A warm room (22 °C) loses heat to the cold outdoor air (5 °C): $\dfrac{dT}{dt} = -\dfrac{T - T_\text{out}}{\tau}$. Press Step and watch the integrator work its way through time — and turn dt to find the stability limit.

💡 What you learn here Explicit Euler blindly follows the tangent: for large dt the solution overshoots T_out and explodes. Implicit stays stable — at the cost of Newton + LSE. For this linear example the implicit step even resolves directly (without Newton). If the solver takes time steps that are too large, the simple method „overshoots" and computes nonsense. The stable method stays calm — but costs more effort per step. Tip: drag dt past 6 h, then toggle between explicit/implicit.
MethodExplicit Euler
Time t0.00 h
Step #0
T (solver)22.00 °C
T (exact)22.00 °C
Error |Δ|0.00 K
① Head · y → T
② Middle · flux
③ Tail · ẏ & step

Try it: push dt past 6 h (= 2τ) and step with Explicit Euler — the solution starts to oscillate and explodes, even though physically the room only cools gently. Switch to Implicit Euler: the same large step size stays stable. That is exactly why NANDRAD computes stiff building models implicitly (CVODE).

Second example: heat conduction through a wall

Now a partial differential equation — the heat equation $\dfrac{\partial T}{\partial t} = \alpha\,\dfrac{\partial^2 T}{\partial x^2}$. A wall (warm inside, cold outside) is split into N cells; each cell balances only with its neighbours. This turns one PDE into a system of N coupled ODEs — exactly NANDRAD’s finite-volume wall, each layer one entry in y. Turn N and see why fine grids bring the explicit method to its knees.

💡 What you learn here A PDE becomes N coupled ODEs through spatial discretisation — this is how NANDRAD’s thousands of states arise. A finer grid (large N) makes the problem stiff: explicit needs tiny steps ($r\le\tfrac12$), implicit solves a tridiagonal LSE per step and stays stable. Splitting the wall into many slices turns one equation into a whole bundle. The finer it is, the smaller the time step must be for the simple method — otherwise the solution flickers. Tip: push N up and click a cell — the inspector shows the numbers step by step.
← inside (22 °C)wall thickness xoutside (5 °C) →
MethodExplicit (FTCS)
Time t0.0 h
Step #0
States (N)10
Δx21.8 mm
Fourier r = α·dt/Δx²0.31
// discretised per cell i:
$\dfrac{dT_i}{dt} = \dfrac{\alpha}{\Delta x^2}\,\bigl(T_{i-1} - 2T_i + T_{i+1}\bigr)$
// only the direct neighbours → tridiagonal
implicit → tridiagonal system, only 3 diagonals populated:$$J=\begin{pmatrix} 1{+}2r & -r & & \\ -r & 1{+}2r & -r & \\ & -r & 1{+}2r & \ddots \\ & & \ddots & \ddots \end{pmatrix}$$This tridiagonal matrix is the Jacobian — the coefficient matrix of the LSE.
🔬 Cell 5 x = … mm Tip: click a cell in the diagram, then press Step

The stiffness effect: push N up (finer grid, more accurate!) — for explicit, r = α·dt/Δx² grows quadratically, quickly bursts the limit ½, and the profile jitters and explodes. To stay stable you would have to shrink dt drastically. Implicit solves a tridiagonal system (the LSE!) every step and stays stable for any N and dt. That is exactly why NANDRAD discretises walls into many cells and computes implicitly.

Third example: counter-flow heat exchanger

Two fluid streams exchange heat across a wall — hot and cold flow against each other. Split along the length into N segments, each segment has a hot and a cold fluid temperature → 2N coupled ODEs (flow + heat transfer). This is exactly how NANDRAD discretises pipes and heat exchangers in thermal networks. Compare counter-flow ↔ parallel-flow and see the effectiveness ε.

💡 What you learn here Two opposing streams = 2N coupled ODEs (advection + heat transfer) — as in NANDRAD’s thermal networks. Counter-flow is more effective than parallel-flow; with unequal capacity rates the stream with the smaller Ċ changes its temperature more. Hot and cold flow against each other and exchange heat. Counter-flow extracts more than parallel-flow. Whoever has „less mass per time" changes temperature more. Tip: toggle the arrangement and vary NTU and the Ċ ratio — ε matches the theory.
ArrangementCounter-flow
Time t0 s
Ċ hot : cold418 : 418 W/K
C_r = C_min/C_max1.00
hot in → out70.0 → 70.0 °C
cold in → out15.0 → 15.0 °C
Heat flow Q0 W
ε (simulated)0.00
ε (analytic, ε-NTU)0.00
// per segment j, with its own capacity rate Ċ = ṁ·c_p:
$M_h\dfrac{dT_{h,j}}{dt} = \dot C_h\,(T_{h,\text{in}}-T_{h,j}) \;-\; UA_\text{seg}\,(T_{h,j}-T_{c,j})$
$M_c\dfrac{dT_{c,j}}{dt} = \dot C_c\,(T_{c,\text{in}}-T_{c,j}) \;+\; UA_\text{seg}\,(T_{h,j}-T_{c,j})$
// cold: inflow from the other side; $\dot C_h \ne \dot C_c$ allowed

Why counter-flow? In parallel-flow both temperatures converge and end at a common mixing temperature — ε is capped. In counter-flow a nearly constant temperature gap is maintained along the length, and the cold outlet temperature can approach the hot inlet temperature → with large NTU, ε approaches 1.
Unequal capacity rates: the stream with the smaller $\dot C$ changes its temperature more (steeper curve) and sets $\dot C_\text{min}$. For $C_r\to 0$ counter- and parallel-flow give the same $\varepsilon = 1-e^{-\text{NTU}}$. The simulated effectiveness matches the analytic $\varepsilon$-NTU relation:$$\varepsilon_\text{counter} = \frac{1-e^{-\text{NTU}(1-C_r)}}{1-C_r\,e^{-\text{NTU}(1-C_r)}}, \qquad \varepsilon_\text{parallel} = \frac{1-e^{-\text{NTU}(1+C_r)}}{1+C_r}.$$

Interactive functional schema of the simulation core behind VICUS Buildings · „▶ Play the flow" walks step by step through the time loop → Newton → LSE.

The rest of the article explains the individual building blocks in detail. You can scroll back up at any time and try out what you have learned.

Energy instead of temperature: the conserved quantity

A central design decision in NANDRAD: the solver balances energy (more precisely the stored internal energy), not temperature directly. The reason is physically clean — energy is a conserved quantity. All energy fluxes flowing into and out of a room can be summed unambiguously. Temperature is then a derived quantity, recovered from the energy and the heat capacity.

The general form of every balance equation is:

d(stored energy)dt=inflowsoutflows\frac{d(\text{stored energy})}{dt} = \sum \text{inflows} - \sum \text{outflows}

What is in the state vector y?

y is simply everything concatenated that changes over time and stores energy:

Part of the y vectorMeaning
Rooms / zonesinternal energy of the room air (+ humidity if applicable)
Constructions (walls)internal energy in each individual finite-volume element of a wall
Thermal networksenergy (mass × specific enthalpy) in pipes and components

A single wall is therefore split internally into many thin layers — each layer is a separate entry in y. For a larger building this quickly amounts to several thousand unknowns. You can generate this „one wall into many coupled equations” decomposition yourself in the second demo (heat conduction through a wall) with the N slider.

Where does ydot come from? The balance, not a guess

A fair question: dy/dt=ydot(t,y)dy/dt = \texttt{ydot}(t, y) is stated — but where does the right-hand side come from? The answer: ydot is not guessed, it is derived from a conservation law. The recipe is always the same:

  1. Choose the conserved quantity y (energy, mass, …) — not the temperature.
  2. Write the balance: d(stored)/dt = Σ inflows − Σ outflows.
  3. Express each flux through the state (physical laws).
  4. Solve for dy/dt — that is ydot.

Example: a room cools down

The stored quantity is the internal energy U=CTU = C\,T with heat capacity CC. It only changes through the heat flow QQ across the envelope, which is proportional to the temperature difference:

dUdt=Q,Q=TToutR\frac{dU}{dt} = Q, \qquad Q = -\frac{T - T_\text{out}}{R}

With dUdt=CdTdt\frac{dU}{dt} = C\,\frac{dT}{dt}, solving for the rate gives:

dTdt=TToutRC=TToutτ,τ=RC\frac{dT}{dt} = -\frac{T - T_\text{out}}{R\,C} = -\frac{T - T_\text{out}}{\tau}, \qquad \tau = R\,C

So ydot is derived, not invented — energy conservation plus one flux law. Exactly this single equation runs in the first demo („a room cools down”): you see the integrator work its way along the tangent through time, compared against the analytic solution.

And for a real building?

The crucial insight: in NANDRAD there is no single closed ydot formula sheet. With thousands of states a hand-written formula would be impossible. Instead the balance is the same for every state, but the sum of fluxes is assembled at runtime — every sub-model throws its contribution into the pot: conduction between layers, solar gains through windows, ventilation and infiltration, internal gains, heating and cooling power, pipe flow. ydot is therefore a function you do not write down but evaluate.

The three evaluation stages: Head → Middle → Tail

The integrator hands the model a y and asks for the corresponding ydot. Internally this happens in three stages — exactly the balance recipe, cast into code:

StageRecipe stepin the room example
Headstate y → intensive quantityT = U/C (energy → temperature)
Middlecompute fluxes from the stateQ = −(T − T_out)/R
Tailclose the balance → ydotydot = Q/C

In the schema above this data flow is shown as a three-stage pipeline inside the Newton loop.

Order of the models: the dependency graph

There are many small sub-models, and they depend on one another: the window model needs the outdoor temperature from the climate model, the room balance needs the heating power from the HVAC model. In what order must one compute?

NANDRAD solves this with a dependency graph. Each model declares which quantities it needs as input and which it produces as a result. From this a correct evaluation order is computed automatically (topological sort). Two special cases are noteworthy:

  • Parallelisation: models that are independent of one another sit in the same „level” of the graph and are evaluated in parallel (e.g. many walls at once).
  • Cycles: if models depend on each other mutually (such as a controller reacting to a quantity it influences itself), they are grouped together and solved iteratively as a group.

Time integration: taking a step into the future

Now we have a function that yields ydot for any y. The job of time integration is to reconstruct the time history from it — the path from the slope. In an outer loop the solver advances step by step from t to t+dt, commits each accepted step and writes out any due results.

Importantly, the step size dt is not constant. The integrator chooses it itself — large steps at night when little changes, very small ones when the heating kicks in. The output (hourly values, say) is decoupled from this: between the actual computation steps, values are cleanly interpolated onto the requested output times.

Which integrator? CVODE as the default

NANDRAD ships several integrators; in practice CVODE from the SUNDIALS package is used almost always — an implicit, adaptive method based on BDF (Backward Differentiation Formulas) of order 1 to 5. Explicit methods (Explicit Euler, Runge-Kutta 45) are also available as reference and debugging integrators.

After each attempt CVODE estimates the local error and compares it with a prescribed relative and absolute error tolerance. If the error is too large, the step is rejected and retried with a smaller dt (or lower order); if it is comfortably small, step size and order may grow. This is how the solver automatically finds the compromise between accuracy and speed.

Explicit vs. implicit — and why buildings are computed implicitly

Whether a time step needs a Newton iteration and a linear system of equations depends solely on where the unknown y_{n+1} appears in the formula.

Explicit — only old, known values on the right. You substitute and compute, a single ydot evaluation per step, nothing to solve:

yn+1=yn+dtydot(tn,yn)y_{n+1} = y_n + dt \cdot \texttt{ydot}(t_n,\, y_n)

Implicit — the unknown also appears on the right and must be solved for:

yn+1=yn+dtydot(tn+1,yn+1)y_{n+1} = y_n + dt \cdot \texttt{ydot}(t_{n+1},\, y_{n+1})

If explicit is cheaper per step — why implicit? Because of stiffness. Building models combine very fast (air, thin layers) and very slow (massive walls, screed) time constants. Explicit methods then have to take tiny steps for stability reasons — the step size is governed not by the desired accuracy but by the fastest time constant. Thousands of cheap mini-steps end up far more expensive than the few large, accuracy-driven steps of an implicit method.

ExplicitImplicit (NANDRAD default)
Newton iteration needed?noyes
LSE J·Δy = −F needed?noyes (per Newton iteration)
Cost per stepvery lowhigh
Step size limited bystability (very small for stiff systems)accuracy (can be large)
Suitable for buildings?no (too slow)yes

You can see the effect immediately in the first two demos: push dt past the stability limit and the explicit solution starts to oscillate and explodes — the implicit one stays calm. In the wall demo a finer grid (large N) makes the problem even stiffer, and the explicit Fourier number r=αdt/Δx2r = \alpha\,dt/\Delta x^2 quickly bursts the limit r12r \le \tfrac12.

Three nested loops

This is the most important mental map. The implicit solver consists of three levels nested inside each other — exactly the three loops from the interactive schema above:

  • Outer — time loop (CVODE): picks the step size dt and goes from t to t+dt.
  • Middle — Newton iteration: solves the nonlinear implicit equation for y_{n+1} (usually 1–3 iterations).
  • Inner — linear system of equations (LSE): in every Newton iteration, JΔy=FJ \cdot \Delta y = -F is solved once.

The Newton iteration

The implicit equation is written as „= 0”:

F(y)=yyndtydot(y)=0F(y) = y - y_n - dt \cdot \texttt{ydot}(y) = 0

Newton improves a guess step by step by linearising locally:

JΔy=F(y),then:yy+ΔyJ \cdot \Delta y = -F(y), \qquad \text{then:}\quad y \leftarrow y + \Delta y

Here JJ is the Jacobian — the derivative of FF with respect to yy, i.e. „how does each balance react to a small change of each state quantity”. This matrix equation is exactly the linear system of equations — and JJ is its coefficient matrix (the AA in AΔy=bA\,\Delta y = b), not a tool for error estimation. Adaptive step-size control estimates the time-step error separately via the tolerances and does not need JJ for that. With nn states, JJ is an n×nn\times n matrix while F-F and Δy\Delta y are vectors of length nn — a square system of nn equations.

Where ydot enters. Both parts of this system are built from ydot — it is not a side branch. The right-hand side is directly the negative residual, F=(yyndty˙)-F = -\bigl(y - y_n - dt\,\dot y\bigr), i.e. one ydot evaluation at the current guess. The matrix is

J=Fy=Idty˙yJ = \frac{\partial F}{\partial y} = I - dt\,\frac{\partial \dot y}{\partial y}

and the sensitivity y˙/y\partial \dot y/\partial y is itself obtained from ydot evaluations: NANDRAD perturbs each state quantity slightly, re-runs the Head→Middle→Tail pipeline with the perturbed state and forms the finite difference — that yields one column of JJ. So each Newton iteration calls ydot several times: once for the right-hand side and additionally for the columns of the Jacobian (accelerated by sparsity and graph colouring, see below).

The linear system of equations (LSE)

In every Newton iteration JΔy=FJ \cdot \Delta y = -F must be solved. JJ is an n×nn \times n matrix; with thousands of unknowns this is the most compute-intensive part of the whole simulation.

Where does the Jacobian come from?

Usually JJ is formed numerically via finite differences: each state quantity is perturbed slightly, the change in FF is observed, and the matrix is obtained column by column. With thousands of columns this would naively be very expensive — the trick is sparsity: a wall layer couples only with its direct neighbours, a room only with its adjacent components. The vast majority of entries in JJ are therefore zero. NANDRAD knows the sparsity pattern in advance and, via graph colouring, perturbs many independent columns simultaneously — instead of thousands it often needs only a handful of evaluations.

The tridiagonal structure of a one-dimensional wall discretisation is the simplest case of this sparsity. The wall demo shows exactly this tridiagonal system and breaks it down cell by cell — the matrix shown there, with 1+2r1+2r on the diagonal and r-r next to it, is the Jacobian, i.e. the coefficient matrix of the LSE.

Direct vs. iterative solvers

There are two fundamentally different ways to solve JΔy=FJ \cdot \Delta y = -F:

  • Direct solvers compute the exact solution via a factorisation (LU) — good for small, full as well as large, sparse systems.
  • Iterative solvers approximate the solution step by step (Krylov methods); they need a preconditioner that „smooths” the system beforehand.

If you leave these fields empty in the project, NANDRAD picks sensible defaults (usually a direct sparse solver, or an iterative solver with a preconditioner for large networks). For most applications this is the right choice — you only touch these parameters when a simulation is too slow or fails to converge.

From state to solution in five sentences

  1. The solver balances energy per room and per wall layer; this yields a large system of ordinary differential equations dy/dt=ydot(t,y)dy/dt = \texttt{ydot}(t, y).
  2. The function ydot is evaluated in three stages (energy → temperature, fluxes, sum → ydot); the order is determined by an automatic dependency graph.
  3. Integration uses CVODE (implicit BDF method) with adaptive step size plus error control — necessary because building models are stiff.
  4. Each implicit time step requires a Newton iteration, and each Newton iteration a linear system of equations JΔy=FJ \cdot \Delta y = -F (the three nested loops).
  5. Depending on size and sparsity, the LSE is solved directly (Dense/KLU) or iteratively (GMRES/BiCGStab + ILU); the Jacobian is formed numerically and exploits the sparsity via graph colouring.

What this means in practice

For day-to-day work in an engineering office you do not need to operate this machinery in detail — but it helps to understand why a validated dynamic simulation delivers reliable results and which screws to turn in case of doubt. The NandradSolver is the computational core that VICUS Buildings builds on; the underlying methodology is documented as open source through the SIM-VICUS research project and was developed over more than 20 years at TU Dresden. To dig deeper, see our articles on dynamic building simulation, on the difference between steady-state and dynamic, and on validation standards.

Frequently Asked Questions

What does the NandradSolver compute?
The NandradSolver describes a building (and optionally a thermal network) as a large system of coupled ordinary differential equations and integrates it step by step through time — typically over a full year. It balances the stored energy per room and per wall layer; temperature is a quantity derived from it. NANDRAD is the computational core that VICUS Buildings is built on.
Why does building simulation compute implicitly rather than explicitly?
Building models are stiff: they combine very fast time constants (room air, thin layers) with very slow ones (massive walls, screed). Explicit methods would have to take tiny time steps for stability reasons and would be unusably slow. Implicit methods such as CVODE (BDF) stay stable even with large steps — the step size is then governed by the desired accuracy, not by stability.
What is ydot in building simulation?
ydot is the right-hand side of the differential equation dy/dt = ydot(t, y): the rate of change of each conserved quantity. It is not written as a closed formula but evaluated at runtime in three stages — convert energy to temperature (Head), compute energy fluxes (Middle), sum fluxes per balance volume (Tail). Mathematically it is always the same balance: change in storage = sum of inflows minus outflows.
What are the Newton iteration and the linear system of equations (LSE)?
With implicit methods the unknown y_{n+1} appears on both sides of the equation. This nonlinear equation F(y) = 0 is solved with the Newton iteration, which linearises locally: J·Δy = −F. This matrix equation is the linear system of equations (LSE); J is the Jacobian. Each time step usually requires 1–3 Newton iterations, and each one solves an LSE — hence the three nested loops time → Newton → LSE.
How large do these systems of equations get?
Each wall is internally split into many thin finite-volume layers; each layer is a separate entry in the state vector y. For a larger building this quickly amounts to several thousand unknowns. The Jacobian, however, is sparse — each layer couples only with its direct neighbours — and NANDRAD exploits this sparsity via graph colouring and matching solvers (KLU, GMRES).

Related Articles

Dynamic Building Simulation: Fundamentals

What is dynamic building simulation? Differences from steady-state calculation, fields of application and advantages for design

Summer Thermal Protection (DIN 4108-2)

Summer thermal protection by simulation: solar heat gain coefficient vs. dynamic thermal building simulation per DIN 4108-2 – methods, overheating degree hours and limits.

IFC Import for Building Simulation

From BIM model to simulation: how IFC files improve the workflow between CAD and building simulation

Steady-State vs. Dynamic Calculation

Comparison of steady-state energy demand calculation and dynamic simulation: methods, accuracy and fields of application

Disclaimer: The content of this page is for general information purposes only and does not constitute legal, planning or engineering advice. All information is provided without guarantee. Despite careful research, VICUS Software GmbH assumes no liability for the accuracy, completeness or timeliness of the information provided. Third-party product names and trademarks are mentioned for informational purposes only and are the property of their respective owners.

VICUS Districts

From theory to practice

Put your knowledge into action with VICUS Districts.

Stay up to date

New features, tutorials and updates delivered to your inbox.