FEMM 5

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

Диэлектрические потери: действующее напряжение и комплексный ток

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

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

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

Принятые допущения и их назначение
Учебная модель FEMM 5Причина
Прямоугольная область с идеальными электродами на торцахБоковые естественные условия создают одномерный аналитический эталон без краевого поля.
Потери заданы только эквивалентной проводимостьюПроверяется одна однозначная модель диэлектрических потерь.
Напряжение на выводах равно амплитуде, а не действующему значениюФактор 1/2 в мощности согласован с фазорной нормировкой FEMM.

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

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

Потери через эквивалентную проводимость

Для линейного диэлектрика с известным tanδ активную составляющую тока можно задать эквивалентной проводимостью σ=ωε₀εᵣtanδ. Одновременно сохраняется вещественная εᵣ, создающая ток смещения. Угол потерь в материале повторно не задаётся, иначе потери будут учтены дважды.

\sigma_{\mathrm{экв}}=2\pi f\varepsilon_0\varepsilon_r\tan\delta,\quad C=\frac{\varepsilon_0\varepsilon_r A}{d}
P=U_{\mathrm{д}}^2\frac{\sigma_{\mathrm{экв}}A}{d}=2\pi f C U_{\mathrm{д}}^2\tan\delta

Амплитуда, ток и мощность

Заданные 220 В — действующее значение. В FEMM вводится амплитуда √2·220≈311,127 В. Амплитуда тока равна Ũ(σ+jωε)A/d; средняя активная мощность равна половине Re(ŨÎ*). Нормировка проверена сравнением интеграла потерь с током электрода.

Для данных размеров ожидаются C≈2,036 пФ, σ≈0,09597 мкСм/м и P≈0,4645 мВт. Объём диэлектрика составляет 100 мм³. Гармонический интеграл co_blockintegral(0) даёт средние активные потери; проверенный здесь co_blockintegral(2) даёт модуль полной мощности в ВА.

\widehat I=\widehat U\frac{A}{d}(\sigma+j\omega\varepsilon_0\varepsilon_r),\quad P=\frac12\operatorname{Re}(\widehat U\widehat I^*)

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

Плоскопараллельная

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Расстояние между электродами d1ммУсловие учебной задачи
Высота электродов10ммУсловие учебной задачи
Глубина10ммУсловие учебной задачи
Относительная проницаемость2,31Условие учебной задачи
Тангенс угла потерь0,00751Условие учебной задачи
Частота100кГцУсловие учебной задачи
Действующее напряжение220ВУсловие учебной задачи

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

  1. Изучите размеры, материалы, возбуждение и выбранную двумерную постановку. Сначала вычислите аналитический ориентир в единицах СИ.
  2. Скачайте файлы по отдельным ссылкам в отдельную рабочую папку. Откройте reproduce.py во встроенном редакторе Python FEMM 5 и выполните сохранённый файл.
  3. Программа строит русифицированные модели, сохраняет их, закрывает и открывает заново. Затем выполняет расчёт и читает свойства проводников по точному русскому имени.
  4. Сравните три уровня пространственной сетки. В таблицах сохранены число узлов и элементов, интегральные величины и независимые критерии. Дополнительные режимы указаны в постановке.
  5. Откройте самый подробный сохранённый вход и соответствующее решение. Проверьте смысл единиц, знаков и объёмного множителя; новый запуск сохранит результаты в новой папке calculated-NN.

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

Программа встроенного Python FEMM 5
Python · reproduce.py
"""Диэлектрические потери плоского конденсатора.
Среда: встроенный MicroPython FEMM 5; команды FEMM доступны глобально.
Геометрические размеры: миллиметры; поля и интегралы возвращаются в СИ.
Все материалы и проводники имеют русские имена. Каждая модель сохраняется,
закрывается и повторно открывается до нового расчёта, включая кириллицу.
Запуск создаёт новую папку calculated-NN рядом с программой; опубликованные
модели и предыдущие расчёты не перезаписываются. Все необходимые
исходные данные включены. Условия задачи и ограничения описаны в README.md.
"""
import os
import sys
import math
import json

saved = globals().get('__file__', '') or (sys.argv[0] if sys.argv else '')
base = os.path.dirname(os.path.abspath(saved)) if saved else os.getcwd()
index = 1
while os.path.exists(base + '/calculated-%02d' % index):
    index += 1
directory = base + '/calculated-%02d' % index
os.mkdir(directory)
records = []
checks = []
EPS0 = 8.85418781762e-12


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})


def label(x, y, material, mesh, group=1):
    ei_addblocklabel(x, y)
    ei_selectlabel(x, y)
    ei_setblockprop(material, 0, mesh, group)
    ei_clearselected()


def circle(x, radius, conductor, angle):
    ei_addnode(x - radius, 0)
    ei_addnode(x + radius, 0)
    ei_addarc(x - radius, 0, x + radius, 0, 180, angle)
    ei_addarc(x + radius, 0, x - radius, 0, 180, angle)
    ei_selectarcsegment(x, radius)
    ei_selectarcsegment(x, -radius)
    ei_setarcsegmentprop(angle, '<None>', 0, 0, conductor)
    ei_clearselected()


def solve(model):
    ei_saveas(model)
    ei_close()
    opendocument(model)
    ei_analyze(1)
    ei_loadsolution()
    eo_smooth('off')


def electric_result(mesh, model, input_name, output_name, exact_C):
    voltage_in, charge_in = eo_getconductorproperties(input_name)
    voltage_out, charge_out = eo_getconductorproperties(output_name)
    voltage = real(voltage_in) - real(voltage_out)
    charge = real(charge_in)
    eo_groupselectblock(1)
    energy = real(eo_blockintegral(0))
    eo_clearblock()
    capacitance = charge / voltage
    energy_C = 2 * energy / voltage ** 2
    row = {'mesh_mm': mesh, 'model': os.path.basename(model),
           'nodes': eo_numnodes(), 'elements': eo_numelements(),
           'voltage_V': voltage, 'charge_C': charge, 'energy_J': energy,
           'capacitance_F': capacitance, 'energy_capacitance_F': energy_C,
           'analytic_capacitance_F': exact_C,
           'analytic_C_relative_error': abs(capacitance / exact_C - 1),
           'energy_charge_relative_error': abs(energy_C / capacitance - 1)}
    records.append(row)
    check('Энергия и заряд: ' + os.path.basename(model),
          row['energy_charge_relative_error'], 1e-5)
    return row


U_RMS = 220
U = U_RMS * math.sqrt(2)
F = 100000
EPSR = 2.3
TAN_DELTA = 0.0075
SIGMA = 2 * math.pi * F * EPS0 * EPSR * TAN_DELTA
AREA = 10e-3 * 10e-3
DISTANCE = 1e-3
exact_C = EPS0 * EPSR * AREA / DISTANCE
exact_I = U * AREA / DISTANCE * complex(SIGMA, 2 * math.pi * F * EPS0 * EPSR)
exact_P = U_RMS ** 2 * SIGMA * AREA / DISTANCE
for level, mesh in enumerate((0.4, 0.2, 0.1)):
    newdocument(3)
    ci_probdef('millimeters', 'planar', F, 1e-10, 10, 30)
    ci_addmaterial('Диэлектрик с эквивалентной проводимостью', SIGMA, SIGMA, EPSR, EPSR, 0, 0)
    ci_addconductorprop('Электрод с амплитудой 220 корень 2 В', U, 0, 1)
    ci_addconductorprop('Заземлённый электрод', 0, 0, 1)
    points = ((0, 0), (1, 0), (1, 10), (0, 10))
    for x, y in points:
        ci_addnode(x, y)
    for k, (x, y) in enumerate(points):
        x2, y2 = points[(k + 1) % 4]
        ci_addsegment(x, y, x2, y2)
    for x, name in ((0, 'Электрод с амплитудой 220 корень 2 В'), (1, 'Заземлённый электрод')):
        ci_selectsegment(x, 5)
        ci_setsegmentprop('<None>', mesh, 0, 0, 0, name)
        ci_clearselected()
    ci_addblocklabel(0.5, 5)
    ci_selectlabel(0.5, 5)
    ci_setblockprop('Диэлектрик с эквивалентной проводимостью', 0, mesh, 1)
    ci_clearselected()
    model = directory + '/losses-%02d.fec' % (level + 1)
    ci_saveas(model)
    ci_close()
    opendocument(model)
    ci_analyze(1)
    ci_loadsolution()
    potential, current = co_getconductorproperties('Электрод с амплитудой 220 корень 2 В')
    current = complex(current)
    _, return_current = co_getconductorproperties('Заземлённый электрод')
    co_groupselectblock(1)
    power = real(co_blockintegral(0))
    apparent_power = real(co_blockintegral(2))
    co_clearblock()
    row = {'mesh_mm': mesh, 'model': os.path.basename(model), 'nodes': co_numnodes(),
           'elements': co_numelements(), 'conductivity_S_m': SIGMA,
           'capacitance_F': current.imag / (2 * math.pi * F * U),
           'I_real_A': current.real, 'I_imag_A': current.imag,
           'analytic_I_real_A': exact_I.real, 'analytic_I_imag_A': exact_I.imag,
           'losses_W': power, 'analytic_losses_W': exact_P,
           'terminal_power_W': 0.5 * U * current.real,
           'apparent_power_VA': apparent_power,
           'U_RMS_V': U_RMS, 'U_amplitude_V': U}
    records.append(row)
    check('Активные потери по объёмному интегралу', abs(power / exact_P - 1), 1e-5)
    check('Потери по средней мощности электрода', abs(0.5 * U * current.real / exact_P - 1), 1e-5)
    check('Полная мощность по объёму и току',
          abs(apparent_power / (0.5 * U * abs(current)) - 1), 1e-5)
    check('Комплексный ток диэлектрика', abs(current - exact_I) / abs(exact_I), 1e-5)
    check('Баланс комплексных токов', abs(current + complex(return_current)) / abs(current), 1e-5)
    check('Ёмкость по реактивному току', abs(row['capacitance_F'] / exact_C - 1), 1e-5)
    co_close()
    ci_close()
check('Сходимость активных потерь', abs(records[-1]['losses_W'] /
      records[-2]['losses_W'] - 1), 1e-5)

columns = {
    'mesh_mm': 'Размер сетки, мм', 'model': 'Файл модели',
    'nodes': 'Узлов', 'elements': 'Элементов',
    'voltage_V': 'Разность потенциалов, В', 'charge_C': 'Заряд, Кл',
    'energy_J': 'Энергия, Дж', 'capacitance_F': 'Ёмкость по заряду, Ф',
    'energy_capacitance_F': 'Ёмкость по энергии, Ф',
    'analytic_capacitance_F': 'Аналитическая ёмкость, Ф',
    'analytic_C_relative_error': 'Относительная ошибка ёмкости',
    'energy_charge_relative_error': 'Невязка энергии и заряда',
    'E_7p5mm_V_m': 'Поле при r=7,5 мм, В/м',
    'analytic_E_7p5mm_V_m': 'Аналитическое поле при r=7,5 мм, В/м',
    'E_150mm_V_m': 'Поле при r=150 мм, В/м',
    'analytic_E_150mm_V_m': 'Аналитическое поле при r=150 мм, В/м',
    'outer_radius_mm': 'Радиус внешней границы, мм',
    'insulation': 'Изоляция', 'analytic_Emax_kV_mm': 'Аналитический максимум поля, кВ/мм',
    'Emax_from_charge_kV_mm': 'Максимум поля по заряду, кВ/мм',
    'E_10mm_kV_mm': 'Поле при r=10 мм, кВ/мм',
    'E_25mm_kV_mm': 'Поле при r=25 мм, кВ/мм',
    'conductivity_S_m': 'Эквивалентная проводимость, См/м',
    'I_real_A': 'Активная компонента амплитуды тока, А',
    'I_imag_A': 'Квадратурная компонента амплитуды тока, А',
    'analytic_I_real_A': 'Аналитическая активная компонента, А',
    'analytic_I_imag_A': 'Аналитическая квадратурная компонента, А',
    'losses_W': 'Диэлектрические потери, Вт',
    'analytic_losses_W': 'Аналитические потери, Вт',
    'terminal_power_W': 'Средняя мощность электрода, Вт',
    'apparent_power_VA': 'Полная мощность, ВА',
    'U_RMS_V': 'Действующее напряжение, В', 'U_amplitude_V': 'Амплитуда напряжения, В'
}
result = {'runtime': 'FEMM 5.0; встроенный MicroPython', 'records': records,
          'checks': checks, 'columns': columns,
          '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'], 'Не выполнен численный критерий'

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

Re(V̂), В: losses-03.anc
Визуализация сохранённого решения FEMM 5 losses-03.anc. Действительная компонента амплитудного фазора потенциала при фазе 0; это не RMS и не модуль. Показана расчётная область. Контуры деталей взяты из той же модели. Области вне сохранённых треугольников не заполняются. Это научный график сохранённых данных. Нажмите на карту, чтобы открыть её отдельно и увеличить.

Окна FEMM 5

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

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

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

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

Результаты расчётов и производные итоги
Полная мощность, ВАДействующее напряжение, ВАналитические потери, ВтАмплитуда напряжения, ВЭквивалентная проводимость, См/мАналитическая квадратурная компонента, АУзловАктивная компонента амплитуды тока, АЭлементовРазмер сетки, ммФайл моделиЁмкость по заряду, ФДиэлектрические потери, ВтАналитическая активная компонента, АСредняя мощность электрода, ВтКвадратурная компонента амплитуды тока, А
0,06193220464,5 × 10⁻⁶311,195,97 × 10⁻⁹398,1 × 10⁻⁶10412,986 × 10⁻⁶18830,4losses-01.fec2,036 × 10⁻¹²464,5 × 10⁻⁶2,986 × 10⁻⁶464,5 × 10⁻⁶398,1 × 10⁻⁶
0,06193220464,5 × 10⁻⁶311,195,97 × 10⁻⁹398,1 × 10⁻⁶10412,986 × 10⁻⁶18830,2losses-02.fec2,036 × 10⁻¹²464,5 × 10⁻⁶2,986 × 10⁻⁶464,5 × 10⁻⁶398,1 × 10⁻⁶
0,06193220464,5 × 10⁻⁶311,195,97 × 10⁻⁹398,1 × 10⁻⁶15242,986 × 10⁻⁶27570,1losses-03.fec2,036 × 10⁻¹²464,5 × 10⁻⁶2,986 × 10⁻⁶464,5 × 10⁻⁶398,1 × 10⁻⁶
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Активные потери по объёмному интегралу81,35 × 10⁻¹²1e-05Выполнен
Потери по средней мощности электрода1,14 × 10⁻⁹1e-05Выполнен
Полная мощность по объёму и току1,222 × 10⁻⁹1e-05Выполнен
Комплексный ток диэлектрика1,273 × 10⁻⁹1e-05Выполнен
Баланс комплексных токов2,096 × 10⁻⁹1e-05Выполнен
Ёмкость по реактивному току1,273 × 10⁻⁹1e-05Выполнен
Активные потери по объёмному интегралу81,35 × 10⁻¹²1e-05Выполнен
Потери по средней мощности электрода1,14 × 10⁻⁹1e-05Выполнен
Полная мощность по объёму и току1,222 × 10⁻⁹1e-05Выполнен
Комплексный ток диэлектрика1,273 × 10⁻⁹1e-05Выполнен
Баланс комплексных токов2,096 × 10⁻⁹1e-05Выполнен
Ёмкость по реактивному току1,273 × 10⁻⁹1e-05Выполнен
Активные потери по объёмному интегралу1,361 × 10⁻¹²1e-05Выполнен
Потери по средней мощности электрода31,48 × 10⁻¹²1e-05Выполнен
Полная мощность по объёму и току30,11 × 10⁻¹²1e-05Выполнен
Комплексный ток диэлектрика164,7 × 10⁻¹²1e-05Выполнен
Баланс комплексных токов81,68 × 10⁻¹²1e-05Выполнен
Ёмкость по реактивному току164,7 × 10⁻¹²1e-05Выполнен
Сходимость активных потерь82,71 × 10⁻¹²1e-05Выполнен

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

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

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

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

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