Электростатика · Плоскопараллельная
Два провода: ёмкость и контроль открытой области
Найдите взаимную ёмкость двух проводов разных радиусов. Здесь требуется контролировать и сетку около тонкого провода, и удаление искусственной внешней границы.
Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.
Допущения и устройство учебной модели
| Учебная модель FEMM 5 | Причина |
|---|---|
| Противоположные заданные заряды и удалённая граница V=0 | Фиксируется электростатическая задача и определяется разность потенциалов пары. |
| Локально сгущённые воздушные подобласти около обоих проводов | Малый провод требует меньших элементов. |
| Четыре состояния: три сетки и увеличенная область | Отдельно контролируется чувствительность к усечению области. |
Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.
Физическая и математическая постановка
Аналитический ориентир для пары проводов
Для двух непересекающихся цилиндров расстояние d измеряется между осями. Решение в биполярных координатах даёт взаимную ёмкость длинного участка в однородном диэлектрике. При указанных размерах результат равен примерно 18,359 пФ на метр.
Проводникам задаются заряды +q и −q. Отношение q к разности их потенциалов определяет ёмкость пары; отдельный потенциал относительно удалённой опорной границы в это определение не входит.
Разделение двух численных ограничений
Три расчёта с внешним радиусом 80 мм уточняют сетку. Четвёртый расчёт переносит границу на 160 мм и сохраняет локальную сетку около проводов. Дополнительные круговые подобласти заполнены тем же воздухом; они нужны только для задания мелких элементов там, где быстро меняется поле.
Перенос границы и изменение глобального размера внешней сетки дают практический контроль, но не строгую оценку всей ошибки бесконечной области. Поэтому отдельно проверяется точная аналитическая ёмкость.
Исходные данные
Плоскопараллельная
| Параметр | Значение | Единица | Происхождение |
|---|---|---|---|
| Радиус первого провода a₁ | 4 | мм | Условие учебной задачи |
| Радиус второго провода a₂ | 1 | мм | Условие учебной задачи |
| Межосевое расстояние d | 10 | мм | Условие учебной задачи |
| Длина участка | 1 | м | Условие учебной задачи |
| Модуль заряда каждого провода | 1 × 10⁻⁹ | Кл | Условие учебной задачи |
| Радиусы внешней границы | 80; 160 | мм | Условие учебной задачи |
Порядок воспроизведения
- Изучите размеры, материалы, возбуждение и выбранную двумерную постановку. Сначала вычислите аналитический ориентир в единицах СИ.
- Скачайте файлы по отдельным ссылкам в отдельную рабочую папку. Откройте reproduce.py во встроенном редакторе Python FEMM 5 и выполните сохранённый файл.
- Программа строит русифицированные модели, сохраняет их, закрывает и открывает заново. Затем выполняет расчёт и читает свойства проводников по точному русскому имени.
- Сравните три уровня пространственной сетки. В таблицах сохранены число узлов и элементов, интегральные величины и независимые критерии. Дополнительные режимы указаны в постановке.
- Откройте самый подробный сохранённый вход и соответствующее решение. Проверьте смысл единиц, знаков и объёмного множителя; новый запуск сохранит результаты в новой папке calculated-NN.
Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.
Программа встроенного Python FEMM 5
"""Ёмкость двух параллельных проводов разного радиуса.
Среда: встроенный 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
# acosh(x) = ln(x+sqrt(x^2-1)); расстояние d задано между центрами.
x = (10 ** 2 - 4 ** 2 - 1 ** 2) / (2 * 4 * 1)
exact_C = 2 * math.pi * EPS0 / math.log(x + math.sqrt(x ** 2 - 1))
for level, settings in enumerate(((80, 6, 4), (80, 3, 2), (80, 1.5, 1), (160, 3, 1))):
radius, mesh, angle = settings
newdocument(1)
ei_probdef('millimeters', 'planar', 1e-10, 1000, 30)
ei_addmaterial('Воздух вокруг проводов', 1, 1, 0)
ei_addconductorprop('Положительно заряженный провод', 0, 1e-9, 0)
ei_addconductorprop('Отрицательно заряженный провод', 0, -1e-9, 0)
ei_addconductorprop('Удалённая опорная граница', 0, 0, 1)
circle(-5, 4, 'Положительно заряженный провод', angle)
circle(5, 1, 'Отрицательно заряженный провод', angle)
# Воздушные подобласти служат только для локального контроля сетки.
circle(-5, 6, '<None>', angle)
circle(5, 3, '<None>', angle)
circle(0, radius, 'Удалённая опорная граница', 4)
label(-5, 0, '<No Mesh>', mesh, 0)
label(5, 0, '<No Mesh>', mesh, 0)
circle(0, 20, '<None>', angle)
label(0, 10, 'Воздух вокруг проводов', 0.8 / (2 ** min(level, 2)))
label(0, 30, 'Воздух вокруг проводов', mesh)
local_mesh = 0.4 / (2 ** min(level, 2))
label(-5, 5, 'Воздух вокруг проводов', local_mesh)
label(5, 2, 'Воздух вокруг проводов', local_mesh)
model = directory + '/wires-%02d.fee' % (level + 1)
solve(model)
row = electric_result(mesh, model, 'Положительно заряженный провод',
'Отрицательно заряженный провод', exact_C)
row['outer_radius_mm'] = radius
check('Баланс зарядов пары', abs(real(eo_getconductorproperties(
'Отрицательно заряженный провод')[1]) + row['charge_C']) / 1e-9, 1e-6)
eo_close()
ei_close()
check('Сходимость ёмкости при R=80 мм', abs(records[2]['capacitance_F'] /
records[1]['capacitance_F'] - 1), 0.003)
check('Контроль удаления внешней границы 80→160 мм',
abs(records[3]['capacitance_F'] / records[2]['capacitance_F'] - 1), 0.005)
check('Ёмкость в сравнении с бесконечной областью',
records[-1]['analytic_C_relative_error'], 0.005)
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'], 'Не выполнен численный критерий'
Картина рассчитанного поля
Окна FEMM 5
Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.
Результаты и численные проверки
Сохранено решений FEMM: 4. Выполнено проверок: 11. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.
| Ёмкость по заряду, Ф | Файл модели | Заряд, Кл | Аналитическая ёмкость, Ф | Узлов | Невязка энергии и заряда | Радиус внешней границы, мм | Разность потенциалов, В | Ёмкость по энергии, Ф | Элементов | Относительная ошибка ёмкости | Энергия, Дж | Размер сетки, мм |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 18,49531 × 10⁻¹² | wires-01.fee | 1 × 10⁻⁹ | 18,359256 × 10⁻¹² | 6979 | 60,396133 × 10⁻¹⁵ | 80 | 54,06776 | 18,49531 × 10⁻¹² | 13585 | 0,007410681 | 27,03388 × 10⁻⁹ | 6 |
| 18,451683 × 10⁻¹² | wires-02.fee | 1 × 10⁻⁹ | 18,359256 × 10⁻¹² | 15904 | 20,872193 × 10⁻¹⁵ | 80 | 54,1956 | 18,451683 × 10⁻¹² | 31257 | 0,0050343416 | 27,0978 × 10⁻⁹ | 3 |
| 18,432923 × 10⁻¹² | wires-03.fee | 1 × 10⁻⁹ | 18,359256 × 10⁻¹² | 56205 | 717,20407 × 10⁻¹⁵ | 80 | 54,250757 | 18,432923 × 10⁻¹² | 111333 | 0,0040125196 | 27,125378 × 10⁻⁹ | 1,5 |
| 18,385731 × 10⁻¹² | wires-04.fee | 1 × 10⁻⁹ | 18,359256 × 10⁻¹² | 56926 | 703,21526 × 10⁻¹⁵ | 160 | 54,390004 | 18,385731 × 10⁻¹² | 112774 | 0,0014420764 | 27,195002 × 10⁻⁹ | 3 |
| Критерий | Получено | Допуск или ожидаемое значение | Итог |
|---|---|---|---|
| Энергия и заряд: wires-01.fee | 60,4 × 10⁻¹⁵ | 1e-05 | Выполнен |
| Баланс зарядов пары | 0 | 1e-06 | Выполнен |
| Энергия и заряд: wires-02.fee | 20,87 × 10⁻¹⁵ | 1e-05 | Выполнен |
| Баланс зарядов пары | 0 | 1e-06 | Выполнен |
| Энергия и заряд: wires-03.fee | 717,2 × 10⁻¹⁵ | 1e-05 | Выполнен |
| Баланс зарядов пары | 0 | 1e-06 | Выполнен |
| Энергия и заряд: wires-04.fee | 703,2 × 10⁻¹⁵ | 1e-05 | Выполнен |
| Баланс зарядов пары | 0 | 1e-06 | Выполнен |
| Сходимость ёмкости при R=80 мм | 0,001017 | 0,003 | Выполнен |
| Контроль удаления внешней границы 80→160 мм | 0,00256 | 0,005 | Выполнен |
| Ёмкость в сравнении с бесконечной областью | 0,001442 | 0,005 | Выполнен |
Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.
Модели, решения и программа
Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.
- Файл результатов: README.md1446 байт
- Программа встроенного Python: reproduce.py8783 байт
- Электростатическая модель: wires-01.fee1643 байт
- Электростатическое решение: wires-01.res673526 байт
- Электростатическая модель: wires-02.fee1643 байт
- Электростатическое решение: wires-02.res1583654 байт
- Электростатическая модель: wires-03.fee1645 байт
- Электростатическое решение: wires-03.res5780218 байт
- Электростатическая модель: wires-04.fee1645 байт
- Электростатическое решение: wires-04.res5857829 байт
Границы применимости
- Результат относится к длинным параллельным проводам без земли и соседних проводников.
- Внешняя круговая граница имеет конечный радиус; её влияние проверено в указанном диапазоне.
- Торцевые и волновые эффекты отсутствуют.