"""Одномерная аналитическая цепь: зазор, индуктивность и энергия.

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

# Суммарная длина последовательных зазоров задаётся отдельно от пути стали.
MU0 = 4 * math.pi * 1e-7
turns, area_m2, core_path_m, mu_r, current_A = 100, 400e-6, 0.22, 1000.0, 1.0
records = []
for gap_m in (0.00025, 0.0005, 0.001, 0.002):
    reluctance = (core_path_m / mu_r + gap_m) / (MU0 * area_m2)
    L_H = turns * turns / reluctance
    B_T = turns * current_A / reluctance / area_m2
    W_J = 0.5 * L_H * current_A * current_A
    W_gap_J = B_T * B_T * area_m2 * gap_m / (2 * MU0)
    records.append({"gap_m": gap_m, "L_H": L_H, "B_T": B_T,
                    "W_J": W_J, "W_gap_J": W_gap_J,
                    "gap_energy_fraction": W_gap_J / W_J})

# Проверяем аналитический масштаб и знак зависимости при постоянном токе.
assert abs(records[1]["L_H"] - 0.006981317007977319) < 1e-12
assert all(records[n+1]["L_H"] < records[n]["L_H"] for n in range(3))
print(json.dumps({"origin": "author_analytical_reference_not_FEMM",
                  "records": records}))
