FEMM 5

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

Стационарный электротепловой расчёт контакта

Составной проводник 100 × 10 мм, глубина 1 мм: медь по 45 мм и контакт длиной 10 мм. Питание 20 мВ, торцы термостатированы при 20 °C. Проводимость каждого материала зависит от его средней температуры.

Цель работы — связать полевое распределение с измеряемой величиной, получить проверяемый численный результат и объяснить границы выбранной модели. Все параметры заданы непосредственно в программе. Собственная постановка содержит физический ориентир и критерии приёмки, поэтому результат можно исследовать без внешней библиотеки готовых решений.

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

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

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

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

Теория и контрольная модель

Стационарная электротепловая связь решается последовательными задачами. Электрический решатель вычисляет мощность каждой группы; она делится на объём и передаётся тепловому решателю. Средняя температура возвращается в закон проводимости. Итерации продолжаются до изменения температуры меньше 0.001 К с ограничением 40 шагов и релаксацией 0.5.

Внутри каждого материала проводимость считается постоянной и соответствует средней температуре области. Это упрощённая материальная обратная связь, а не пространственно непрерывная нелинейная модель. Независимая последовательная схема проверяет электрическое сопротивление, аналитическое кусочно-одномерное решение — температуру, равенство интегральных мощностей — корректность передачи источников. Все промежуточные модели сохраняются.

\sigma(T)=\frac{\sigma_{20}}{1+\alpha(T-293.15)},\quad q_{v,i}=P_i/V_i

Как читать расчёт и проверки

Программа создаёт три последовательные дискретизации. Для каждой сохраняются отдельная входная модель и собственное решение FEMM. Перед запуском решателя записанный файл закрывается и повторно открывается: проверяется именно сохранённая версия с русскими именами материалов, проводников и границ. В result.json величины records сопровождаются числом узлов и элементов, а checks содержит фактический остаток, предел и логический итог.

Для электрических моделей отдельно проверяются баланс токов на выводах и равенство суммарных джоулевых потерь и активной мощности на выводах. Для тепловых задач используются аналитический профиль, эквивалентное координатное преобразование или интегральный баланс источников и теплоотдачи. Эти проверки отвечают на разные вопросы: совпадение одной температуры или одного тока само по себе не подтверждает правильность всей постановки.

Практическое исследование

Сначала задайте оба температурных коэффициента равными нулю. Итерационная обратная связь должна исчезнуть, а результат должен совпасть с последовательным расчётом постоянных свойств. Затем включайте коэффициенты по одному.

Увеличьте напряжение питания и объясните изменение тока через изменение сопротивления нагретого контакта. Не переносите вывод о характере обратной связи на режим заданного тока: источник питания меняет физику стационарного равновесия.

Сравните релаксацию 0.5 и 0.8 при одинаковом допуске. Сопоставьте число итераций и окончательные значения. Затем уточните сетку; малый итерационный остаток на грубой сетке не гарантирует точности самой температуры.

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

Составной проводник 100 × 10 мм, глубина 1 мм: медь по 45 мм и контакт длиной 10 мм. Питание 20 мВ, торцы термостатированы при 20 °C. Проводимость каждого материала зависит от его средней температуры.

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Напряжение0,02ВПринято в учебной постановке
α меди0,003931/КПринято в учебной постановке
α контакта0,0041/КПринято в учебной постановке
k контакта1Вт/(м К)Принято в учебной постановке
Релаксация0,51Принято в учебной постановке

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

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

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

Программа встроенного Python FEMM 5
Python · reproduce.py
"""Самостоятельная лабораторная работа курса 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"]

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

Температура, К: level-3-iteration-15-heat.anh
Визуализация сохранённого решения FEMM 5 level-3-iteration-15-heat.anh. Абсолютная температура по сохранённым узловым значениям. Показана расчётная область. Контуры деталей взяты из той же модели. Области вне сохранённых треугольников не заполняются. Это научный график сохранённых данных. Нажмите на карту, чтобы открыть её отдельно и увеличить.

Окна FEMM 5

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

Рабочая область модели «Стационарный электротепловой расчёт контакта». Нативный препроцессор FEMM 5.
Рабочая область модели «Стационарный электротепловой расчёт контакта». Нативный препроцессор FEMM 5. Открыть в полном размере
Сохранённое решение «Стационарный электротепловой расчёт контакта». Температура T, К, в сохранённой тепловой задаче связанного стационарного расчёта контакта; изотермы скрыты.
Сохранённое решение «Стационарный электротепловой расчёт контакта». Температура T, К, в сохранённой тепловой задаче связанного стационарного расчёта контакта; изотермы скрыты. Открыть в полном размере

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

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

Результаты расчётов и производные итоги
Ток, АИстория итерацийЭлектрическая модельИтерацийТемпературная невязка, КТемпература в центре, КСопротивление, ОмМощность, ВтМодельМасштаб сетки, мм
15,92872115 точек; полные данные JSONlevel-1-iteration-15-current.fec15588,55175 × 10⁻⁶329,795890,00125559360,31857442level-1-iteration-15-heat.feh0,5
15,92673515 точек; полные данные JSONlevel-2-iteration-15-current.fec15588,62862 × 10⁻⁶329,794660,00125575020,31853468level-2-iteration-15-heat.feh0,25
15,92620515 точек; полные данные JSONlevel-3-iteration-15-current.fec15588,64885 × 10⁻⁶329,793060,0012557920,3185241level-3-iteration-15-heat.feh0,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Выполнен
Нелинейная сходимость, сетка 1588,6 × 10⁻⁶0,001Выполнен
Независимая последовательная электрическая схема9,627 × 10⁻⁹1e-06Выполнен
Независимое кусочно-одномерное тепловое решение, К0,0063710,15Выполнен
Передача джоулевой мощности в тепловую задачу01e-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Выполнен
Нелинейная сходимость, сетка 2588,6 × 10⁻⁶0,001Выполнен
Независимая последовательная электрическая схема49,97 × 10⁻⁹1e-06Выполнен
Независимое кусочно-одномерное тепловое решение, К0,0036640,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Выполнен
Нелинейная сходимость, сетка 3588,6 × 10⁻⁶0,001Выполнен
Независимая последовательная электрическая схема27,96 × 10⁻⁹1e-06Выполнен
Независимое кусочно-одномерное тепловое решение, К0,0042150,15Выполнен
Передача джоулевой мощности в тепловую задачу3,997 × 10⁻¹⁵1e-06Выполнен
Сходимость температуры по сетке, К0,00160,15Выполнен

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

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

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

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

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