FEMM 5

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

Ток утечки коаксиальной линии

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

Круглое поперечное сечение выглядит осесимметричным, но в FEMM следует выбрать именно плоскую постановку. Ось кабеля направлена перпендикулярно рисунку, а глубина задаёт действительную длину 10 км. Осесимметричная постановка вокруг оси на самом рисунке описывала бы другую пространственную геометрию. Этот пример особенно полезен для проверки правильного выбора типа задачи и единиц глубины.

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

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

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

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

Независимое аналитическое решение

Через любую коаксиальную цилиндрическую поверхность проходит один и тот же суммарный ток. Поэтому плотность тока обратно пропорциональна радиусу. Радиальная напряжённость получается делением плотности тока на проводимость; интегрирование между радиусами даёт логарифм отношения радиусов. Толщина изоляции сама по себе недостаточна для плоской формулы R=ρl/S, потому что площадь поверхности меняется вдоль пути тока.

В формуле можно использовать либо диаметры D и d, либо соответствующие радиусы: отношение одинаково. Проводимость задаётся в См/м, длина — в метрах. Число 1.4 нСм/м переводится в 1.4·10⁻⁹ См/м. Перепутанная приставка или введённая в миллиметрах длина без учёта единиц изменяет ответ на многие порядки.

R=\frac{\ln(D/d)}{2\pi L\gamma},\quad I=\frac{U}{R},\quad J_r=\frac{I}{2\pi rL}

Граница электродов и проверка

Металлические электроды заменены эквипотенциальными окружностями. Внутри малого круга область помечена как не подлежащая разбиению: электрическое поле в металле для этой задачи не требуется. В кольце действует единственный материал с изотропной проводимостью. Имена материала и обоих проводников русские и проходят проверку сохранения и повторного открытия.

На трёх уровнях уменьшаются и размер элементов 0.4, 0.2, 0.1 мм, и максимальный угол отрезка дуги 4, 2, 1 градус. Это важно: только уменьшение площади треугольников внутри кольца не устраняет погрешность многоугольного приближения окружности. Окончательное сопротивление должно отличаться от формулы меньше чем на 0.1 процента, а от предыдущей сетки — меньше чем на 0.5 процента. Балансы тока и мощности дают дополнительные проверки знаков и нормировки.

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

Кольцо изоляции с радиусами 2 и 5 мм; плоское поперечное сечение; глубина модели 10 км.

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Внутренний диаметр4ммЗаданный параметр учебной модели
Наружный диаметр10ммЗаданный параметр учебной модели
Проводимость изоляции1,4 × 10⁻⁹См/мЗаданный параметр учебной модели
Длина10000мЗаданный параметр учебной модели
Контрольное напряжение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 = (0.4, 0.2, 0.1)
DEPTH_MM = 10e6
MATERIAL = "Слабопроводящая изоляция"
SIGMA = 1.4e-9
VOLTAGE = 1
LABEL_X = 3
LABEL_Y = 0


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)
    circle(2, "Входной электрод", 4 / (2**level))
    circle(5, "Выходной электрод", 4 / (2**level))
    ci_addblocklabel(0, 0)
    ci_selectlabel(0, 0)
    ci_setblockprop("<No Mesh>", 0, mesh, 0)
    ci_clearselected()
    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 = math.log(5 / 2) / (2 * math.pi * 10000 * SIGMA)
check(
    "Логарифмическая формула сопротивления изоляции",
    abs(records[-1]["R_ohm"] / reference - 1),
    0.001,
)

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.

Результаты расчётов и производные итоги
Относительная невязка токаСопротивление, ОмОтносительная невязка мощностиМодельУзловТок, АМощность, ВтМасштаб сетки, ммЭлементов
554,27376 × 10⁻¹²10410,226598,96677 × 10⁻¹²model-01.fec318896,059398 × 10⁻⁶96,059398 × 10⁻⁶0,46091
337,37424 × 10⁻¹²10410,839623,44292 × 10⁻¹²model-02.fec335296,053739 × 10⁻⁶96,053739 × 10⁻⁶0,26344
1,0434576 × 10⁻⁹10414,292779,92668 × 10⁻¹²model-03.fec848796,021887 × 10⁻⁶96,021887 × 10⁻⁶0,116254
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Баланс токов, сетка 1554,3 × 10⁻¹²1e-06Выполнен
Баланс мощности, сетка 1599 × 10⁻¹²1e-06Выполнен
Баланс токов, сетка 2337,4 × 10⁻¹²1e-06Выполнен
Баланс мощности, сетка 2623,4 × 10⁻¹²1e-06Выполнен
Баланс токов, сетка 31,043 × 10⁻⁹1e-06Выполнен
Баланс мощности, сетка 3779,9 × 10⁻¹²1e-06Выполнен
Сходимость сопротивления331,7 × 10⁻⁶0,005Выполнен
Логарифмическая формула сопротивления изоляции220,2 × 10⁻⁶0,001Выполнен

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

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

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

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

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