thermal_cable_model.thermal_network — Thermal Network

IEC 60287 / IEC 60853 thermal resistance and capacitance network.

Builds a lumped-parameter thermal circuit for each cable, including the cable-internal resistances T1–T3 and the external (soil) resistance T4. Mutual heating between parallel cables is computed via the image method.

class InternalThermalResistances[source]

Bases: object

Per-unit-length thermal resistances of the cable layers [K·m/W].

T1: float
T2: float
T3: float
classmethod from_cable(cable)[source]

Compute T1–T3 by summing layer thermal resistances.

The first insulation layer is T1, intermediate layers form T2, and the outermost jacket is T3. This mapping follows IEC 60287-2-1 conventions for typical cable constructions.

Parameters:

cable (Cable)

Return type:

InternalThermalResistances

__init__(T1, T2, T3)
Parameters:
Return type:

None

class InternalThermalCapacitances[source]

Bases: object

Per-unit-length thermal capacitances [J/(m·K)].

Q_conductor: float
Q_insulation: float
Q_sheath: float
Q_bedding: float
Q_jacket: float
classmethod from_cable(cable)[source]
Parameters:

cable (Cable)

Return type:

InternalThermalCapacitances

__init__(Q_conductor, Q_insulation, Q_sheath, Q_bedding, Q_jacket)
Parameters:
Return type:

None

external_thermal_resistance(depth, cable_outer_radius, soil)[source]

T4 for a single isolated cable buried at depth [m].

IEC 60287-2-1 §2.2.7:

T4 = (ρ_soil / 2π) · ln(2L / D_e)

where L = burial depth to cable centre, D_e = external diameter.

Parameters:
Return type:

float

mutual_heating_resistance(xi, yi, xj, yj, soil)[source]

Temperature rise at cable i due to unit heat from cable j.

Uses the image method for a semi-infinite conducting half-space with isothermal surface (ground level at y = 0, cables at y < 0 i.e. depth is positive downward so yi, yj > 0).

Returns ΔT4_ij = ρ_soil/(2π) · ln(d’_ij / d_ij)

d_ij = real distance between cables i and j d’_ij = distance from cable i to the image of cable j

Parameters:
Return type:

float

cylindrical_shell_thermal_resistance(thermal_resistivity, inner_radius, outer_radius)[source]

Radial thermal resistance [K·m/W] of a homogeneous cylindrical shell.

Same physics as thermal_cable_model.cable.CableLayer with constant ρ_th (IEC 60287-2-1 §4.1 cylindrical layer).

Parameters:
Return type:

float

cylindrical_shell_thermal_resistance_diameters(thermal_resistivity, inner_diameter, outer_diameter)[source]

Thermal resistance [K·m/W] from ρ/(2π)·ln(D_out/D_in).

inner_diameter and outer_diameter may be in any consistent unit.

Parameters:
  • thermal_resistivity (float)

  • inner_diameter (float)

  • outer_diameter (float)

Return type:

float

plastic_duct_air_gap_thermal_resistance(cable_outer_diameter_mm, theta_max_celsius, u_constant=1.87, v_constant=0.312, y_constant=0.0037)[source]

Thermal resistance of the air space between cable and plastic duct [K·m/W].

IEC 60287-2-1 Table 4 (plastic duct), as implemented in CIGRE TB880 case 2 (touching trefoil in HDPE ducts).

Parameters:
Return type:

float

external_buried_duct_thermal_resistance_tb880_form(burial_depth_to_axis, duct_outer_diameter, soil_thermal_resistivity)[source]

External thermal resistance of a buried duct [K·m/W], TB880 notebook form.

Uses T4‴ = ρ/(2π)·(ln(2u) + 2·ln(u)) with u = 2L/D, where L is depth to the duct axis and D is the duct outer diameter. All length inputs must share the same unit (e.g. mm or m).

This is not identical to external_thermal_resistance() for a solid cable (IEC 60287-2-1 §2.2.7 / acosh formulation).

Parameters:
  • burial_depth_to_axis (float)

  • duct_outer_diameter (float)

  • soil_thermal_resistivity (float)

Return type:

float

class CableThermalNetwork[source]

Bases: object

State-space thermal circuit for one or more parallel cables.

For N cables the state vector has N × 6 entries. The network is represented as

C · dθ/dt + G · θ = P(t)

where C is the (diagonal) capacitance matrix, G the conductance matrix, and P the forcing vector (heat sources + boundary coupling).

Nodes per cable (6-node model) ────────────────────────────── 0 : conductor θ_c 1 : insulation mid-point θ_i (Van Wormer split of T1) 2 : sheath / screen θ_sh (boundary between T1 and T2) 3 : armour θ_a (boundary between T2 and T3) 4 : cable surface θ_s (outer jacket) 5 : soil node θ_soil (near cable)

Thermal resistance chain:

θ_c ─[p·T1]─ θ_i ─[(1−p)·T1]─ θ_sh ─[T2]─ θ_a ─[T3]─ θ_s ─[T4/2]─ θ_soil ─[T4/2]─ T_amb

Coupling to ambient (ground temperature) is through T4 from node 5.

NODES_PER_CABLE = 6
__init__(cables, positions_x, depths, soil)[source]
Parameters:
forcing_vector(currents, conductor_temps, ambient_temps)[source]

Build the right-hand-side vector P.

Parameters:
  • currents (per-cable RMS current [A])

  • conductor_temps (current conductor temperatures for R(T) [°C])

  • ambient_temps (per-cable ambient ground temperature [°C])

Return type:

ndarray

steady_state(currents, ambient_temps, tol=0.01, max_iter=50)[source]

Iterative steady-state solve (resistance is temperature-dependent).

Returns the full state vector θ [°C].

Parameters:
Return type:

ndarray

get_conductor_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]

get_insulation_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]

get_sheath_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]

get_armour_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]

get_surface_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]

get_soil_temperatures(theta)[source]
Parameters:

theta (ndarray)

Return type:

list[float]