Skip to content

Synchronous Machine — Parameter Conversion (XT ↔ RL)

A SYNC_MACH record can be entered using one of two equivalent parameter formats, selected by the TYPE_MOD keyword:

  • RL — the Park-model inductances and resistances are supplied directly.
  • XT — characteristic reactances and open-circuit time constants are supplied; STEPSS/RAMSES converts them internally.

Both formats describe the same machine. XT is convenient when data comes from manufacturer datasheets or Kundur-style standard parameters. This page documents exactly how that conversion is done, so it can be reproduced by hand or cross-checked against external simulators (e.g. Typhoon HIL EMT).


From the RAMSES source (sync.f90, get_sync_mach):

SYNC_MACH NAME BUS FP FQ P Q SNOM PNOM H D IBRATIO
RL LL MDU LLF LLD1 MQU LLQ1 LLQ2 M N RA RF RD1 RQ1 RQ2
XT LL XD XPD XSD XQ XPQ XSQ M N RA TPD0 TSD0 TPQ0 TSQ0
EXC <model> ... TOR <model> ... ;

A rotor circuit the machine does not have is skipped with * in both its reactance/inductance and its resistance/time-constant field.


All parameters are in per unit; time constants are entered in seconds and normalised internally.

Time base

tb=12πfnomt_b = \frac{1}{2\pi f_{nom}}

All time constants (TPD0, TSD0, TPQ0, TSQ0) are divided by tbt_b before entering the resistance formulas.

Unsaturated mutuals

Mdu=XdL,Mqu=XqLM_d^u = X_d - L_\ell, \qquad M_q^u = X_q - L_\ell

d axis — two rotor circuits (field + damper, XSD/TSD0 present)

Td=Td0XdXd,Td=XdTd0Td0XdTdT'_d = T'_{d0}\frac{X'_d}{X_d}, \qquad T''_d = \frac{X''_d \, T'_{d0} \, T''_{d0}}{X_d \, T'_d} a=XdTdTdLTd0Td0XdL,b=Xd(Td+Td)L(Td0+Td0)XdLa = \frac{X_d T'_d T''_d - L_\ell T'_{d0} T''_{d0}}{X_d - L_\ell}, \quad b = \frac{X_d(T'_d + T''_d) - L_\ell(T'_{d0} + T''_{d0})}{X_d - L_\ell} c=Xd(Td0Td0TdTd)(XdL)2,d=Xd(Td0+Td0TdTd)(XdL)2c = \frac{X_d(T'_{d0} T''_{d0} - T'_d T''_d)}{(X_d - L_\ell)^2}, \quad d = \frac{X_d(T'_{d0} + T''_{d0} - T'_d - T''_d)}{(X_d - L_\ell)^2} Tf=b+b24a2,Td1=bTfT_f = \frac{b + \sqrt{b^2 - 4a}}{2}, \qquad T_{d1} = b - T_f Rd1=TfTd1cdTd1,Rf=Rd11dRd1R_{d1} = \frac{T_f - T_{d1}}{c - d \, T_{d1}}, \qquad R_f = \frac{-R_{d1}}{1 - d \, R_{d1}} Lf=TfRf,Ld1=Td1Rd1L_{\ell f} = T_f R_f, \qquad L_{\ell d1} = T_{d1} R_{d1}

d axis — single rotor circuit (XSD/TSD0 skipped)

Lff=(Mdu)2XdXd,Lf=LffMdu,Rf=LffTd0L_{ff} = \frac{(M_d^u)^2}{X_d - X'_d}, \qquad L_{\ell f} = L_{ff} - M_d^u, \qquad R_f = \frac{L_{ff}}{T'_{d0}}

q axis is fully symmetric to the d axis. Two circuits (XPQ/TPQ0 and XSQ/TSQ0) use the same quadratic with Xq,L,Tq0,Tq0,Xq,XqX_q, L_\ell, T'_{q0}, T''_{q0}, X'_q, X''_q. Single-circuit fallbacks:

  • Transient only (XPQ/TPQ0): Lq1=Mqu2/(XqXq)MquL_{\ell q1} = M_q^u{}^2/(X_q - X'_q) - M_q^u, Rq1=(Mqu2/(XqXq))/Tq0R_{q1} = (M_q^u{}^2/(X_q - X'_q))/T'_{q0}
  • Subtransient only (XSQ/TSQ0): same with Xq,Tq0X''_q, T''_{q0}, result assigned to Lq2,Rq2L_{\ell q2}, R_{q2}

Field base scaling

puf=Rf/IBRATIOp_{uf} = R_f \,/\, \text{IBRATIO}

The field current is then reconstructed internally as if=(ψfψad)(Rf/puf)/Lfi_f = (\psi_f - \psi_{ad}) \cdot (R_f/p_{uf}) / L_{\ell f}.


A standalone Python port of the XT branch is available at Sync_mach_Octave (Octave) and as ramses_xt_to_park.py (attached below). It reproduces the algorithm above including the tbt_b normalisation, the quadratic solve, the symmetric q axis, and puf = RF/IBRATIO. Pass None for any rotor circuit the machine does not have.

from ramses_xt_to_park import ramses_xt_to_park
p = ramses_xt_to_park(
fnom=50.0, ibratio=1.0,
ll=0.15, ra=0.003,
xd=1.81, xpd=0.30, xsd=0.23, tpd0=8.0, tsd0=0.03,
xq=1.76, xpq=0.65, xsq=0.25, tpq0=1.0, tsq0=0.07)
# → llf=0.169902, lld1=0.166338, rf=0.000741, rd1=0.033390, ...

Inputs (both cases, 50 Hz, IBRATIO = 1): L=0.15L_\ell = 0.15, Ra=0.003R_a = 0.003, Xd=1.81X_d = 1.81, Xd=0.30X'_d = 0.30, Xd=0.23X''_d = 0.23, Td0=8.0T'_{d0} = 8.0 s, Td0=0.03T''_{d0} = 0.03 s, Xq=1.76X_q = 1.76, Xq=0.65X'_q = 0.65, Tq0=1.0T'_{q0} = 1.0 s. The round-rotor case adds Xq=0.25X''_q = 0.25, Tq0=0.07T''_{q0} = 0.07 s.

ParameterRound rotor (d2/q2)Single q-damper (d2/q1)
MduM_d^u1.6600001.660000
LfL_{\ell f}0.1699020.169902
Ld1L_{\ell d1}0.1663380.166338
MquM_q^u1.6100001.610000
Lq1L_{\ell q1}0.9281530.725225
Lq2L_{\ell q2}0.120461n/a
RfR_f0.0007410.000741
Rd1R_{d1}0.0333900.033390
Rq1R_{q1}0.0092360.007433
Rq2R_{q2}0.028210n/a
pufp_{uf}0.0007410.000741

When cross-checking STEPSS (RMS/phasor) against an EMT tool such as Typhoon HIL:

  1. Per unit vs physical units. STEPSS stays entirely in per unit. Converting to Henry/Ohm for the EMT tool requires a consistent per-unit base on the rotor side; use the same IBRATIO assumption on both sides.
  2. Radians vs seconds. The tbt_b normalisation is internal to STEPSS. Your hand calculation must divide every time constant by tb=1/(2πfnom)t_b = 1/(2\pi f_{nom}) before computing resistances.
  3. Expected post-fault difference. STEPSS uses the phasor approximation and neglects stator transformer voltages (dψd/dtd\psi_d/dt, dψq/dtd\psi_q/dt), so it omits the DC-offset and high-frequency current components immediately after a short circuit. An EMT model retains them. Compare the slow post-fault envelopes first: envelope agreement with first-cycle differences indicates a modelling assumption, not a parameter error.