FEMM 5

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

Электрическое сопротивление тонкой пластины

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

Принята полоса высотой h=6 мм, свободным участком g=20 мм и толщиной 1 мм. Полная длина равна h+g, а g обозначает расстояние от конца нижнего электрода до правой стороны. Это определение следует использовать и в геометрии, и в контрольной формуле. Основной результат — интегральное сопротивление пластины; особенности поля около конца электрода рассматриваются отдельно.

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

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

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

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

Растекание и сопротивление

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

Добавка 0.469 к числу квадратов учитывает область растекания и используется как независимый приближённый ориентир. Запись с тремя десятичными знаками не является точным решением произвольной конечной пластины. Допуск 0.5 процента учитывает округление поправки и остаточное влияние дискретизации.

R=\frac{g/h+0.469}{\gamma d},\qquad R_{\mathrm{FEM}}=\frac{\Delta U}{I}

Что проверять на сетке

Программа строит три сетки с ограничениями размера 0.6, 0.3 и 0.15 мм. На каждой проверяются равенство входного и выходного тока и совпадение объёмной джоулевой мощности с мощностью на выводах. Разность сопротивлений двух последних сеток должна быть меньше 0.5 процента. Наличие большого числа элементов около контакта объясняется работой генератора сетки и геометрической особенностью границы.

Сравнивайте ток или сопротивление, а не максимальную плотность тока в точке переключения граничных условий. В идеализированном остром конце контакта локальное поле чувствительно к сгущению сетки. Для оценки нагрева реального соединения потребуются радиус скругления и сопротивление контакта; таких данных исходный пример не задаёт.

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

Прямоугольник 26 × 6 мм; нижний контакт 0 ≤ x ≤ 6 мм; правый контакт x=26 мм; глубина 1 мм.

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
h6ммЗаданный параметр учебной модели
g20ммЗаданный параметр учебной модели
Толщина d1ммЗаданный параметр учебной модели
Электропроводность стали10000000См/мЗаданный параметр учебной модели
Разность потенциалов0,02ВЗаданный параметр учебной модели

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

  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 = (0.6, 0.3, 0.15)
DEPTH_MM = 1
MATERIAL = "Сталь пластины"
SIGMA = 10e6
VOLTAGE = 0.02
LABEL_X = 13
LABEL_Y = 3


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), (6, 0), (26, 0), (26, 6), (0, 6)])
    terminal(3, 0, "Входной электрод", mesh)
    terminal(26, 3, "Выходной электрод", 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,
    }

    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,
)
reference = (20 / 6 + 0.469) / (10e6 * 0.001)
check(
    "Аналитическое сопротивление с округлённой поправкой 0.469",
    abs(records[-1]["R_ohm"] / reference - 1),
    0.005,
)

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. Выполнено проверок: 8. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.

Результаты расчётов и производные итоги
Относительная невязка токаСопротивление, ОмОтносительная невязка мощностиМодельУзловТок, АМощность, ВтМасштаб сетки, ммЭлементов
690,00938 × 10⁻¹²379,44443 × 10⁻⁶22,457583 × 10⁻¹²model-01.fec215952,7086411,05417280,64088
797,78529 × 10⁻¹²379,45183 × 10⁻⁶364,94964 × 10⁻¹²model-02.fec221552,7076131,05415230,34185
1,9612142 × 10⁻⁹379,60824 × 10⁻⁶2,6189231 × 10⁻⁹model-03.fec837752,6858951,05371790,1516268
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Баланс токов, сетка 1690 × 10⁻¹²1e-06Выполнен
Баланс мощности, сетка 122,46 × 10⁻¹²1e-06Выполнен
Баланс токов, сетка 2797,8 × 10⁻¹²1e-06Выполнен
Баланс мощности, сетка 2364,9 × 10⁻¹²1e-06Выполнен
Баланс токов, сетка 31,961 × 10⁻⁹1e-06Выполнен
Баланс мощности, сетка 32,619 × 10⁻⁹1e-06Выполнен
Сходимость сопротивления412,2 × 10⁻⁶0,005Выполнен
Аналитическое сопротивление с округлённой поправкой 0.4690,0016440,005Выполнен

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

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

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

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

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