Если одно из понятий незнакомо, вернитесь к предыдущему занятию и воспроизведите его численный пример. После этого переходите к новой постановке.
Место занятия в инженерной методике
Расчётная лабораторная работа · Определение теплового сопротивления и установившегося нагрева
Инженерный вопрос. Каждая ли точка графика восстанавливается из таблицы и своего источника?
Температура, тепловое сопротивление и постоянная времени связывают потери с охлаждением и длительностью включения. Это позволяет сравнить материалы, отвод тепла и рабочие циклы по количественным критериям.
Последовательность решения, отчёт и критерии результата
Результат получают из наблюдаемых величин и проверяют в условиях данного практикума.
Последовательность решения
Обосновать постановку и способ измерения. Согласуйте источники мощности, теплопроводность и условия отвода; выберите температуру, поток или тепловое сопротивление как искомую характеристику.
Результат этого занятия. Подписанные ряды и таблица с раздельным происхождением и оценкой расхождения профилей.
Данные именно этого опыта. Сопоставьте координаты и температуры аналитического ряда и отдельного фактического ряда FEMM.
Оформление наблюдений. Температуры в заданных местах, потоки через границы, мощности по областям и свойства; для сопротивления — определённая разность температур и мощность.
Как обосновать результат
Проверка из практикума. Сравнивайте объёмный источник в Вт/м³ с полным потоком в Вт после интегрирования по объёму. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.
Независимый контроль. Сопоставьте суммарную мощность источников с выходящим тепловым потоком и аналитическим пределом, допустимым для этой геометрии.
Критерий выполнения. Чистый численный self-check работает без numpy/scipy; таблица и график совпадают; неподдерживаемая функция сообщает ограничение вместо скрытой подмены.
Точность и расхождения. Сеточную устойчивость температуры и потока оценивайте отдельно. Неопределённость теплоотдачи и теплопроводности нельзя устранить уменьшением конечного элемента.
Основание сравнения. Опора — закон Фурье и аналитический тепловой баланс из занятия. Теплоотдача и свойства материала являются исходными данными; одномерный предел применим только при согласованном пути тепла.
Вывод для устройства
Определите доминирующий тепловой путь и влияние материала или границы; решение о допустимом нагреве требует заданной температуры среды и предела материала.
Границы вывода. Результат зависит от источников, среды, теплоотдачи и теплоёмкости. Упрощённый эталон не заменяет неизвестные условия охлаждения реального устройства.
Теория и вывод формул
Представление расчётных данных объединяет обработку массивов и построение графиков. Во встроенном Python FEMM 5 для этого используются функция plot и доступные функции пакетов numpy и scipy.
Соглашения об обозначениях и единицах
\(i(t)\), \(u(t)\) — мгновенные значения; \(\widehat I\), \(\widehat U\) — комплексные амплитуды; \(\underline I_{\text{д}}\), \(\underline U_{\text{д}}\) — комплексные действующие значения. Для синусоиды \(\widehat I=\sqrt{2}\,\underline I_{\text{д}}\); действующее значение тока равно \(|\underline I_{\text{д}}|\). Нормировка обязательно учитывается в формулах мощности.
\(\Phi=\int_S\mathbf B\cdot\mathrm d\mathbf S\) — поток через ориентированную поверхность; \(\Psi=\sum_k\oint_{C_k}\mathbf A\cdot\mathrm d\mathbf l\) — потокосцепление последовательных витков с согласованными замкнутыми контурами. Только при одинаковом сцепленном потоке каждого витка \(\Psi=N\Phi\). Обе величины измеряются в веберах: число витков безразмерно. Запись «Вб·виток» подчёркивает суммирование.
\(\theta_{\text{м}}\), \(\Omega\) (также \(\omega_{\text{мех}}\)) — механические угол и угловая скорость. Для основной гармоники \(\theta_{\text{э}}=p\theta_{\text{м}}\), \(\omega_{\text{э}}=p\Omega\), где \(p\) — число пар полюсов. Геометрический период зубцов задаётся отдельно. В производных по углу используйте радианы.
Статическая индуктивность \(L_{\text{ст}}=\Psi/i\) — наклон секущей из начала координат; это определение используется при \(\Psi(0)=0\) и \(i\ne0\). Динамическая индуктивность \(L_{\text{дин}}=\partial\Psi/\partial i\) — наклон касательной (дифференциальная, инкрементальная); положение и остальные токи фиксированы. Для линейной характеристики без смещения обе равны одной индуктивности \(L\). При постоянных магнитах и взаимном возбуждении сначала учитывают ненулевое смещение потокосцепления.
Положительные направления, оси и специальные индексы определяются в конкретной задаче. Единицу берите из условия или заголовка таблицы; перед подстановкой в формулу СИ переводите миллиметры в метры, миллигенри в генри и градусы в радианы.
Численные результаты обычно показаны с четырьмя значащими цифрами; для сравнения близких значений в таблицах сходимости сохранено больше цифр. Полные значения остаются в исходных расчётных данных. Малые остатки вычисления координат на осях показаны как ноль; малые физические величины сохраняются в показательной записи.
Графики строятся встроенной функцией plot; массивы и численные операции задаются функциями numpy и scipy из поставки FEMM 5.
График — представление чисел, а не отдельный источник истины. Исходные координаты, единицы и выборки сохраняют независимо от изображения; отображение собственной сетки не следует выдавать за рассчитанную FEMM сетку.
Вывод контрольного соотношения
Вычислите аналитический температурный профиль и сохраните те же точки, которые показаны на графике.
Постоянная теплопроводность; параболический профиль является аналитическим решением, с которым сравнивают FEM.
Условие симметрии даёт T'(0)=0. Двойное интегрирование уравнения Пуассона даёт параболу.
Превышение температуры в центре равно 10^{6}\cdot 0{,}01^{2}/(2\cdot 10)=5 К.
Объём 2aS=2\cdot 10^{-5}\,\mathrm{м^3} выделяет 20 Вт; каждая торцевая сторона отводит 10 Вт.
Границы применимости. Постоянная теплопроводность; параболический профиль является аналитическим решением, с которым сравнивают FEM.
Связь с опытом в FEMM
Постройте табличный и графический профили T(x); затем добавьте отдельный ряд фактически извлечённых значений FEMM, не смешивая происхождение рядов.
Сначала вычислите контрольное значение вручную, затем сформулируйте ожидаемый знак и зависимость от одного параметра. Повторите опыт в рабочей копии с изменением только этого параметра. Сохраняйте геометрию, единицы, глубину, материалы, источники и граничные условия вместе с результатом. Успешное завершение решателя означает решение введённой модели, но само по себе не доказывает её соответствие устройству.
Проверка и границы вывода
Чистый численный self-check работает без numpy/scipy; таблица и график совпадают; неподдерживаемая функция сообщает ограничение вместо скрытой подмены.
Сравнивайте объёмный источник в Вт/м³ с полным потоком в Вт после интегрирования по объёму.
Интерполяция между редкими точками не создаёт дополнительные полевые решения; каждая серия должна иметь подпись происхождения.
Пояснения к официальному руководству
Подробности, которые следует учитывать при настройке и проверке модели. Все учебные пояснения.
Изображение результата и исходные числа экспортируются отдельно
Edit/Copy as Bitmap копирует текущий вид в буфер как растровое изображение. Команды семейства savebitmap записывают такой вид в файл; воспроизводимый рисунок требует заранее задать окно, шкалу, отображаемую величину и подписи. Это изображение области модели, а не полный снимок нативного окна с панелями.
FEMM 5 не создаёт векторный экспорт. Старые команды savemetafile сохранены только для совместимости и не выполняют сохранение; отсутствие ошибки после их вызова не подтверждает появление файла. Перед включением рисунка в отчёт проверьте существование, размеры и читаемость реально полученного изображения.
Численные данные профиля сохраняют кнопкой Export в окне X-Y Plot в CSV с заголовками. Для отчёта полезны оба файла: рисунок показывает тенденцию, CSV сохраняет исходные отсчёты. Укажите единицы, длину контура, количество точек, сторону чтения на интерфейсе и состояние сглаживания. Наличие CSV не означает, что вычислительная модель или её сетка прошли проверку.
Проверьте на своей модели
Сохраните один график и его CSV, откройте оба и сопоставьте крайние значения.
Не включайте пустой или отсутствующий metafile в пакет; для воспроизводимого рисунка используйте реально поддерживаемый растровый экспорт.
Имя open имеет два назначения. Единственный аргумент с расширением .fem/.fee/.feh/.fec открывает документ FEMM; файловое чтение/запись определяется иными аргументами. Для ясности открытия модели используйте opendocument, а для результатов — with open(path, "w", newline="") as f. Контекстный менеджер закрывает файл до следующего шага серии; ожидание конца сценария при множестве открытых файлов может исчерпать дескрипторы.
Пути с кириллицей поддерживаются; обратная косая черта нормализуется, а возвращаемые пути используют прямую. В строке Python обратную черту нужно экранировать либо использовать прямые разделители. Текстовый режим преобразует перевод строки платформы; rb/wb сохраняет точные байты. Ошибки файловых операций вызывают OSError и должны фиксироваться, а не превращаться в строку якобы успешного расчёта.
Для числового массива np.savetxt поддерживает delimiter и header, пишет заголовок с # и пятнадцать знаков после точки, но не параметр fmt. Общий CSV со строками, кавычками, запятыми внутри поля или переводом строки требует CSV-парсера. Ручной split(",") допустим лишь для заранее ограниченного формата собственных числовых файлов. По актуальному описанию csv.writer/reader используют newline="", иначе на Windows возможны лишние пустые строки.
print в FEMM по умолчанию разделяет аргументы табуляцией. Для машинного журнала задавайте sep/end явно; сообщения об ошибках можно направлять в sys.stderr. Внешний TCP-клиент не получает этот вывод через строку результата команды.
FEMM не задаёт отдельный фиксированный предел кучи сценария: объём массивов ограничен доступной памятью системы. gc.mem_free сообщает свободное место внутри уже удерживаемой памяти, а не запас всей машины. gc.threshold принимается, но игнорируется. gc.collect принудительно запускает сборку; несколько вызовов могут потребоваться для возврата большой области ОС. Это не повод хранить крупную сетку списком отдельных Python-чисел.
Таблица Р.40.1. Файлы, таблицы, память и протокол серии
Функция / группа
Контракт, важный для практикума
os.getcwd, os.chdir; getcwd, setcurrentdirectory
Чтение и установка текущего каталога
os.listdir([path])
Список имён; сортируйте явно, если порядок серии существенен
os.mkdir, os.makedirs
Один каталог либо также отсутствующие родители
os.remove/unlink, os.rmdir, os.rename
Файл, каталог и смена имени/пути — разные операции
os.stat(path)
10 полей: mode,inode,device,links,uid,gid,size,atime,mtime,ctime; size находится в [6]
У сетки есть два разных числа строк: Nn узлов и Ne треугольников. Вводные абзацы PDF описывают готовые numpy-массивы внутри FEMM и плоскую передачу через IPC с восстановлением формы обёрткой. Нативная проверка 16.10.2026 подтвердила массивы координат и полей, но обнаружила важное отличие getallelements: вместо документированной Ne×7 матрицы текущая сборка возвращает кортеж из четырёх массивов. Поэтому сначала проверяйте фактический контейнер, а не назначайте ему форму по краткой таблице.
На четырёх сохранённых решениях магнитного, электростатического, теплового и токового модулей получено: connectivity — Ne×3 int32, centroids — Ne×2 float64, areas — Ne float64, groups — Ne int32. Это четыре члена tuple в таком порядке. Первая тройка connectivity совпала с первыми полями getelement(1), а координаты getallnodes()[0] — с getnode(1). Передать np.int32 аргументом getallelements нельзя: в проверенной сборке команда принимает ноль аргументов. Эта проверка внутреннего Python не устанавливает форму ответа внешнего IPC.
Нумерация узлов API начинается с 1, а индексация массива Python и matplotlib — с 0. В элементной строке первые три поля являются номерами узлов; следующие два — координатами центра, затем идут площадь и группа. При переводе в matplotlib вычитайте 1 только из номеров узлов. Храните индексы как int32: int16 переполняется после 32767 и может превратить корректную сетку в набор отрицательных индексов.
Вычитать единицу требуется только из номеров узлов треугольника. Координаты, площадь и группа сохраняют свои значения.
Обозначения и единицы
N_n — число узлов; i_{\mathrm{FEMM}} — номер API от 1; i_{\mathrm{Python}} — индекс массива от 0. Все три величины целочисленные и безразмерные.
Условия применения. Для связности используйте int32. Знаковый int16 ограничен диапазоном −32768…32767 и может молча переполниться.
Формула выделяет математический смысл вычитания 1 из трёх индексов в примере matplotlib. Контейнер getallelements в проверенной сборке отличается от описания PDF; это отдельно разобрано в разделе.
Потенциалы V в электростатике и токопроводимости, а также T в теплопроводности возвращаются по узлам. Их производные D, J, F возвращаются по элементам и не сглаживаются. Магнитный mo_getalla согласно стр.115 выдаёт A в центрах элементов; это принципиальное исключение, которое нельзя соединить с массивом узлов как равнодлинные данные.
Для узлового графика A пример руководства получает координаты mo_getnode(k), затем A через mo_getpointvalues(x,y)[0]. Для крупной серии заранее выделяйте массивы и заполняйте их, а не накапливайте списки Python-чисел. Сроки выполнения примера в руководстве относятся к его модели и компьютеру; их нельзя обещать для произвольной сетки.
Сравнение показывает, почему массивы нужно выделять заранее и читать крупными блоками. Числа относятся к одному измерению автора: переносить их на свой компьютер как норматив скорости нельзя.
Таблица М.Н.38. Пример влияния контейнера на чтение сетки
Хранение данных узлов
Время цикла для 20 000 элементов
numpy array
1,9 мс
Python list
69,7 мс
Это конкретное измерение автора руководства, не гарантированный benchmark курса. Контекст: модель около 73 000 узлов и 146 000 элементов; сравнивается цикл с различным хранением узловых данных.
Массив уменьшает количество отдельных объектов и нагрузку сборщика памяти; перенос больших массивов выполняйте одной операцией.
В гармонической магнитной и токовой постановке фазовые величины могут быть комплексными. Перед построением рисунка выберите \operatorname{Re}, \operatorname{Im}, модуль или фазу как отдельный шаг обработки. Смешение узлового потенциала, элементного поля и сглаженного точечного запроса может создать ошибку анализа даже при внешне одинаковом изображении.
Таблица Р.44.1. Узлы, элементы и пакетное чтение поля
Запрос
Форма и расположение
*_getallnodes
Nn×2: координаты всех узлов
*_getallelements в PDF
Ne×7: n_{1},n_{2},n_{3},xc,yc,area,group
*_getallelements в проверенной сборке
tuple: connectivity Ne×3; centroids Ne×2; areas Ne; groups Ne
mo_getallb / mo_getalla
Ne×2: B; Ne: A в центрах элементов
eo_getalld / eo_getallv
Ne×2: D; Nn: узловой V
ho_getallf / ho_getallt
Ne×2: F; Nn: узловой T
co_getallj / co_getallv
Ne×2: J; Nn: узловой V
mo_getallgapb / mo_getallgapa
npts×2: B_r,B_{\theta }; npts: A; по умолчанию npts=360
mo_getallgapharmonics
Nh×6: acc,acs,brc,brs,btc,bts для каждой гармоники
Проверьте на своей модели
Проверьте размеры всех массивов по numnodes/numelements, прежде чем объединять столбцы.
Подтвердите, что каждая тройка индексов после вычитания 1 лежит в диапазоне 0…Nn−1.
Для mo_getalla укажите расположение значений по элементам; для ho_getallt — по узлам.
Возвраты интегралов, гармоники зазора и ориентация контура
Перед интегралом очищайте старый контур или выбор областей и создавайте новый явно. Числовой type выбирает физическую операцию в конкретном модуле: одинаковое число не переносится из mo в eo/ho/co. Например, код 2 у mo_blockintegral означает энергию, у eo/ho_blockintegral — объём, а у co_blockintegral — полную мощность.
Перед вызовом mo_blockintegral выберите нужный документ результата и найдите код именно этой команды. Очистите прежнее выделение, выберите области интегрирования и затем запишите код вместе с результатом и единицей.
Таблица М.Н.7. Результаты и коды mo_blockintegral
Код
Величина
Единица / смысл
0
Интеграл A\cdot J
Единицы зависят от определения A и источника; см. формулу индуктивности
Момент взвешенного тензора напряжений, постоянная составляющая
Н·м
23
Момент взвешенного тензора напряжений, 2\omega
Н·м
24
Интеграл R^{2}: момент инерции / плотность
м⁵ при объёмном интегрировании
25
F_x /r взвешенного тензора напряжений, 1\omega
Н
26
F_y /z взвешенного тензора напряжений, 1\omega
Н
27
Момент взвешенного тензора напряжений, 1\omega
Н·м
28
F_x /r силы Лоренца, 1\omega
Н
29
F_y /z силы Лоренца, 1\omega
Н
30
Момент Лоренца, 1\omega
Н·м
Все коды 0–30 сохранены. Члены 1\omega описывают взаимодействие постоянного решения с малым переменным полем в режиме дифференциальной проницаемости; это не обычная гармоническая сила 2\omega.
У кода 24 для получения момента инерции результат умножают на массовую плотность, кг/м³. В плоской задаче ось проходит через x=y=0, в осесимметричной — через r=0.
Перед вызовом mo_getpointvalues выберите нужный документ результата и найдите код именно этой команды. Здесь приведён порядок всех возвращаемых полей; физическую точку и единицы координат задают до запроса. Позиции таблицы начинаются с 1, индексы Python — с 0.
Таблица М.Н.8. Результаты и коды mo_getpointvalues
Позиция
Символ
Величина
Единица / нормировка
1
A
Векторный потенциал A либо поток \varphi в осесимметрии
Вб/м либо Вб; учитывайте тип постановки
2
B_{1}
B_x в плоской задаче или B_r в осесимметричной
Тл
3
B_{2}
B_y или B_z
Тл
4
Sig
Удельная электрическая проводимость \sigma
Единица возврата в этой таблице PDF не указана
5
E
Плотность запасённой энергии
Дж/м³
6
H_{1}
Hx или Hr
А/м
7
H_{2}
Hy или Hz
А/м
8
Je
Вихревая плотность тока
Масштаб А/м² или МА/м² таблицей не уточнён
9
J_s
Заданная плотность тока
Масштаб А/м² или МА/м² таблицей не уточнён
10
Mu1
Относительная \mu _{x} или \mu _{r}
1
11
Mu2
Относительная \mu _{y} или \mu _{z}
1
12
Pe
Плотность омических потерь
Вт/м³
13
Ph
Плотность гистерезисных потерь
Вт/м³
14
ff
Коэффициент заполнения шихтованного материала
1
Позиции здесь записаны от 1 как в порядке выдачи; индекс Python равен позиции минус 1. Все 14 результатов следует распаковывать в этом порядке.
В магнитостатике мнимые части равны нулю. Не подставляйте единицы ввода mi_addmaterial в вывод Sig/Je/J_s без проверки конкретной сборки на однородном эталоне: исходная таблица их не объявляет.
Перед вызовом mo_makeplot выберите нужный документ результата и найдите код именно этой команды. Сначала постройте контур; PlotType выбирает величину вдоль него. Координата X графика — расстояние по пути, число отсчётов не уточняет сетку.
Таблица М.Н.9. Результаты и коды mo_makeplot
Код
Величина
Единица / смысл
0
Потенциал A или \varphi
Вб/м или Вб
1
|B|
Тл
2
B·n
Тл
3
B·t
Тл
4
|H|
А/м
5
H\cdot n
А/м
6
H\cdot t
А/м
7
Вихревая плотность тока Jeddy
Нормировку возврата сверить с заголовком экспорта
8
Полная плотность тока Jsource + Jeddy
Нормировку возврата сверить с заголовком экспорта
NumPoints задаёт число отсчётов на имеющемся решении, а не размер сетки. При Filename данные сохраняются как CSV; четвёртый FileFormat принят для совместимости и игнорируется.
Перед вызовом mo_showvectorplot выберите нужный документ результата и найдите код именно этой команды. Код выбирает физический вектор и его комплексную составляющую; масштаб стрелок задаётся отдельно и не меняет решение.
Таблица М.Н.42. Результаты и коды mo_showvectorplot
Код
Величина
Единица / смысл
0
Выключено
—
1
Re(B)
Тл
2
Re(H)
А/м
3
Im(B)
Тл
4
Im(H)
А/м
5
Re(B) и Im(B)
Тл
6
Re(H) и Im(H)
А/м
Перед вызовом mo_showdensityplot выберите нужный документ результата и найдите код именно этой команды. Код выбирает смысл цветовой шкалы. При сравнении вариантов фиксируйте одинаковую величину и границы шкалы.
Таблица М.Н.47. Результаты и коды mo_showdensityplot
Код
Величина
Единица / смысл
bmag
|B|
Тл
breal
Действительная составляющая B
Тл
bimag
Мнимая составляющая B
Тл
logb
Логарифмический модуль B
Логарифмическая шкала
hmag
|H|
А/м
hreal
Действительная составляющая H
А/м
himag
Мнимая составляющая H
А/м
jmag
|J|
Нормировку сверить с легендой
jreal
Действительная составляющая J
Нормировку сверить с легендой
jimag
Мнимая составляющая J
Нормировку сверить с легендой
Имена — строки Python. При legend = −1 остальные параметры игнорируются и используются настройки по умолчанию.
Различайте количество физических величин и конкретный тип Python-контейнера. Документация часто пишет «один результат», не устанавливая скаляр или одноэлементный кортеж. Ранее выполненный нативный эталон курса подтвердил кортеж для eo_blockintegral(0) в своём режиме; это не проверка всех других кодов. Перед массовой выгрузкой исследуйте repr/type нужного ответа на малой модели.
Обе команды возвращают четыре величины в одинаковом порядке. Используйте глубину и масштаб единицы в метрах, чтобы связать координаты модели с физическими интегралами; частоту нельзя принимать за геометрическую глубину.
Таблица М.Н.10. Порядок mo_getprobleminfo и co_getprobleminfo
Позиция
Величина
Значение / единица
1
Тип задачи
0 — плоская; 1 — осесимметричная
2
Частота
Гц
3
Глубина плоской задачи
м
4
Масштаб единицы длины геометрии
м на одну единицу координат
Таблицы на обеих страницах совпадают по порядку четырёх результатов. Позиция 1 в Python имеет индекс 0. Для eo/ho возвращаются только три значения: тип, глубина в метрах, масштаб единицы в метрах (без частоты).
mo_lineintegral может возвращать среднее и полный интеграл, либо компоненты постоянной и удвоенной по частоте силы. Члены 2\omega имеют смысл при ненулевой частоте. Текст упоминает взаимодействие постоянного и малого переменного поля в режиме дифференциальной проницаемости, но таблица не задаёт дополнительные индексы 1\omega: не добавляйте их в распаковку по предположению.
Перед вызовом mo_lineintegral выберите нужный документ результата и найдите код именно этой команды. Заново задайте контур и его направление: таблица связывает числовой type с физической величиной, а не с номером строки меню другого модуля.
Таблица М.Н.6. Результаты и коды mo_lineintegral
type
Операция
Результат 1
Результат 2
Результат 3
Результат 4
0
Поток B\cdot n
Полный поток
Средняя нормальная B
—
—
1
Циркуляция H\cdot t
Полный интеграл
Средняя касательная H
—
—
2
Геометрия контура
Длина
Площадь поверхности
—
—
3
Сила тензора напряжений
F_x /r, постоянная
F_y /z, постоянная
F_x /r, 2\omega
F_y /z, 2\omega
4
Момент тензора напряжений
Постоянный момент
Момент 2\omega
—
—
5
Квадрат B\cdot n
Полный интеграл (B\cdot n)^{2}
Среднее (B\cdot n)^{2}
—
—
В исходной строке 2 колонки сдвинуты. Восстановлена пара «длина, площадь поверхности» по §2.3.10 и нативной проверке курса.
Физические единицы: поток — Вб, B — Тл, циркуляция H — А, H — А/м, длина — м, площадь — м², сила — Н, момент — Н·м. Для интеграла квадрата используйте определение и фактическую нормировку операции; это не поток и не сила.
В AC постоянная составляющая означает среднюю за период. Члены 2\omega относятся к ненулевой частоте. Текст PDF упоминает 1\omega-взаимодействие, но не добавляет в эту таблицу новые возвращаемые позиции.
Контурный bendcontour требует не менее двух точек, угла от -180^\circ до +180{}^\circ и положительного anglestep. При менее чем двух точках операция игнорируется. Ориентация n/t задаётся направлением обхода; при смене направления отдельно проверяются знаки потока, напряжения и температурной разности.
У mo_gapintegral коды 0/2/3/5 возвращают одну величину момента или энергии, а 1/4/6 — две компоненты силы F_x,F_y. mo_getgapharmonics без n сообщает максимальный доступный порядок; с n даёт шесть коэффициентов. Угол в API задаётся в градусах, тогда как math.cos/math.sin принимают радианы.
Три пары коэффициентов mo_getgapharmonics описывают потенциал, радиальную и касательную индукцию одной гармоники. Восстановив её, можно сопоставить результат с прямым чтением поля зазора.
Обозначения и единицы
n — безразмерный порядок пространственной гармоники в mo_getgapharmonics(BdryName,n); \theta — угол реконструкции, рад. \theta_{\mathrm{deg}} — та же выбранная точка в градусах: такой угловой аргумент принимают mo_getgapa и mo_getgapb, но не mo_getgapharmonics.
a_{cc},a_{cs} — коэффициенты потенциала, Вб/м; b_{rc},b_{rs},b_{tc},b_{ts} — коэффициенты индукции, Тл. Порядок этих шести коэффициентов совпадает с порядком возврата API.
Условия применения. Воздушный зазор рассматривается в плоской магнитной задаче. При использовании math.sin/\cos переводите градусы в радианы. Сумма по нескольким n нужна для полного поля, если присутствуют другие гармоники.
В PDF записаны три строки без номера, а ниже сказано «angle is specified in degrees». В курсе явно добавлен перевод градусов в радианы, чтобы не передавать градусы напрямую в math.sin/\cos.
Перед вызовом mo_gapintegral выберите нужный документ результата и найдите код именно этой команды. Интегрирование относится к именованному элементу воздушного зазора. Таблица также показывает, надо ожидать один физический результат или две компоненты силы.
Таблица М.Н.11. Результаты и коды mo_gapintegral
Код
Величина
Единица / смысл
0
Постоянный / средний момент
Н·м; один результат
1
Постоянная / средняя сила
Н; два результата F_x,F_y
2
Запасённая энергия
Дж; один результат
3
Момент 2\omega
Н·м; один результат
4
Сила 2\omega
Н; два результата F_x,F_y
5
Момент взаимодействия
Н·м; один результат
6
Сила взаимодействия
Н; два результата F_x,F_y
BdryName — имя элемента воздушного зазора. Коды 5/6 относятся к взаимодействию опорного и малого переменного решения; их не следует принимать за самостоятельный полный момент произвольного AC-режима.
Проверьте на своей модели
Выберите один контур и проверьте смысл изменения знака при его обходе в другую сторону.
Прочитайте фактический контейнер нужного integral перед распаковкой; сохраните версию FEMM.
Восстановите B_r по коэффициентам одной гармоники и сравните с прямым getgapb в согласованных углах.
makeplot строит зависимость выбранной величины вдоль текущего контура. NumPoints задаёт выборку графика, а не число конечных элементов. Если передать Filename, FEMM 5 записывает CSV с заголовком; старый четвёртый FileFormat принимается, но игнорируется. Изменение расширения имени файла не превращает CSV в изображение.
Встроенный plot принимает массив x и до семи массивов y с необязательными подписями и работает без внешнего CPython. Для сложного оформления, подграфиков, логарифмических осей, аннотаций и векторного файла можно подключить matplotlib. savebitmap сохраняет вид FEMM; savemetafile в Qt оставлен как совместимое имя и ничего не делает.
У showdensityplot порядок параметров различается: магнитная команда размещает type после верхней/нижней границ, а остальные модули — перед ними. У магнитной карты type строковый (bmag, breal, bimag, logb, hmag/hreal/himag, jmag/jreal/jimag), у других модулей он числовой. Вызов с −1 для настроек по умолчанию документирован у mo_showdensityplot; не переносите его на другие карты без проверки.
У всех showcontourplot число линий −1 означает использование настроек по умолчанию и позволяет сокращённый вызов с одним аргументом. Для обычного числа линий задавайте пределы. У mo/co дополнительный type выбирает real, imag или both; у стационарных eo/ho такого выбора нет. В тепловом описании lower_V/upper_V — сохранённые имена аргументов, но физическая величина изолиний — температура.
При сравнении режимов фиксируйте пределы карты, размер стрелок, состояние smoothing, положение контура и компоненту комплексной величины. Выбор реальной части зависит от фазы возбуждения, а модуль не сохраняет знак. Изображение и исходная числовая таблица должны сопровождать друг друга.
Таблица Р.46.1. Числовой график, карта поля и экспорт
Карта
Порядок аргументов
mo_showdensityplot
legend,gscale,upper_B,lower_B,type
eo_showdensityplot
legend,gscale,type,upper_D,lower_D
ho/co_showdensityplot
legend,gscale,type,upper,lower
mo_showcontourplot
numcontours,lower_A,upper_A,type
eo/ho_showcontourplot
numcontours,lower_V,upper_V
co_showcontourplot
numcontours,lower_V,upper_V,type; скобка исправлена по описанию PDF
Проверьте на своей модели
Экспортируйте makeplot в CSV и убедитесь, что количество строк соответствует выбранной выборке.
Постройте два режима на одной шкале и отдельно подпишите выбранную комплексную компоненту.
Не применяйте параметры магнитной карты к тепловой по памяти.
При импорте matplotlib, xlsxwriter, zipfile или pandas FEMM обращается к отдельному CPython-процессу на этой же машине. FEMM не устанавливает эти библиотеки автоматически. Для интерактивного графика руководство задаёт CPython не ниже 3.9, matplotlib и оконный backend; Tk достаточен, Qt через PyQt6/PySide6 необязателен. Без графического backend неграфические библиотеки моста могут работать.
Интерпретатор выбирается автоматически либо задаётся через Edit → Scripting Preferences и pybridge.set_interpreter; эта настройка сохраняется. FEMMQT_PYTHON задаёт выбор на один запуск. Ошибка BridgeError перечисляет проверенные интерпретаторы, поэтому устанавливать пакет нужно именно в выбранное окружение, а не в произвольный Python из PATH. pybridge.info позволяет включить версии и backend в описание условий построения рисунка.
Числа, строки, массивы и контейнеры этих значений могут передаваться по значению; сложные объекты остаются во внешнем процессе и доступны через proxy. put отправляет массив целиком, fetch возвращает значение в FEMM. DataFrame и его столбец могут оставаться удалёнными; для локального массива используется fetch(column.to_numpy()). Передача массива целиком обычно экономнее тысячи обращений к отдельным элементам.
Открытый файл принадлежит своему процессу: библиотеке внешнего CPython передайте путь либо файл, открытый через pybridge.open. Встроенную Python-функцию нельзя передать внешнему оптимизатору или обработчику графического события как callback. Определите функцию через pybridge.exec на внешней стороне либо оставьте управляющий цикл и вызовы FEMM во встроенном интерпретаторе.
Пространство eval/exec сохраняется между вызовами. restart/shutdown и отмена зависшего вызова клавишей Esc уничтожают внешний процесс и его рисунки; при следующем обращении он может стартовать заново, но прежние переменные и proxy нужно восстановить. Рисунки находятся в отдельных окнах и не встраиваются в окно FEMM. Одновременно допускается один вызов моста.
Таблица Р.47.1. Внешний CPython и граница передачи объектов
Вход в pybridge
Назначение
import_module(name)
Получить удалённый модуль
eval(expr), exec(statements)
Вычислить выражение или исполнить код во внешнем пространстве
put(name,value), fetch(obj)
Передать по имени во внешний процесс / получить значение в FEMM
open(path,mode,...)
Открыть файл во внешнем процессе; newline="" показан для CSV
set_interpreter(path), info()
Выбрать CPython / прочитать сведения окружения
restart(), shutdown()
Сбросить или завершить вспомогательный процесс и его окна
Проверьте на своей модели
Сохраните pybridge.info перед экспортом рисунка.
Передавайте данные таблицы через write_row/write_column или массив, а не вызовом на каждую ячейку.
Объясните, почему путь файла пересылается, а локальный FileIO или функция FEMM — нет.
import numpy и import scipy внутри FEMM выбирают локальную ulab-библиотеку. Это позволяет выполнять численную обработку без передачи каждого вектора между процессами. Руководство перечисляет комплексную линейную алгебру, FFT, полиномы, линейную интерполяцию, свёртку, trapz и ввод/вывод таблиц. Наличие отдельного имени в перечне не гарантирует весь набор аргументов соответствующего CPython API.
Более широкие методы вызываются явно через pybridge.import_module или exec. В пространстве pybridge.eval имя np означает уже внешний NumPy; одинаковая краткая переменная в двух пространствах не указывает на один объект. Сначала закончите локальный расчёт массива, затем передайте его для одной крупной внешней операции.
Когда один шаг оптимизации должен запустить FEMM, удобно оставить цикл во встроенном scipy.optimize.fmin/newton и вызывать решатель из локальной целевой функции. Внешний least_squares не сможет вызвать функцию, определённую внутри FEMM, через мост. Перенос функции во внешний процесс помогает лишь тогда, когда её вычисления могут происходить там без такого обратного вызова.
Таблица Р.48.1. Какие NumPy и SciPy выполняют вычисления
Пластина с объёмным тепловыделением — аналитический эталон
Дано. Половина толщины a=10\,\mathrm{мм}; высота 10 мм; глубина 100 мм; k=10\,\mathrm{Вт/(м\cdot К)}; q_v=10^{6}\,\mathrm{Вт/м^3}; T(-a)=T(a)=300\,\mathrm{К}.
Условие симметрии даёт T'(0)=0. Двойное интегрирование уравнения Пуассона даёт параболу.
Превышение температуры в центре равно 10^{6}\cdot 0{,}01^{2}/(2\cdot 10)=5 К.
Объём 2aS=2\cdot 10^{-5}\,\mathrm{м^3} выделяет 20 Вт; каждая торцевая сторона отводит 10 Вт.
Ответ:T_{\max}=305\,\mathrm{К}; полный источник 20 Вт; поток через каждый охлаждаемый торец 10 Вт.
Проверка: Сравнивайте объёмный источник в Вт/м³ с полным потоком в Вт после интегрирования по объёму. Значения получены аналитически и сами по себе не подтверждают выполнения полевого расчёта FEMM.
Практикум в FEMM 5
Постройте табличный и графический профили T(x); затем добавьте отдельный ряд фактически извлечённых значений FEMM, не смешивая происхождение рядов.
В Heat Flow Problem постройте прямоугольник (−10,0)–(10,10) мм, Depth=100.
Материал: k_x=k_y=10, Volume Heat Generation=1000000 Вт/м³. Слева и справа Fixed Temperature=300 К, горизонтальные стороны изолированы.
Уточните сетку трижды по толщине. В каждом варианте считайте T(0{,}5), а не максимум сглаженной картины поля.
Вычислите интеграл объёмного источника и два граничных потока; запишите направление нормали и невязку баланса.
Ожидаемый результат.T_{\max}=305\,\mathrm{К}; полный источник 20 Вт; поток через каждый охлаждаемый торец 10 Вт. Для FEMM сравнение действительно только при совпадении идеализации и граничных условий.
Как проверить. Сравнивайте объёмный источник в Вт/м³ с полным потоком в Вт после интегрирования по объёму. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.
Обработка и анализ результатов
Каждая ли точка графика восстанавливается из таблицы и своего источника?
Сопоставьте координаты и температуры аналитического ряда и отдельного фактического ряда FEMM.
Восстановите профиль или тепловое сопротивление из таблицы; сопоставьте суммарные источники и выходящие потоки.
С чем сравнить. Опора — закон Фурье и аналитический тепловой баланс из занятия. Теплоотдача и свойства материала являются исходными данными; одномерный предел применим только при согласованном пути тепла.
Итог работы. Подписанные ряды и таблица с раздельным происхождением и оценкой расхождения профилей.
Одномерное стационарное уравнение теплопроводности с постоянными k и q_v даёт параболу T(x) = T_b + q_v(a² − x²)/(2k). За один проход вычисляется 21 точка, включая границы с температурой 300 К и центр с температурой 305 К. Постоянный коэффициент вынесен за цикл. После проверки таблица выводится в CSV с запятой в заголовке и каждой строке; шесть знаков после точки задают формат вывода, а не точность FEMM. Таблица является аналитическим эталоном при отсутствии боковых тепловых потоков.
Python · встроенный MicroPython FEMM 5
"""Контрольный вычислительный фрагмент.Среда: встроенный MicroPython FEMM 5.Аналитический учебный пример; полевой решатель не вызывается.Параметры, единицы величин и порядок вывода пояснены по стадиям."""# Цель: получить таблицу аналитического температурного профиля пластины.# Постоянны теплопроводность k и объёмный источник q_v; на x = ±a задано T_b.# Вход задан в СИ. Выход — CSV: x_m [м], T_K [К], включая обе границы и центр.# Таблица служит эталоном для графика; расчёт FEMM здесь не выполняется.# 1. Исходные данные и равномерная сетка: 20 интервалов дают 21 точку.half_thickness_m=0.01thermal_conductivity_w_m_k=10.0source_w_m3=1e6boundary_k=300.0interval_count=20spacing_m=2.0*half_thickness_m/interval_counttemperature_factor_k_m2=source_w_m3/(2.0*thermal_conductivity_w_m_k)# 2. Вычисляем T(x) = T_b + q_v(a² - x²)/(2k) за один проход по точкам.# Сохраняем небольшую таблицу, чтобы проверить её до вывода в CSV.rows=[]forpoint_indexinrange(interval_count+1):x=-half_thickness_m+spacing_m*point_indexT=boundary_k+temperature_factor_k_m2*(half_thickness_m**2-x*x)rows.append((x,T))# 3. Сверяем максимум и два граничных условия с аналитическими значениями.assertabs(rows[interval_count//2][1]-305.0)<1e-10assertabs(rows[0][1]-boundary_k)<1e-10assertabs(rows[-1][1]-boundary_k)<1e-10# Одинаковый разделитель заголовка и данных позволяет читать результат как CSV.# Шесть знаков после точки достаточны для этой сетки; это точность вывода.print("x_m,T_K")forx,Tinrows:print("{:.6f},{:.6f}".format(x,T))
Самостоятельная работа
Постройте табличный и графический профили T(x); затем добавьте отдельный ряд фактически извлечённых значений FEMM, не смешивая происхождение рядов. Сопоставьте исходный и изменённый режимы, сохраните исходные файлы, результаты и объяснение различия.
Критерий выполнения: Чистый численный self-check работает без numpy/scipy; таблица и график совпадают; неподдерживаемая функция сообщает ограничение вместо скрытой подмены.