Теплопроводность · Плоскопараллельная
Стационарный электротепловой расчёт контакта
Составной проводник 100 × 10 мм, глубина 1 мм: медь по 45 мм и контакт длиной 10 мм. Питание 20 мВ, торцы термостатированы при 20 °C. Проводимость каждого материала зависит от его средней температуры.
Цель работы — связать полевое распределение с измеряемой величиной, получить проверяемый численный результат и объяснить границы выбранной модели. Все параметры заданы непосредственно в программе. Собственная постановка содержит физический ориентир и критерии приёмки, поэтому результат можно исследовать без внешней библиотеки готовых решений.
Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.
Допущения и устройство учебной модели
Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.
Физическая и математическая постановка
Теория и контрольная модель
Стационарная электротепловая связь решается последовательными задачами. Электрический решатель вычисляет мощность каждой группы; она делится на объём и передаётся тепловому решателю. Средняя температура возвращается в закон проводимости. Итерации продолжаются до изменения температуры меньше 0.001 К с ограничением 40 шагов и релаксацией 0.5.
Внутри каждого материала проводимость считается постоянной и соответствует средней температуре области. Это упрощённая материальная обратная связь, а не пространственно непрерывная нелинейная модель. Независимая последовательная схема проверяет электрическое сопротивление, аналитическое кусочно-одномерное решение — температуру, равенство интегральных мощностей — корректность передачи источников. Все промежуточные модели сохраняются.
Как читать расчёт и проверки
Программа создаёт три последовательные дискретизации. Для каждой сохраняются отдельная входная модель и собственное решение FEMM. Перед запуском решателя записанный файл закрывается и повторно открывается: проверяется именно сохранённая версия с русскими именами материалов, проводников и границ. В result.json величины records сопровождаются числом узлов и элементов, а checks содержит фактический остаток, предел и логический итог.
Для электрических моделей отдельно проверяются баланс токов на выводах и равенство суммарных джоулевых потерь и активной мощности на выводах. Для тепловых задач используются аналитический профиль, эквивалентное координатное преобразование или интегральный баланс источников и теплоотдачи. Эти проверки отвечают на разные вопросы: совпадение одной температуры или одного тока само по себе не подтверждает правильность всей постановки.
Практическое исследование
Сначала задайте оба температурных коэффициента равными нулю. Итерационная обратная связь должна исчезнуть, а результат должен совпасть с последовательным расчётом постоянных свойств. Затем включайте коэффициенты по одному.
Увеличьте напряжение питания и объясните изменение тока через изменение сопротивления нагретого контакта. Не переносите вывод о характере обратной связи на режим заданного тока: источник питания меняет физику стационарного равновесия.
Сравните релаксацию 0.5 и 0.8 при одинаковом допуске. Сопоставьте число итераций и окончательные значения. Затем уточните сетку; малый итерационный остаток на грубой сетке не гарантирует точности самой температуры.
Исходные данные
Составной проводник 100 × 10 мм, глубина 1 мм: медь по 45 мм и контакт длиной 10 мм. Питание 20 мВ, торцы термостатированы при 20 °C. Проводимость каждого материала зависит от его средней температуры.
| Параметр | Значение | Единица | Происхождение |
|---|---|---|---|
| Напряжение | 0,02 | В | Принято в учебной постановке |
| α меди | 0,00393 | 1/К | Принято в учебной постановке |
| α контакта | 0,004 | 1/К | Принято в учебной постановке |
| k контакта | 1 | Вт/(м К) | Принято в учебной постановке |
| Релаксация | 0,5 | 1 | Принято в учебной постановке |
Порядок воспроизведения
- Скопируйте reproduce.py в отдельную рабочую папку и откройте его во встроенном редакторе Python FEMM 5. Запускайте файл целиком. Программа сама создаёт новый каталог calculated-XX рядом с файлом, поэтому повторная серия сохраняет предыдущие модели и результаты.
- До расчёта прочитайте параметры и единицы. После расчёта откройте последнюю входную модель и соответствующее решение. Сопоставьте назначение русских имён с физическим смыслом, определите путь тока или теплового потока и найдите величины, используемые в контрольной формуле.
- Сравните все три записи records и убедитесь, что каждый пункт checks имеет passed=true. Уточните различие между ошибкой аналитического сравнения, изменением по сетке, невязкой баланса и итерационным остатком. Для модели с координатным преобразованием откройте также отдельную контрольную геометрию.
- Выполните исследовательские варианты по одному. Перед изменением предскажите знак и примерный масштаб эффекта. В отчёте приведите выбранные параметры, контрольную формулу, таблицу сеток, независимые проверки и объяснение того, какие выводы можно переносить на реальный объект.
Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.
Программа встроенного Python FEMM 5
"""Самостоятельная лабораторная работа курса FEMM 5.
Запуск: встроенный MicroPython FEMM 5, команды FEMM доступны непосредственно.
Геометрические координаты и глубина — мм; результаты интегралов — единицы СИ.
Данные, допущения, аналитические ориентиры и ход исследования заданы в README.md.
Каждая серия записывается в новую calculated-XX; прежние результаты сохраняются.
Сохранённая модель закрывается и открывается до расчёта, включая русские имена.
"""
import os
import sys
import json
import math
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, (tuple, list)):
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 polygon(prefix, points):
for x, y in points:
globals()[prefix + "_addnode"](x, y)
for i, (x, y) in enumerate(points):
x2, y2 = points[(i + 1) % len(points)]
globals()[prefix + "_addsegment"](x, y, x2, y2)
def geometry(prefix, job, mesh):
if job.get("polygon"):
polygon(prefix, job["polygon"])
for x1, y1, x2, y2 in job.get("interfaces", []):
globals()[prefix + "_addnode"](x1, y1)
globals()[prefix + "_addnode"](x2, y2)
globals()[prefix + "_addsegment"](x1, y1, x2, y2)
for x, y, radius, name in job.get("circles", []):
globals()[prefix + "_addnode"](x - radius, y)
globals()[prefix + "_addnode"](x + radius, y)
globals()[prefix + "_addarc"](x - radius, y, x + radius, y, 180, 1)
globals()[prefix + "_addarc"](x + radius, y, x - radius, y, 180, 1)
globals()[prefix + "_selectarcsegment"](x, y + radius)
globals()[prefix + "_selectarcsegment"](x, y - radius)
if prefix == "ci":
ci_setarcsegmentprop(1, "<None>", 0, 0, name or "<None>")
else:
hi_setarcsegmentprop(1, name or "<None>", 0, 0, "<None>")
globals()[prefix + "_clearselected"]()
for x, y, name, group in job["blocks"]:
globals()[prefix + "_addblocklabel"](x, y)
globals()[prefix + "_selectlabel"](x, y)
globals()[prefix + "_setblockprop"](name, 0, mesh, group)
globals()[prefix + "_clearselected"]()
def current(job, mesh, stem):
newdocument(3)
ci_probdef("millimeters", "planar", 0, 1e-10, job["depth"], 30)
for name, sx, sy in job["materials"]:
ci_addmaterial(name, sx, sy, 1, 1, 0, 0)
for name, voltage, amperes, kind in job["terminals"]:
ci_addconductorprop(name, voltage, amperes, kind)
geometry("ci", job, mesh)
for x, y, name in job.get("electrode_segments", []):
ci_selectsegment(x, y)
ci_setsegmentprop("<None>", mesh, 0, 0, 0, name)
ci_clearselected()
path = directory + "/" + stem + ".fec"
ci_saveas(path)
ci_close()
opendocument(path)
ci_analyze(1)
ci_loadsolution()
co_smooth("off")
terminals = {}
terminal_power = 0
balance = 0
current_scale = 0
for name, voltage, amperes, kind in job["terminals"]:
u, i = co_getconductorproperties(name)
terminals[name] = {"U_V": real(u), "I_A": real(i)}
terminal_power += real(complex(u) * complex(i).conjugate())
balance += complex(i)
current_scale = max(current_scale, abs(complex(i)))
powers = {}
power = 0
for x, y, name, group in job["blocks"]:
if name == "<No Mesh>":
continue
co_groupselectblock(group)
powers[str(group)] = real(co_blockintegral(0))
power += powers[str(group)]
co_clearblock()
samples = []
for x, y in job.get("samples", []):
values = co_getpointvalues(x, y)
samples.append(
{
"x_mm": x,
"y_mm": y,
"U_V": real(values[0]),
"J_A_m2": math.sqrt(
abs(complex(values[1])) ** 2 + abs(complex(values[2])) ** 2
),
}
)
row = {
"model": stem + ".fec",
"mesh_mm": mesh,
"nodes": co_numnodes(),
"elements": co_numelements(),
"terminals": terminals,
"P_W": power,
"group_power_W": powers,
"samples": samples,
"current_balance_relative": abs(balance) / current_scale,
"power_balance_relative": abs(power - terminal_power) / max(power, 1e-30),
}
check(stem + ": баланс токов", row["current_balance_relative"], 1e-6)
check(stem + ": баланс мощности", row["power_balance_relative"], 1e-6)
co_close()
ci_close()
return row
def heat(job, mesh, stem):
newdocument(2)
hi_probdef("millimeters", "planar", 1e-10, job["depth"], 30)
for name, kx, ky, q in job["materials"]:
hi_addmaterial(name, kx, ky, q, 0)
for name, kind, temp, ambient, h in job["boundaries"]:
hi_addboundprop(name, kind, temp, 0, ambient, h, 0)
geometry("hi", job, mesh)
for x, y, name in job.get("boundary_segments", []):
hi_selectsegment(x, y)
hi_setsegmentprop(name, mesh, 0, 0, 0, "<None>")
hi_clearselected()
path = directory + "/" + stem + ".feh"
hi_saveas(path)
hi_close()
opendocument(path)
hi_analyze(1)
hi_loadsolution()
ho_smooth("off")
averages = {}
generated = 0
for x, y, name, group in job["blocks"]:
ho_groupselectblock(group)
averages[str(group)] = real(ho_blockintegral(0))
volume = real(ho_blockintegral(2))
q = [m[3] for m in job["materials"] if m[0] == name][0]
generated += q * volume
ho_clearblock()
samples = []
for x, y in job.get("samples", []):
samples.append({"x_mm": x, "y_mm": y, "T_K": real(ho_getpointvalues(x, y)[0])})
convection = 0
for x1, y1, x2, y2, ambient, h in job.get("convection_edges", []):
count = 200
total = 0
for n in range(count + 1):
t = real(
ho_getpointvalues(
x1 + (x2 - x1) * n / count, y1 + (y2 - y1) * n / count
)[0]
)
total += (0.5 if n in (0, count) else 1) * (t - ambient)
length = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) * 0.001
convection += total / count * length * job["depth"] * 0.001 * h
row = {
"model": stem + ".feh",
"mesh_mm": mesh,
"nodes": ho_numnodes(),
"elements": ho_numelements(),
"samples": samples,
"group_average_K": averages,
"generated_W": generated,
"convection_W": convection,
}
if job.get("convection_edges"):
check(
stem + ": баланс конвективного теплоотвода",
abs(convection - generated) / max(generated, 1e-30),
0.005,
)
ho_close()
hi_close()
return row
JOB = json.loads(
'{"polygon": [[0, 0], [100, 0], [100, 10], [0, 10]], "depth": 1, "materials": [["Медь", 58000000.0, 58000000.0], ["Резистивный контакт", 1000000.0, 1000000.0]], "blocks": [[20, 5, "Медь", 1], [50, 5, "Резистивный контакт", 2], [80, 5, "Медь", 3]], "terminals": [["Питание", 0.02, 0, 1], ["Возврат", 0, 0, 1]], "electrode_segments": [[0, 5, "Питание"], [100, 5, "Возврат"]], "samples": [[50, 5]], "interfaces": [[45, 0, 45, 10], [55, 0, 55, 10]]}'
)
def analytic_center(sources):
lengths = (0.045, 0.010, 0.045)
ks = (380, 1, 380)
previous = 0
integral = 0
resistance = 0
for length, k, q in zip(lengths, ks, sources):
integral += (previous * length + q * length**2 / 2) / k
resistance += length / k
previous += q * length
flux = -integral / resistance
temperature = 293.15
position = 0
for length, k, q in zip(lengths, ks, sources):
distance = min(length, 0.05 - position)
temperature -= flux * distance / k + q * distance**2 / (2 * k)
if position + length >= 0.05:
return temperature
flux += q * length
position += length
for level, mesh in enumerate((0.5, 0.25, 0.125)):
temperatures = [293.15, 293.15]
history = []
for iteration in range(1, 41):
sigma_cu = 5.8e7 / (1 + 0.00393 * (temperatures[0] - 293.15))
sigma_contact = 1e6 / (1 + 0.004 * (temperatures[1] - 293.15))
electrical = json.loads(json.dumps(JOB))
electrical["materials"] = [
["Медь", sigma_cu, sigma_cu],
["Резистивный контакт", sigma_contact, sigma_contact],
]
stem = "level-%d-iteration-%02d" % (level + 1, iteration)
electric = current(electrical, mesh, stem + "-current")
powers = [electric["group_power_W"][str(n)] for n in (1, 2, 3)]
volumes = (0.045 * 0.01 * 0.001, 0.01 * 0.01 * 0.001, 0.045 * 0.01 * 0.001)
sources = [p / v for p, v in zip(powers, volumes)]
thermal = {
"polygon": JOB["polygon"],
"interfaces": JOB["interfaces"],
"depth": 1,
"materials": [
["Левая медь", 380, 380, sources[0]],
["Контакт", 1, 1, sources[1]],
["Правая медь", 380, 380, sources[2]],
],
"blocks": [
[20, 5, "Левая медь", 1],
[50, 5, "Контакт", 2],
[80, 5, "Правая медь", 3],
],
"boundaries": [["Термостат", 0, 293.15, 0, 0]],
"boundary_segments": [[0, 5, "Термостат"], [100, 5, "Термостат"]],
"samples": [[50, 5]],
}
thermal_result = heat(thermal, mesh, stem + "-heat")
new_temperatures = [
(
thermal_result["group_average_K"]["1"]
+ thermal_result["group_average_K"]["3"]
)
/ 2,
thermal_result["group_average_K"]["2"],
]
residual = max(abs(a - b) for a, b in zip(new_temperatures, temperatures))
history.append(
{
"iteration": iteration,
"residual_K": residual,
"I_A": abs(electric["terminals"]["Питание"]["I_A"]),
"T_contact_K": new_temperatures[1],
}
)
if residual < 0.001:
break
temperatures = [(a + b) / 2 for a, b in zip(new_temperatures, temperatures)]
check("Нелинейная сходимость, сетка %d" % (level + 1), residual, 0.001)
reference = (0.09 / sigma_cu + 0.01 / sigma_contact) / (0.01 * 0.001)
numerical = 0.02 / abs(electric["terminals"]["Питание"]["I_A"])
check(
"Независимая последовательная электрическая схема",
abs(numerical / reference - 1),
1e-6,
)
center = thermal_result["samples"][0]["T_K"]
check(
"Независимое кусочно-одномерное тепловое решение, К",
abs(center - analytic_center(sources)),
0.15,
)
check(
"Передача джоулевой мощности в тепловую задачу",
abs(thermal_result["generated_W"] / electric["P_W"] - 1),
1e-6,
)
records.append(
{
"mesh_mm": mesh,
"iterations": iteration,
"residual_K": residual,
"I_A": history[-1]["I_A"],
"R_ohm": numerical,
"T_center_K": center,
"P_W": electric["P_W"],
"history": history,
"model": thermal_result["model"],
"electrical_model": electric["model"],
}
)
check(
"Сходимость температуры по сетке, К",
abs(records[-1]["T_center_K"] - records[-2]["T_center_K"]),
0.15,
)
result = {
"runtime": "FEMM 5; 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: 6. Выполнено проверок: 103. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.
| Ток, А | История итераций | Электрическая модель | Итераций | Температурная невязка, К | Температура в центре, К | Сопротивление, Ом | Мощность, Вт | Модель | Масштаб сетки, мм |
|---|---|---|---|---|---|---|---|---|---|
| 15,928721 | 15 точек; полные данные JSON | level-1-iteration-15-current.fec | 15 | 588,55175 × 10⁻⁶ | 329,79589 | 0,0012555936 | 0,31857442 | level-1-iteration-15-heat.feh | 0,5 |
| 15,926735 | 15 точек; полные данные JSON | level-2-iteration-15-current.fec | 15 | 588,62862 × 10⁻⁶ | 329,79466 | 0,0012557502 | 0,31853468 | level-2-iteration-15-heat.feh | 0,25 |
| 15,926205 | 15 точек; полные данные JSON | level-3-iteration-15-current.fec | 15 | 588,64885 × 10⁻⁶ | 329,79306 | 0,001255792 | 0,3185241 | level-3-iteration-15-heat.feh | 0,125 |
| Критерий | Получено | Допуск или ожидаемое значение | Итог |
|---|---|---|---|
| level-1-iteration-01-current: баланс токов | 19,89 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-01-current: баланс мощности | 9,127 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-02-current: баланс токов | 20,52 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-02-current: баланс мощности | 9,411 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-03-current: баланс токов | 20,8 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-03-current: баланс мощности | 9,533 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-04-current: баланс токов | 20,93 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-04-current: баланс мощности | 9,587 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-05-current: баланс токов | 20,99 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-05-current: баланс мощности | 9,61 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-06-current: баланс токов | 21,01 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-06-current: баланс мощности | 9,622 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-07-current: баланс токов | 21,02 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-07-current: баланс мощности | 9,623 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-08-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-08-current: баланс мощности | 9,629 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-09-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-09-current: баланс мощности | 9,628 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-10-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-10-current: баланс мощности | 9,628 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-11-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-11-current: баланс мощности | 9,629 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-12-current: баланс токов | 21,04 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-12-current: баланс мощности | 9,634 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-13-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-13-current: баланс мощности | 9,629 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-14-current: баланс токов | 21,04 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-14-current: баланс мощности | 9,63 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-15-current: баланс токов | 21,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-1-iteration-15-current: баланс мощности | 9,627 × 10⁻⁹ | 1e-06 | Выполнен |
| Нелинейная сходимость, сетка 1 | 588,6 × 10⁻⁶ | 0,001 | Выполнен |
| Независимая последовательная электрическая схема | 9,627 × 10⁻⁹ | 1e-06 | Выполнен |
| Независимое кусочно-одномерное тепловое решение, К | 0,006371 | 0,15 | Выполнен |
| Передача джоулевой мощности в тепловую задачу | 0 | 1e-06 | Выполнен |
| level-2-iteration-01-current: баланс токов | 72,68 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-01-current: баланс мощности | 45,82 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-02-current: баланс токов | 76,37 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-02-current: баланс мощности | 48,29 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-03-current: баланс токов | 77,64 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-03-current: баланс мощности | 49,14 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-04-current: баланс токов | 78,43 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-04-current: баланс мощности | 49,6 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-05-current: баланс токов | 78,7 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-05-current: баланс мощности | 49,79 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-06-current: баланс токов | 78,89 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-06-current: баланс мощности | 49,88 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-07-current: баланс токов | 79,02 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-07-current: баланс мощности | 49,93 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-08-current: баланс токов | 79,05 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-08-current: баланс мощности | 49,95 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-09-current: баланс токов | 79,06 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-09-current: баланс мощности | 49,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-10-current: баланс токов | 79,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-10-current: баланс мощности | 49,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-11-current: баланс токов | 79,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-11-current: баланс мощности | 49,97 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-12-current: баланс токов | 79,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-12-current: баланс мощности | 49,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-13-current: баланс токов | 79,08 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-13-current: баланс мощности | 49,97 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-14-current: баланс токов | 79,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-14-current: баланс мощности | 49,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-15-current: баланс токов | 79,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-2-iteration-15-current: баланс мощности | 49,97 × 10⁻⁹ | 1e-06 | Выполнен |
| Нелинейная сходимость, сетка 2 | 588,6 × 10⁻⁶ | 0,001 | Выполнен |
| Независимая последовательная электрическая схема | 49,97 × 10⁻⁹ | 1e-06 | Выполнен |
| Независимое кусочно-одномерное тепловое решение, К | 0,003664 | 0,15 | Выполнен |
| Передача джоулевой мощности в тепловую задачу | 1,554 × 10⁻¹⁵ | 1e-06 | Выполнен |
| level-3-iteration-01-current: баланс токов | 37,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-01-current: баланс мощности | 25,92 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-02-current: баланс токов | 39,54 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-02-current: баланс мощности | 27,09 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-03-current: баланс токов | 40,97 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-03-current: баланс мощности | 27,67 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-04-current: баланс токов | 39,62 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-04-current: баланс мощности | 27,75 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-05-current: баланс токов | 39,88 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-05-current: баланс мощности | 27,87 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-06-current: баланс токов | 40,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-06-current: баланс мощности | 27,93 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-07-current: баланс токов | 40,07 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-07-current: баланс мощности | 27,94 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-08-current: баланс токов | 40,11 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-08-current: баланс мощности | 27,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-09-current: баланс токов | 40,02 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-09-current: баланс мощности | 27,95 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-10-current: баланс токов | 40,04 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-10-current: баланс мощности | 27,98 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-11-current: баланс токов | 40,06 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-11-current: баланс мощности | 27,98 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-12-current: баланс токов | 40,03 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-12-current: баланс мощности | 27,96 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-13-current: баланс токов | 40,06 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-13-current: баланс мощности | 27,99 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-14-current: баланс токов | 40,05 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-14-current: баланс мощности | 27,98 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-15-current: баланс токов | 40,04 × 10⁻⁹ | 1e-06 | Выполнен |
| level-3-iteration-15-current: баланс мощности | 27,96 × 10⁻⁹ | 1e-06 | Выполнен |
| Нелинейная сходимость, сетка 3 | 588,6 × 10⁻⁶ | 0,001 | Выполнен |
| Независимая последовательная электрическая схема | 27,96 × 10⁻⁹ | 1e-06 | Выполнен |
| Независимое кусочно-одномерное тепловое решение, К | 0,004215 | 0,15 | Выполнен |
| Передача джоулевой мощности в тепловую задачу | 3,997 × 10⁻¹⁵ | 1e-06 | Выполнен |
| Сходимость температуры по сетке, К | 0,0016 | 0,15 | Выполнен |
Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.
Модели, решения и программа
Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.
- Файл результатов: README.md8809 байт
- Решение электрического тока: level-1-iteration-15-current.anc475720 байт
- Модель электрического тока: level-1-iteration-15-current.fec1479 байт
- Тепловое решение: level-1-iteration-15-heat.anh452383 байт
- Тепловая модель: level-1-iteration-15-heat.feh1495 байт
- Решение электрического тока: level-2-iteration-15-current.anc1945883 байт
- Модель электрического тока: level-2-iteration-15-current.fec1484 байт
- Тепловое решение: level-2-iteration-15-heat.anh1854099 байт
- Тепловая модель: level-2-iteration-15-heat.feh1501 байт
- Решение электрического тока: level-3-iteration-15-current.anc7979818 байт
- Модель электрического тока: level-3-iteration-15-current.fec1487 байт
- Тепловое решение: level-3-iteration-15-heat.anh7614649 байт
- Тепловая модель: level-3-iteration-15-heat.feh1505 байт
- Программа встроенного Python: reproduce.py13324 байт
- Файл результатов: verification.json914 байт
Границы применимости
- Проводимость однородна внутри каждой материальной области и зависит от её средней температуры. Модель не определяет ресурс контакта, давление, окисление и допустимую эксплуатационную температуру.
- Проверка выполнена решателем FEMM 5.0 06Oct2026 во встроенной среде MicroPython. Она относится к данной версии геометрии, свойств и численных критериев. Снимки интерфейса FEMM выполняются отдельным согласованным проходом.