FEMM 5

Теплопроводность · Плоскопараллельная

Температура подземного кабеля

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

Радиусы областей кабеля равны 28.75, 29.5, 52.5, 53, 57 и 61 мм. Расстояние между осями принято 300 мм, глубина осей — 1000 мм. Грунт ограничен нижним полукругом радиуса 5.5 м с центром на поверхности над левым кабелем. Конвекция назначена верхней прямой; через внешнюю дугу тепло не выходит. Это явно заданная конечная расчётная область, влияние которой следует исследовать отдельным опытом.

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

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

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

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

Объёмные источники и расхождение источников

Потери заданы учебной постановкой и не вычисляются электромагнитным решателем. Плотность источника равна мощности на метр, делённой на площадь соответствующей области. Для меди используется 30.3/2596.72·10⁻⁶, для основной изоляции 13.35/5925.04·10⁻⁶ Вт/м³. Полупроводящие экраны и защитный покров собственного источника не имеют. Теплопроводность грунта равна 1 Вт/(м К), воздуха в расчётной области нет.

В одной металлической оболочке выделяется 0.7 Вт/м, во всех трёх — 2.1 Вт/м. Поэтому плотность мощности можно вычислить как 2.1 Вт/м, делённые на суммарную площадь трёх оболочек 4146.9 мм². Итоговая мощность всех источников равна 133.05 Вт для трёх метровых участков. Такая запись требует аккуратной проверки: нельзя одновременно делить на общую площадь и повторно приписывать общие потери каждому кабелю.

q_v=P^{\prime}/S,\qquad Q_{\mathrm{conv}}=\int h(\theta-\theta_a)\,ds

Проверка результата и смысл температуры

Воздух имеет температуру 10 °C, коэффициент теплоотдачи верхней поверхности равен 10 Вт/(м² К). Теплопроводность оболочки принята 35 Вт/(м К). Температура средней жилы около 84 °C служит контрольным ориентиром именно этой учебной постановки. Проверка баланса источников и теплоотдачи имеет самостоятельное значение и не должна заменяться совпадением одной температуры.

Три сетки сгущают кабели, грунт и верхнюю границу. Проверяется изменение температуры жилы между двумя последними решениями не более 0.25 К. Полная мощность вычисляется интегрированием заданных объёмных источников по фактической сетке. Отвод тепла проверяется независимым интегрированием конвекции вдоль поверхности грунта. Для последней сетки средняя жила получается около 83.91 °C, что согласуется с округлённым результатом учебного ориентира. Это численное воспроизведение заданных потерь, а не подтверждение токовой нагрузки реального кабеля.

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

Три многослойных кабеля с центрами (0,0), (300,0), (600,0) мм; поверхность грунта y=1000 мм; нижний полукруг радиуса 5500 мм с центром (0,1000) мм.

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Расстояние осей300ммЗаданный параметр учебной модели
Глубина осей1000ммЗаданный параметр учебной модели
Воздух10°CЗаданный параметр учебной модели
Коэффициент конвекции10Вт/(м² К)Заданный параметр учебной модели
Потери меди одного кабеля30,3Вт/мЗаданный параметр учебной модели
Потери основной изоляции одного кабеля13,35Вт/мЗаданный параметр учебной модели
Потери оболочки одного кабеля0,7Вт/мЗаданный параметр учебной модели
k оболочки35Вт/(м К)Заданный параметр учебной модели
Внешний радиус грунта5500ммЗаданный параметр учебной модели

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

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


BURIED = True
CENTERS = (0, 300, 600)
AMBIENT_K = 283.15
H = 10
SOURCES = (30.3 / 2596.72e-6, 0, 13.35 / 5925.04e-6, 0, 2.1 / 4146.9e-6, 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
    hi_addmaterial("Однородный грунт", 1, 1, 0, 0)
    # Расчётная область: нижний полукруг R=5.5 м с центром (0, 1 м).
    hi_addnode(-5500, 1000)
    hi_addnode(5500, 1000)
    hi_addarc(-5500, 1000, 5500, 1000, 180, 2)
    hi_addsegment(-5500, 1000, 5500, 1000)
    hi_selectsegment(0, 1000)
    hi_setsegmentprop("Конвекция в воздух", 100 / (2**level), 0, 0, 0, "<None>")
    hi_clearselected()
    hi_addblocklabel(0, -500)
    hi_selectlabel(0, -500)
    hi_setblockprop("Однородный грунт", 0, 200 / (2**level), 99)
    hi_clearselected()
    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,
    }
    # Численное интегрирование конвекции вдоль поверхности грунта.
    count = 880
    total = 0
    for n in range(count + 1):
        temperature = real(ho_getpointvalues(-5500 + 11000 * n / count, 1000)[0])
        total += (0.5 if n in (0, count) else 1) * (temperature - AMBIENT_K)
    convection = total * 11 / count * H
    row["convection_W"] = convection
    row["heat_balance_relative"] = abs(convection - generated) / generated
    row["T_ground_over_middle_K"] = real(ho_getpointvalues(300, 1000)[0])
    check("Баланс тепла, сетка %d" % (level + 1), row["heat_balance_relative"], 0.01)
    records.append(row)
    ho_close()
    hi_close()
check(
    "Сходимость температуры жилы, К",
    abs(records[-1]["T_center_K"][0] - records[-2]["T_center_K"][0]),
    0.25,
)
check(
    "Температура средней жилы против учебного ориентира 84 C, К",
    abs(records[-1]["T_center_K"][1] - 357.15),
    3,
)
# Общие потери трёх оболочек 2.1 Вт/м: по 0.7 Вт/м на кабель.
check(
    "Суммарная мощность заданных источников, Вт",
    abs(records[-1]["generated_W"] - (3 * (30.3 + 13.35) + 2.1)),
    0.1,
)

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.anh
Визуализация сохранённого решения FEMM 5 model-03.anh. Абсолютная температура по сохранённым узловым значениям. Показана расчётная область. Контуры деталей взяты из той же модели. Области вне сохранённых треугольников не заполняются. Это научный график сохранённых данных. Нажмите на карту, чтобы открыть её отдельно и увеличить.

Окна FEMM 5

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

Увеличенная область трёх многослойных кабелей в грунте: межосевое расстояние 300 мм. Поверхность грунта и удалённая граница за кадром; подписи материалов скрыты только в отображении.
Увеличенная область трёх многослойных кабелей в грунте: межосевое расстояние 300 мм. Поверхность грунта и удалённая граница за кадром; подписи материалов скрыты только в отображении. Открыть в полном размере
Сохранённое решение «Температура подземного кабеля». Температура T, К, и изотермы вокруг трёх подземных кабелей. Верхняя горизонталь — поверхность грунта; удалённая нижняя граница за кадром.
Сохранённое решение «Температура подземного кабеля». Температура T, К, и изотермы вокруг трёх подземных кабелей. Верхняя горизонталь — поверхность грунта; удалённая нижняя граница за кадром. Открыть в полном размере

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

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

Результаты расчётов и производные итоги
Температура грунта над кабелем, КЭлементовТемпература в центре, КТепловыделение, ВтКонвективный тепловой поток, ВтУзловОтносительная невязка теплаМодельМасштаб сетки, мм
286,98886375043 значений; полные данные JSON132,94207132,9420918890185,50546 × 10⁻⁹model-01.feh3
286,99286660603 значений; полные данные JSON133,0231133,0229833275942,56655 × 10⁻⁹model-02.feh1,5
286,995492083833 значений; полные данные JSON133,04337133,04331104662397,89521 × 10⁻⁹model-03.feh0,75
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Баланс тепла, сетка 1185,5 × 10⁻⁹0,01Выполнен
Баланс тепла, сетка 2942,6 × 10⁻⁹0,01Выполнен
Баланс тепла, сетка 3397,9 × 10⁻⁹0,01Выполнен
Сходимость температуры жилы, К0,11780,25Выполнен
Температура средней жилы против учебного ориентира 84 C, К0,087333Выполнен
Суммарная мощность заданных источников, Вт0,0066350,1Выполнен

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

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

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

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

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