Теплопроводность · Плоскопараллельная
Тепловое сопротивление кабеля
Многослойный кабель позволяет проверить тепловую модель значительно строже, чем сравнением одной максимальной температуры. Для каждого пассивного слоя есть независимое аналитическое сопротивление, а через все слои проходит одна и та же мощность жилы. Учебная задача учит различать удельное тепловое сопротивление материала, теплопроводность и сопротивление целого цилиндрического слоя. Эти три величины имеют разные определения и не должны смешиваться в таблицах.
Кабель представлен шестью концентрическими областями с радиусами 28.75, 29.5, 52.5, 53, 57 и 61 мм. Такая последовательность позволяет отдельно исследовать медную жилу, два тонких экрана, основную изоляцию, металлическую оболочку и защитный покров. Площадь жилы равна 2596.72 мм² и согласована с объёмным источником тепла. Никакая номинальная площадь не подставляется вместо площади геометрической модели.
Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.
Допущения и устройство учебной модели
Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.
Физическая и математическая постановка
Слои и тепловой поток
В жиле равномерно выделяется 30 Вт на метр. В остальных слоях источники отсутствуют, поэтому радиальный тепловой поток через каждый слой одинаков. Температурный перепад делится на мощность на единицу длины, что даёт сопротивление с единицей К м/Вт. Для изоляции и полупроводящих экранов удельное сопротивление равно 5 К м/Вт, следовательно, теплопроводность равна 0.2 Вт/(м К). Для защитного покрова используется обратная величина 1/3.5.
Для металлической оболочки принята теплопроводность 35 Вт/(м К). Она значительно лучше проводит тепло, чем изоляция, поэтому её доля полного сопротивления мала. При изменении этого параметра сначала оцените ожидаемый эффект по аналитической формуле, затем проверьте его решателем. Так можно отличить слабую физическую чувствительность от программной ошибки.
Температура, сетка и эталон
На наружной поверхности задана конвекция: воздух 20 °C, коэффициент 5 Вт/(м² К). Абсолютная температура зависит от этого условия; сопротивления внутренних слоёв при постоянных свойствах определяются геометрией и теплопроводностью. Дополнительная аналитическая формула учитывает конвективный перепад и небольшой перепад внутри равномерно нагреваемой медной жилы.
Программа решает три сетки, уменьшает размер элементов и угловой шаг окружностей, измеряет температуры на всех границах и отдельно сравнивает каждый слой с логарифмической формулой. На грубой сетке допускается до 3 процентов для тонкого экрана, на окончательной — не более 0.5 процента. Проверяются температура центра, суммарная выделенная мощность и сопротивление от поверхности жилы до внутренней поверхности оболочки. Точки измерения стоят в вершинах дуг, чтобы не оказаться вне многоугольной сетки.
Исходные данные
Шесть концентрических областей; радиусы 28.75, 29.5, 52.5, 53, 57, 61 мм; глубина 1 м.
| Параметр | Значение | Единица | Происхождение |
|---|---|---|---|
| Радиусы слоёв | 28.75; 29.5; 52.5; 53; 57; 61 | мм | Заданный параметр учебной модели |
| Потери жилы | 30 | Вт/м | Заданный параметр учебной модели |
| Площадь жилы | 2597 | мм² | Заданный параметр учебной модели |
| k меди | 380 | Вт/(м К) | Заданный параметр учебной модели |
| k оболочки | 35 | Вт/(м К) | Заданный параметр учебной модели |
| Воздух | 20 | °C | Заданный параметр учебной модели |
| Коэффициент конвекции | 5 | Вт/(м² К) | Заданный параметр учебной модели |
Порядок воспроизведения
- Создайте отдельную рабочую папку и поместите в неё reproduce.py. Откройте программу во встроенном редакторе Python FEMM 5. Команды ci_, co_, hi_* и ho_* уже доступны в этой среде; внешний пакет pyFEMM здесь не требуется. Запустите файл целиком. Программа сама создаст новую папку calculated-XX, поэтому повторный опыт не уничтожит предыдущую серию.
- Проследите три последовательных построения. Перед каждым решением программа записывает самостоятельную модель, закрывает документ и повторно открывает этот файл. Такое действие проверяет сохранение геометрии, свойств и русских имён. Для каждой сетки остаются входная модель, расчётное решение и запись численных показателей. Откройте окончательную модель вручную, чтобы сопоставить контуры, материалы и граничные условия с таблицей параметров.
- Откройте result.json из новой папки. records содержит результаты каждой сетки, checks — проверяемую величину, допустимое значение и логический итог. Переходите к обсуждению физики после выполнения всех проверок. Само уменьшение невязки линейного решателя ещё не доказывает достаточность сетки: отдельно сравниваются интегральные характеристики двух последних дискретизаций.
- Изменяйте один физический параметр за опыт и сохраняйте отдельную серию. Сравнивайте результаты при одинаковой длине, глубине и температурном соглашении. В отчёте приведите постановку, таблицу трёх сеток, результат независимой проверки и объяснение оставшегося расхождения.
Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.
Программа встроенного Python FEMM 5
"""Тепловое сопротивление слоёв высоковольтного кабеля.
Среда: встроенный 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,
}
)
BURIED = False
CENTERS = (0,)
AMBIENT_K = 293.15
H = 5
SOURCES = (30 / (math.pi * 0.02875**2), 0, 0, 0, 0, 0)
RADII_MM = (28.75, 29.5, 52.5, 53, 57, 61)
NAMES = (
"Медь жилы",
"Экран жилы",
"Маслобумажная изоляция",
"Экран изоляции",
"Свинцовая оболочка",
"Защитный покров",
)
CONDUCTIVITIES = (380, 0.2, 0.2, 0.2, 35, 1 / 3.5)
# Теплопроводность оболочки принята равной 35 Вт/(м К).
def circle(x, radius, angle, boundary=""):
hi_addnode(x - radius, 0)
hi_addnode(x + radius, 0)
hi_addarc(x - radius, 0, x + radius, 0, 180, angle)
hi_addarc(x + radius, 0, x - radius, 0, 180, angle)
hi_selectarcsegment(x, radius)
hi_selectarcsegment(x, -radius)
hi_setarcsegmentprop(angle, boundary or "<None>", 0, 0, "<None>")
hi_clearselected()
for level, mesh in enumerate((3, 1.5, 0.75)):
newdocument(2)
hi_probdef("millimeters", "planar", 1e-10, 1000, 30)
for number, name in enumerate(NAMES):
k = CONDUCTIVITIES[number]
hi_addmaterial(name, k, k, SOURCES[number], 0)
hi_addboundprop("Конвекция в воздух", 2, 0, 0, AMBIENT_K, H, 0)
angle = 4 / (2**level)
for cable, x in enumerate(CENTERS):
previous = 0
for number, radius in enumerate(RADII_MM):
boundary = "Конвекция в воздух" if not BURIED and number == 5 else ""
circle(x, radius, angle, boundary)
label_x = x + (previous + radius) / 2
hi_addblocklabel(label_x, 0)
hi_selectlabel(label_x, 0)
hi_setblockprop(NAMES[number], 0, mesh, cable * 10 + number + 1)
hi_clearselected()
previous = radius
model = directory + "/model-%02d.feh" % (level + 1)
hi_saveas(model)
hi_close()
opendocument(model)
hi_analyze(1)
hi_loadsolution()
ho_smooth("off")
temperatures = [real(ho_getpointvalues(x, 0)[0]) for x in CENTERS]
# Интеграл q_v dV использует фактическую площадь многоугольной сетки.
generated = 0
for cable, x in enumerate(CENTERS):
for number, source in enumerate(SOURCES):
if source:
ho_groupselectblock(cable * 10 + number + 1)
generated += source * real(ho_blockintegral(2))
ho_clearblock()
row = {
"mesh_mm": mesh,
"model": "model-%02d.feh" % (level + 1),
"nodes": ho_numnodes(),
"elements": ho_numelements(),
"T_center_K": temperatures,
"generated_W": generated,
}
interface = [real(ho_getpointvalues(r, 0)[0]) for r in RADII_MM]
drops = [(temperatures[0] - interface[0]) / 30]
drops += [(interface[i - 1] - interface[i]) / 30 for i in range(1, 6)]
row["R_layers_K_m_W"] = drops
row["T_interfaces_K"] = interface
row["R_core_sheath_K_m_W"] = sum(drops[1:4])
reference = []
for i in range(1, 6):
reference.append(
math.log(RADII_MM[i] / RADII_MM[i - 1]) / (2 * math.pi * CONDUCTIVITIES[i])
)
row["R_layers_analytic_K_m_W"] = reference
row["max_layer_relative_error"] = max(
abs(drops[i + 1] / reference[i] - 1) for i in range(5)
)
check(
"Радиальные сопротивления, сетка %d" % (level + 1),
row["max_layer_relative_error"],
0.03,
)
records.append(row)
ho_close()
hi_close()
check(
"Сходимость температуры жилы, К",
abs(records[-1]["T_center_K"][0] - records[-2]["T_center_K"][0]),
0.25,
)
reference = 293.15 + 30 / (2 * math.pi * 0.061 * H)
reference += 30 / (4 * math.pi * 380)
reference += 30 * sum(records[-1]["R_layers_analytic_K_m_W"])
check(
"Аналитическая температура центра, К",
abs(records[-1]["T_center_K"][0] - reference),
0.1,
)
check(
"Сопротивления слоёв на окончательной сетке",
records[-1]["max_layer_relative_error"],
0.005,
)
check(
"Мощность источника на окончательной сетке, Вт",
abs(records[-1]["generated_W"] - 30),
0.01,
)
check(
"Сопротивление жила-оболочка против 0.488 К м/Вт",
abs(records[-1]["R_core_sheath_K_m_W"] / 0.488 - 1),
0.01,
)
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"]
Картина рассчитанного поля
Окна FEMM 5
Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.
Результаты и численные проверки
Сохранено решений FEMM: 3. Выполнено проверок: 8. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.
| Тепловое сопротивление жила–оболочка, К·м/Вт | Масштаб сетки, мм | Наибольшая относительная ошибка слоя | Элементов | Температура в центре, К | Тепловое сопротивление слоёв, К·м/Вт | Модель | Температуры межслойных границ, К | Аналитическое тепловое сопротивление, К·м/Вт | Тепловыделение, Вт | Узлов |
|---|---|---|---|---|---|---|---|---|---|---|
| 0,48609648 | 3 | 0,027590992 | 11288 | 1 значений; полные данные JSON | 6 значений; полные данные JSON | model-01.feh | 6 значений; полные данные JSON | 5 значений; полные данные JSON | 29,975637 | 5736 |
| 0,48649695 | 1,5 | 0,0081542167 | 16377 | 1 значений; полные данные JSON | 6 значений; полные данные JSON | model-02.feh | 6 значений; полные данные JSON | 5 значений; полные данные JSON | 29,993908 | 8331 |
| 0,48667614 | 0,75 | 0,002351791 | 50502 | 1 значений; полные данные JSON | 6 значений; полные данные JSON | model-03.feh | 6 значений; полные данные JSON | 5 значений; полные данные JSON | 29,998477 | 25505 |
| Критерий | Получено | Допуск или ожидаемое значение | Итог |
|---|---|---|---|
| Радиальные сопротивления, сетка 1 | 0,02759 | 0,03 | Выполнен |
| Радиальные сопротивления, сетка 2 | 0,008154 | 0,03 | Выполнен |
| Радиальные сопротивления, сетка 3 | 0,002352 | 0,03 | Выполнен |
| Сходимость температуры жилы, К | 0,007468 | 0,25 | Выполнен |
| Аналитическая температура центра, К | 0,002578 | 0,1 | Выполнен |
| Сопротивления слоёв на окончательной сетке | 0,002352 | 0,005 | Выполнен |
| Мощность источника на окончательной сетке, Вт | 0,001523 | 0,01 | Выполнен |
| Сопротивление жила-оболочка против 0.488 К м/Вт | 0,002713 | 0,01 | Выполнен |
Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.
Модели, решения и программа
Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.
- Файл результатов: README.md9865 байт
- Тепловое решение: model-01.anh552897 байт
- Тепловая модель: model-01.feh2356 байт
- Тепловое решение: model-02.anh804526 байт
- Тепловая модель: model-02.feh2368 байт
- Тепловое решение: model-03.anh2571274 байт
- Тепловая модель: model-03.feh2374 байт
- Программа встроенного Python: reproduce.py6452 байт
- Файл результатов: verification.json912 байт
Границы применимости
- Стационарная поперечная задача с постоянными свойствами. Не моделируются продольный теплоотвод, циклическая нагрузка, диэлектрические потери и расчёт допустимого тока по стандарту.
- Проверены сохранение, повторное открытие и расчёт точных файлов в FEMM 5.0 06Oct2026 со встроенным MicroPython. Проверка относится к данной учебной версии и к указанным численным критериям. Снимки интерфейса FEMM выполняются отдельным согласованным проходом.
- Постановка, объяснения и встроенная программа образуют самостоятельную лабораторную работу курса. Перед расчётом реального изделия необходимо уточнить геометрию, свойства, нагрузку и условия охлаждения.