FEMM 5

Электрическое поле тока · Плоскопараллельная

Распределение тока в проводнике переменного сечения

Проводник с боковым прямоугольным вырезом связывает привычное правило сопротивления участка с двумерным перераспределением тока. В узком месте средняя плотность тока возрастает, но переход к этому месту создаёт дополнительную неоднородность. По этой причине сумма сопротивлений трёх прямоугольных участков даёт полезную оценку снизу, однако не заменяет решение поля. Пример подходит для обсуждения шин, токоподводов и геометрических концентраторов.

Выбрана внешняя область 121 × 293 мм и боковой вырез 71 × 50 мм. Нижняя и верхняя границы выреза находятся на высоте 123 и 173 мм. Небольшое смещение выреза относительно середины намеренно сохранено, чтобы не полагаться на избыточное условие симметрии. Глубина 1 м служит явной нормировкой: расчёт описывает сопротивление и мощность метровой полосы, а не неуказанную толщину реального изделия.

Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.

Допущения и устройство учебной модели

Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.

Физическая и математическая постановка

Уравнение проводимости и нормировка по глубине

Удельное сопротивление в данном примере необычно велико для металлической шины: 0.0097784 Ом м. Оно сохранено как учебный параметр источника. Электропроводность равна обратной величине. Напряжение 10 В задано на верхнем торце, нижний торец имеет нулевой потенциал; боковые стенки и стенки выреза не выпускают ток.

Программа принимает глубину 1 м и прямо сообщает этот выбор. Ток и мощность относятся к этой глубине. Для другой постоянной глубины ток и мощность пропорциональны глубине, а сопротивление обратно пропорционально ей. Распределение потенциала и плотность тока от этой нормировки не меняются. Перед переносом вывода на изделие следует подставить его фактическую толщину.

\gamma=1/\rho,\quad \nabla\!\cdot(\gamma\nabla U)=0,\quad R=\Delta U/I

Интегральная проверка и локальное поле

Для контрольной оценки представьте каждый горизонтальный слой отдельным прямоугольным сопротивлением с равномерным током. Суммарная высота широких участков составляет 243 мм, высота узкого — 50 мм, ширина узкого участка — 50 мм. Получается нижняя энергетическая граница сопротивления. Двумерное растекание увеличивает потери и сопротивление относительно этой идеализированной оценки.

Три сетки с ограничениями 8, 4 и 2 мм проверяют устойчивость сопротивления и плотности тока в точке (96,148) мм. Точка находится внутри шейки и удалена от входящих углов. Допуск по сопротивлению равен 0.5 процента, по этой локальной плотности — 1 процент. На каждой сетке дополнительно проверяются баланс токов и равенство мощности джоулевых потерь и мощности источника питания. Максимум в идеальном углу не используется как критерий приёмки.

R\ge\frac{\rho}{d}\left(\frac{0.243}{0.121}+\frac{0.050}{0.050}\right)

Исходные данные

Прямоугольник 121 × 293 мм с боковым вырезом 71 × 50 мм; вырез 123 ≤ y ≤ 173 мм; глубина 1 м.

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Габарит121 × 293ммЗаданный параметр учебной модели
Вырез71 × 50ммЗаданный параметр учебной модели
Границы выреза y123; 173ммЗаданный параметр учебной модели
Удельное сопротивление0,009778Ом мЗаданный параметр учебной модели
Напряжение10ВЗаданный параметр учебной модели
Глубина1мЗаданный параметр учебной модели

Порядок воспроизведения

  1. Создайте отдельную рабочую папку и поместите в неё reproduce.py. Откройте программу во встроенном редакторе Python FEMM 5. Команды ci_, co_, hi_* и ho_* уже доступны в этой среде; внешний пакет pyFEMM здесь не требуется. Запустите файл целиком. Программа сама создаст новую папку calculated-XX, поэтому повторный опыт не уничтожит предыдущую серию.
  2. Проследите три последовательных построения. Перед каждым решением программа записывает самостоятельную модель, закрывает документ и повторно открывает этот файл. Такое действие проверяет сохранение геометрии, свойств и русских имён. Для каждой сетки остаются входная модель, расчётное решение и запись численных показателей. Откройте окончательную модель вручную, чтобы сопоставить контуры, материалы и граничные условия с таблицей параметров.
  3. Откройте result.json из новой папки. records содержит результаты каждой сетки, checks — проверяемую величину, допустимое значение и логический итог. Переходите к обсуждению физики после выполнения всех проверок. Само уменьшение невязки линейного решателя ещё не доказывает достаточность сетки: отдельно сравниваются интегральные характеристики двух последних дискретизаций.
  4. Изменяйте один физический параметр за опыт и сохраняйте отдельную серию. Сравнивайте результаты при одинаковой длине, глубине и температурном соглашении. В отчёте приведите постановку, таблицу трёх сеток, результат независимой проверки и объяснение оставшегося расхождения.

Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.

Программа встроенного Python FEMM 5
Python · reproduce.py
"""Постоянный ток в проводнике с боковым вырезом.
Среда: встроенный MicroPython FEMM 5; команды FEMM доступны как глобальные функции.
Модель создаётся заново, сохраняется, закрывается и повторно открывается до расчёта.
Размеры геометрии заданы в миллиметрах; интегральные результаты имеют единицы СИ.
Каждый запуск создаёт новый calculated-XX рядом с программой и не меняет прежние
модели, результаты и квитанции. Все входные параметры заданы непосредственно в программе.
Область применимости и принятые допущения описаны в README.md.
"""

import os
import sys
import math
import json

script = globals().get("__file__", "") or (sys.argv[0] if sys.argv else "")
base = os.path.dirname(os.path.abspath(script)) if script else os.getcwd()
index = 1
while "calculated-%02d" % index in os.listdir(base):
    index += 1
directory = base + "/calculated-%02d" % index
os.mkdir(directory)
records = []
checks = []


def real(value):
    if isinstance(value, (list, tuple)):
        return real(value[0])
    return complex(value).real


def check(name, value, limit):
    checks.append(
        {
            "name": name,
            "value": value,
            "limit": limit,
            "passed": math.isfinite(value) and value <= limit,
        }
    )


MESHES = (8, 4, 2)
DEPTH_MM = 1000
MATERIAL = "Проводник переменного сечения"
SIGMA = 1 / 0.0097784
VOLTAGE = 10
LABEL_X = 100
LABEL_Y = 146


def polygon(points):
    for x, y in points:
        ci_addnode(x, y)
    for number, (x, y) in enumerate(points):
        x2, y2 = points[(number + 1) % len(points)]
        ci_addsegment(x, y, x2, y2)


def terminal(x, y, name, mesh):
    ci_selectsegment(x, y)
    ci_setsegmentprop("<None>", mesh, 0, 0, 0, name)
    ci_clearselected()


def circle(radius, conductor, angle):
    ci_addnode(-radius, 0)
    ci_addnode(radius, 0)
    ci_addarc(-radius, 0, radius, 0, 180, angle)
    ci_addarc(radius, 0, -radius, 0, 180, angle)
    ci_selectarcsegment(0, radius)
    ci_selectarcsegment(0, -radius)
    ci_setarcsegmentprop(angle, "<None>", 0, 0, conductor)
    ci_clearselected()


for level, mesh in enumerate(MESHES):
    newdocument(3)
    ci_probdef("millimeters", "planar", 0, 1e-10, DEPTH_MM, 30)
    ci_addmaterial(MATERIAL, SIGMA, SIGMA, 1, 1, 0, 0)
    ci_addconductorprop("Входной электрод", VOLTAGE, 0, 1)
    ci_addconductorprop("Выходной электрод", 0, 0, 1)
    polygon(
        [
            (0, 0),
            (121, 0),
            (121, 293),
            (0, 293),
            (0, 173),
            (71, 173),
            (71, 123),
            (0, 123),
        ]
    )
    terminal(60, 293, "Входной электрод", mesh)
    terminal(60, 0, "Выходной электрод", mesh)
    ci_addblocklabel(LABEL_X, LABEL_Y)
    ci_selectlabel(LABEL_X, LABEL_Y)
    ci_setblockprop(MATERIAL, 0, mesh, 1)
    ci_clearselected()
    model = directory + "/model-%02d.fec" % (level + 1)
    ci_saveas(model)
    ci_close()
    # Проверяется именно записанная версия с кириллическими именами.
    opendocument(model)
    ci_analyze(1)
    ci_loadsolution()
    co_smooth("off")
    potential_in, current_in = co_getconductorproperties("Входной электрод")
    potential_out, current_out = co_getconductorproperties("Выходной электрод")
    current = abs(complex(current_in))
    co_groupselectblock(1)
    power = real(co_blockintegral(0))
    co_clearblock()
    balance = abs(complex(current_in) + complex(current_out)) / current
    power_error = abs(power - VOLTAGE * current) / (VOLTAGE * current)
    row = {
        "mesh_mm": mesh,
        "model": "model-%02d.fec" % (level + 1),
        "nodes": co_numnodes(),
        "elements": co_numelements(),
        "I_A": current,
        "R_ohm": VOLTAGE / current,
        "P_W": power,
        "current_balance_relative": balance,
        "power_balance_relative": power_error,
    }
    values = co_getpointvalues(96, 148)
    row["J_neck_A_m2"] = math.sqrt(
        abs(complex(values[1])) ** 2 + abs(complex(values[2])) ** 2
    )
    records.append(row)
    check("Баланс токов, сетка %d" % (level + 1), balance, 1e-6)
    check("Баланс мощности, сетка %d" % (level + 1), power_error, 1e-6)
    co_close()
    ci_close()
check(
    "Сходимость сопротивления",
    abs(records[-1]["R_ohm"] / records[-2]["R_ohm"] - 1),
    0.005,
)
check(
    "Сходимость плотности тока вдали от входящего угла",
    abs(records[-1]["J_neck_A_m2"] / records[-2]["J_neck_A_m2"] - 1),
    0.01,
)
# Нижняя граница следует из одномерной цепи с равномерным током в каждом сечении.
lower = 0.0097784 * (0.243 / 0.121 + 0.050 / 0.050)
check(
    "Вариационная нижняя граница сопротивления",
    max(0, lower / records[-1]["R_ohm"] - 1),
    1e-6,
)

result = {
    "runtime": "FEMM 5.0; embedded MicroPython",
    "records": records,
    "checks": checks,
    "passed": all(item["passed"] for item in checks),
}
with open(directory + "/result.json", "w") as output:
    json.dump(result, output)
print(json.dumps(result))
assert result["passed"]

Картина рассчитанного поля

Потенциал, В: model-03.anc
Визуализация сохранённого решения FEMM 5 model-03.anc. Электрический потенциал по сохранённым узловым значениям. Показана расчётная область. Контуры деталей взяты из той же модели. Области вне сохранённых треугольников не заполняются. Это научный график сохранённых данных. Нажмите на карту, чтобы открыть её отдельно и увеличить.

Окна FEMM 5

Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.

Рабочая область модели «Распределение тока в проводнике переменного сечения». Нативный препроцессор FEMM 5.
Рабочая область модели «Распределение тока в проводнике переменного сечения». Нативный препроцессор FEMM 5. Открыть в полном размере
Сохранённое решение «Распределение тока в проводнике переменного сечения». Модуль потенциала |V|, В, и эквипотенциали проводника переменного сечения при постоянном токе.
Сохранённое решение «Распределение тока в проводнике переменного сечения». Модуль потенциала |V|, В, и эквипотенциали проводника переменного сечения при постоянном токе. Открыть в полном размере

Результаты и численные проверки

Сохранено решений FEMM: 3. Выполнено проверок: 9. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.

Результаты расчётов и производные итоги
Ток, АМасштаб сетки, ммУзловМощность, ВтЭлементовПлотность тока в сужении, А/м²Относительная невязка токаСопротивление, ОмОтносительная невязка мощностиМодель
275,85236831262758,523659525498,98473,8874189 × 10⁻⁹0,0362512764,1378038 × 10⁻⁹model-01.fec
275,85256431682758,525660245498,98932,9615226 × 10⁻⁹0,0362512494,0673524 × 10⁻⁹model-02.fec
275,71929296642757,1929187825448,9948178,90529 × 10⁻¹²0,0362687722,1286849 × 10⁻⁹model-03.fec
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Баланс токов, сетка 13,887 × 10⁻⁹1e-06Выполнен
Баланс мощности, сетка 14,138 × 10⁻⁹1e-06Выполнен
Баланс токов, сетка 22,962 × 10⁻⁹1e-06Выполнен
Баланс мощности, сетка 24,067 × 10⁻⁹1e-06Выполнен
Баланс токов, сетка 3178,9 × 10⁻¹²1e-06Выполнен
Баланс мощности, сетка 32,129 × 10⁻⁹1e-06Выполнен
Сходимость сопротивления483,4 × 10⁻⁶0,005Выполнен
Сходимость плотности тока вдали от входящего угла0,0090920,01Выполнен
Вариационная нижняя граница сопротивления01e-06Выполнен

Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.

Модели, решения и программа

Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.

Полные численные результаты

Границы применимости