Skip to content

Nodal and modified nodal analysis

Every time step of an EMT simulation boils down to solving one linear system that describes a purely resistive network. This page explains how that system is built — first with nodal analysis, then with its more capable extension, modified nodal analysis (MNA).

Nodal analysis

Nodal analysis is the systematic application of Kirchhoff's current law (KCL): the sum of currents leaving any node is zero. Pick one node as the reference (ground, 0 V) and take the voltage of every other node relative to it as an unknown. Writing KCL at each non-reference node gives one equation per node, which assembles into the matrix form:

G · V = I
  • V is the vector of unknown node voltages.
  • I is the vector of known current sources injected into each node.
  • G is the nodal conductance matrix.

For a network of conductances the entries of G follow simple rules:

  • Diagonal G[k][k] = the sum of all conductances connected to node k.
  • Off-diagonal G[k][m] = the negative of the conductance connected directly between nodes k and m.

Solve G · V = I (by Gaussian elimination / LU factorization) and you have every node voltage.

Stamping

You never build G by writing out KCL by hand. Instead each element is "stamped" into the matrix — it adds its contribution to a few entries, independently of every other element. A conductance g between nodes i and j contributes:

G[i][i] += g      G[i][j] -= g
G[j][j] += g      G[j][i] -= g

A current source Is flowing into node i (out of node j) contributes:

I[i] += Is
I[j] -= Is

Because every element stamps independently, the matrix can be built in a single pass over the components. (If a node is the reference node, its row and column are simply dropped.)

Why this is exactly what EMT needs

Recall from EMT simulation that the trapezoidal companion model turns each resistor, inductor, and capacitor into a conductance in parallel with a known current source:

Resistor   R   ->  g = 1/R
Inductor   L   ->  g = h / (2L)   + history current source
Capacitor  C   ->  g = 2C / h     + history current source

So at every time step the network is exactly a set of conductances and current sources — precisely the G · V = I form that nodal analysis solves. Stamp the conductances into G, stamp the history sources into I, solve once, and you have all the node voltages for that step.

Why plain nodal analysis isn't enough

Nodal analysis works beautifully as long as every element can be written as a conductance (a current that is a function of voltage). But some elements cannot:

  • An ideal voltage source fixes a voltage and lets any current flow. There is no finite conductance that represents it, and its current is an unknown, not a known injection.
  • Ideal transformers and other elements that impose a relationship between branch voltages or currents have the same problem.
  • Anything where a branch current is itself a quantity you want to output or constrain.

You could approximate an ideal source with a tiny series resistance, but that hurts accuracy and conditioning. The clean fix is modified nodal analysis.

Modified nodal analysis (MNA)

MNA keeps the node-voltage equations of nodal analysis and adds extra unknowns and extra equations for the troublesome elements. For each ideal voltage source (or similar branch), it adds:

  • one new unknown: the branch current through that element, and
  • one new equation: the voltage constraint that the element imposes (e.g. "the voltage across me equals Vs").

This produces a larger, augmented system in block form:

[ G    B ] [ V ]   [ I ]
[        ] [   ] = [   ]
[ C    D ] [ Ib]   [ E ]
  • G — the same nodal conductance matrix as before.
  • V — the node voltages; Ib — the added branch currents.
  • B — places each branch current into the KCL equations of the nodes it connects.
  • C — writes the voltage-constraint equations in terms of node voltages.
  • D — couples added unknowns to each other (often zero for ideal sources).
  • I — known current injections; E — known source values.

For an ideal voltage source Vs connected from node i (+) to node j (), with its current Ib as the new unknown, the stamps are:

B:  row i, source-column  +1      C:  source-row, col i  +1
    row j, source-column  -1          source-row, col j  -1
E:  source-row            = Vs

The first two rows say "this branch current enters node i and leaves node j" (its contribution to KCL); the constraint row says "V[i] − V[j] = Vs". Solving the augmented system yields both the node voltages and the source's branch current directly — no series resistor, no approximation.

Solving the system

Whether plain nodal or modified nodal, the assembled matrix is solved with standard linear-algebra methods:

  • LU factorization (Gaussian elimination with partial pivoting) for the general case — MNA matrices are not symmetric, so they need a general solver.
  • Cholesky factorization when the matrix is symmetric and positive definite — true for a purely conductive nodal matrix, and roughly twice as fast.

Real networks are sparse (each node touches only a handful of others), so production EMT solvers use sparse factorization and exploit the fact that the matrix is constant between topology changes: factorize once, then only re-do the cheap forward/backward substitution each time step.

See also

  • EMT simulation — the time-domain loop that calls this solver every step.
  • Power flow — a different (nonlinear) network solve for the steady state.

References

  • H. W. Dommel, Electromagnetic Transients Program (EMTP) Theory Book, Bonneville Power Administration — nodal formulation and companion models (see especially the chapters on lumped elements and solution methods).
  • J. Arrillaga and N. R. Watson, Power Systems Electromagnetic Transients Simulation, IET Power and Energy Series 39 — modern treatment of the network solution, including modified nodal analysis.
  • C.-W. Ho, A. E. Ruehli, and P. A. Brennan, "The Modified Nodal Approach to Network Analysis," IEEE Transactions on Circuits and Systems, 1975 — the original MNA paper.