geopulse.devices.transformer

Transformer thermal response — Mate et al. (2021) top-oil + hot-spot model.

Bilinear-discretised top-oil temperature dynamics + effective-GIC-driven hot-spot rise, applied per-transformer. The relations follow Mate, Overbye, Weiss & Trakas (2021) Sec. II-D, eqns 5–9:

\[\begin{split}\delta_u^t &= \delta_r\, k(t)^2 \quad (5) \\ \tau_e \frac{d\delta_e}{dt} + \delta_e &= \delta_u \quad (6) \\ \zeta &= 2\tau_e / \Delta \\ \delta_e^t &= \frac{\delta_u^t + \delta_u^{t-1}}{1 + \zeta} - \frac{1 - \zeta}{1 + \zeta}\, \delta_e^{t-1} \quad (7,\ \mathrm{Tustin}) \\ \rho_h^t &= \rho + \delta_e^t + \eta_e^t \quad (8) \\ \eta_e^t &= R_e\,|I_e^t| \quad (9)\end{split}\]

with

  • ρ — ambient temperature (°C)

  • δ_r — top-oil rise at rated load (°C)

  • τ_e — top-oil thermal time constant (min)

  • k(t) — fractional apparent-power loading (0..1+)

  • δ_e^t — dynamic top-oil rise above ambient (°C)

  • |I_e| — effective GIC magnitude through the winding (A)

  • R_e — hot-spot rise coefficient (°C / A)

The Tustin discretisation of eqn 6 is unconditionally stable and gives eqn 7 exactly.

References

Classes

ThermalParams([ambient_C, to_rated_rise_C, ...])

Transformer thermal parameters (Mate 2021 Table IV).

TransformerModel([params, k_load])

Bilinear top-oil + hot-spot temperature model for a power transformer.

class geopulse.devices.transformer.TransformerModel(params=None, k_load=0.63)[source]

Bases: DeviceModel

Bilinear top-oil + hot-spot temperature model for a power transformer.

Parameters:
  • params (ThermalParams | None) – Thermal parameters. Defaults to ThermalParams factory defaults (Mate 2021 Table IV row 1).

  • k_load (float | ndarray) – Fractional apparent-power loading k(t) (0..1+). Scalar means constant loading; array must match time_s length passed to inject_gic(). Default: 0.63 — the value Mate 2021 uses to reproduce Fig 5’s ~55 °C peak top-oil at 25 °C ambient.

Examples

>>> import numpy as np
>>> from geopulse.devices.transformer import TransformerModel
>>> t_s = np.arange(0.0, 3600.0, 60.0)
>>> gic_A = 20.0 * np.sin(2 * np.pi * t_s / 3600.0)
>>> resp = TransformerModel().inject_gic(t_s, gic_A)
>>> resp.hotspot_C.shape == t_s.shape
True
inject_gic(time_s, gic_A, ac_voltage_V=0.0, ac_frequency_Hz=50.0)[source]

Compute the thermal response for a GIC waveform.

Parameters:
  • time_s (ndarray) – Uniformly-sampled time array in seconds. Shape (n_times,).

  • gic_A (ndarray) – GIC through the transformer winding in Amperes. Shape (n_times,). Only |gic_A| enters the hot-spot rise, so sign is irrelevant.

  • ac_voltage_V (float) – Accepted for ABC symmetry — the pure thermal response does not depend on either.

  • ac_frequency_Hz (float) – Accepted for ABC symmetry — the pure thermal response does not depend on either.

Return type:

DeviceResponse

Returns:

DeviceResponsetime_s, response_current_A = |gic_A|, top_oil_C, hotspot_C. thd is NaN (harmonic content lives in a separate device model); harmonics is empty.

Raises:

DataError – If time_s is not uniformly sampled or shapes don’t match.

Notes

The time step Δ used for the Tustin update is the median of diff(time_s) converted to minutes to match the thermal time-constant units. Non-uniform time series are rejected.

class geopulse.devices.transformer.ThermalParams(ambient_C=25.0, to_rated_rise_C=75.0, to_time_constant_min=71.0, hs_coeff_C_per_A=0.63, hs_avg_limit_C=240.0, hs_inst_limit_C=280.0)[source]

Bases: object

Transformer thermal parameters (Mate 2021 Table IV).

Defaults are the “row 1” values from that table (single-phase GSU), which reproduce the paper’s Fig 5 hot-spot curves.

Parameters:
ambient_C

Ambient temperature ρ in °C. Default: 25.

Type:

float

to_rated_rise_C

Top-oil rise at rated load δ_r in °C. Default: 75.

Type:

float

to_time_constant_min

Top-oil thermal time constant τ_e in minutes. Default: 71.

Type:

float

hs_coeff_C_per_A

Hot-spot rise coefficient R_e in °C/A. Default: 0.63.

Type:

float

hs_avg_limit_C

8-hour hot-spot average limit in °C. Default: 240.

Type:

float

hs_inst_limit_C

1-hour hot-spot instantaneous limit in °C. Default: 280.

Type:

float

ambient_C: float = 25.0
to_rated_rise_C: float = 75.0
to_time_constant_min: float = 71.0
hs_coeff_C_per_A: float = 0.63
hs_avg_limit_C: float = 240.0
hs_inst_limit_C: float = 280.0