"""Список режимов линейной катушки.

Среда: встроенный MicroPython FEMM 5.
Аналитический учебный пример; полевой решатель не вызывается.
Параметры, единицы величин и порядок вывода пояснены по стадиям.
"""

# Исходные данные: индуктивность в генри; токи в амперах.
# Линейная модель предполагает постоянную индуктивность и отсутствие магнитов.
parameters = {"inductance_h": 0.12}
currents_a = [0.0, 2.0, 4.0]


# Функция возвращает потокосцепление, Вб, и энергию магнитного поля, Дж.
def coil_state(current_a):
    inductance_h = parameters["inductance_h"]
    if inductance_h < 0:
        raise ValueError("Индуктивность должна быть неотрицательной")
    # Потокосцепление равно L·I, энергия равна L·I²/2.
    # При нулевом токе деление на ток не выполняется.
    return inductance_h * current_a, 0.5 * inductance_h * current_a**2


# Перебираем все заданные режимы; исходные параметры между режимами не меняются.
for current_a in currents_a:
    linkage_wb, energy_j = coil_state(current_a)
    # Порядок вывода: ток, А; потокосцепление, Вб; энергия, Дж.
    print(current_a, linkage_wb, energy_j)
