"""Нормировка гармоник и потери меди при заданных Rac(f).

Среда: встроенный Python FEMM 5. Все входы в СИ, выход — JSON.
Rac задано как учебное число: поле, сталь и температура здесь не вычисляются.
"""
import math
import json

I_dc_A, R_dc_ohm = 2.0, 0.2
# Каждая строка: частота Гц, амплитуда тока А, Rac Ом.
harmonics = [(1000.0, 1.0, 0.3), (3000.0, 0.3, 0.8)]
I_rms_squared = I_dc_A * I_dc_A
P_copper_W = R_dc_ohm * I_dc_A * I_dc_A
records = []
for frequency_Hz, peak_A, R_ac_ohm in harmonics:
    rms_A = peak_A / math.sqrt(2)
    power_W = R_ac_ohm * rms_A * rms_A
    I_rms_squared += rms_A * rms_A
    P_copper_W += power_W
    records.append({"frequency_Hz": frequency_Hz, "peak_A": peak_A,
                    "rms_A": rms_A, "R_ac_ohm": R_ac_ohm,
                    "P_copper_W": power_W})

# Глубина проникновения относится к однородной немагнитной меди.
mu0, sigma_S_m = 4 * math.pi * 1e-7, 58e6
delta_m = math.sqrt(2 / (2 * math.pi * 1000 * mu0 * sigma_S_m))
assert abs(P_copper_W - 0.986) < 1e-12
assert abs(I_rms_squared - 4.545) < 1e-12
print(json.dumps({"origin": "author_analytical_reference_not_FEMM",
                  "I_rms_A": math.sqrt(I_rms_squared),
                  "P_copper_W": P_copper_W,
                  "P_using_Rdc_only_W": R_dc_ohm * I_rms_squared,
                  "delta_copper_1kHz_m": delta_m,
                  "harmonics": records}))
