Если одно из понятий незнакомо, вернитесь к предыдущему занятию и воспроизведите его численный пример. После этого переходите к новой постановке.
Место занятия в инженерной методике
Подготовительный этап методики · Обеспечение воспроизводимости расчётной последовательности
Инженерный вопрос. Можно ли отличить успешный полевой результат от проверки формулы и отказа?
Эти действия входят в подготовку расчёта любого устройства: они устанавливают связь источника, геометрии и наблюдаемой величины. Их результат позволяет выбрать допустимую постановку и способ извлечения будущей характеристики.
Последовательность решения, отчёт и критерии результата
Результат этого этапа — проверенная постановка или воспроизводимая процедура перед серией расчётов.
Последовательность решения
Обосновать постановку и способ измерения. Разделите исходный файл, изменённую копию, актуальное решение и последующую обработку; каждая команда должна обращаться к ожидаемому документу.
Ответить на вопрос по своим результатам. Повторите выбранную строку по сохранённым входам и проверьте связь числа с файлом и режимом; зафиксируйте причину отказа отдельно.
Что включить в отчёт
Результат этого занятия. Протокол повторного запуска с отдельными рабочими копиями и причинами отказов.
Данные именно этого опыта. Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.
Оформление наблюдений. Версия входа, режим, команды запуска, файл результата и статус; неудачные строки сохраняйте отдельно с причиной отказа.
Как обосновать результат
Проверка из практикума. Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.
Независимый контроль. Повторите выбранную строку в новой рабочей папке по сохранённым входам; аналитический self-check проверяет арифметику, а решение FEMM — полевую постановку.
Критерий выполнения. Повтор опыта создаёт отдельную рабочую копию; исходные файлы не меняются; сбой имеет статус failed и причину; численный результат хранится только у успешно проверенного режима.
Точность и расхождения. Критерий этого этапа — соответствие исходным данным, топологии, назначениям и процедуре повторного открытия. Численный допуск поля здесь не назначают: поле ещё не является защищаемым результатом. Расхождения размеров и параметров фиксируйте с единицами и происхождением.
Основание сравнения. Опора — контрольный пример и протокол воспроизведения этого занятия. Численный self-check программы и фактическое решение FEMM имеют разное происхождение.
Вывод для устройства
Покажите, как другой исполнитель воспроизведёт параметр устройства и обнаружит сбой без ручного восстановления скрытого состояния.
Границы вывода. Простой эталон проверяет конкретное действие или физический закон; перенос на устройство требует заново согласовать геометрию, материалы, режим и объёмный множитель.
Теория и вывод формул
Вычислительный эксперимент определяется входной моделью, параметрами, программой, версией среды, решением и журналом выполнения. Его успешное завершение устанавливается по проверенным результатам, а не только по отсутствию ошибок записи файла.
Соглашения об обозначениях и единицах
\(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\). При постоянных магнитах и взаимном возбуждении сначала учитывают ненулевое смещение потокосцепления.
Положительные направления, оси и специальные индексы определяются в конкретной задаче. Единицу берите из условия или заголовка таблицы; перед подстановкой в формулу СИ переводите миллиметры в метры, миллигенри в генри и градусы в радианы.
Численные результаты обычно показаны с четырьмя значащими цифрами; для сравнения близких значений в таблицах сходимости сохранено больше цифр. Полные значения остаются в исходных расчётных данных. Малые остатки вычисления координат на осях показаны как ноль; малые физические величины сохраняются в показательной записи.
Единица вычислительного опыта — входная модель, параметры, код, версия среды, решение и журнал. Состояние «успех» устанавливают после проверки результата, а не после отсутствия исключения при сохранении файла.
GUI, запуск с командной строки и внешний TCP-интерфейс являются способами управления одной системой. Основной учебный маршрут использует встроенный Python; Mathematica и совместимость старого Lua описываются в справочном приложении без требования повторять старую архитектуру.
Вывод контрольного соотношения
Проверьте детерминированный расчёт аналитического сопротивления и обязательные поля строки результата перед полевым запуском.
Постоянная проводимость и равномерное сечение; контакты, нагрев и вытеснение тока в этом эталоне отсутствуют.
Площадь S=0{,}001\cdot 0{,}01=10^{-5}\,\mathrm{м^2}; сопротивление равно 172,4 × 10⁻⁶ Ом.
E=1\,\mathrm{В/м}, J=58\cdot 10^{6}\,\mathrm{А/м^2}; полный ток 580 А.
Мощность 58 Вт совпадает с интегралом J\cdot E по объёму. В центре потенциал 0,05 В.
Границы применимости. Постоянная проводимость и равномерное сечение; контакты, нагрев и вытеснение тока в этом эталоне отсутствуют.
Связь с опытом в FEMM
Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц.
Сначала вычислите контрольное значение вручную, затем сформулируйте ожидаемый знак и зависимость от одного параметра. Повторите опыт в рабочей копии с изменением только этого параметра. Сохраняйте геометрию, единицы, глубину, материалы, источники и граничные условия вместе с результатом. Успешное завершение решателя означает решение введённой модели, но само по себе не доказывает её соответствие устройству.
Проверка и границы вывода
Повтор опыта создаёт отдельную рабочую копию; исходные файлы не меняются; сбой имеет статус failed и причину; численный результат хранится только у успешно проверенного режима.
Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен.
Не формируйте ссылки на контекстные native-команды до открытия соответствующего документа; доступность может регистрироваться лениво.
Пояснения к официальному руководству
Подробности, которые следует учитывать при настройке и проверке модели. Все учебные пояснения.
Для серии расчётов сначала выберите жизненный цикл процесса. Запуск GUI с путём модели или сценария оставляет окно открытым. Ключ -run запускает сценарий и завершает процесс после него. У headless запуск с одним сценарием без -run после исполнения продолжает обслуживание TCP; это иной режим, даже если вычисления в сценариях одинаковы.
Все параметры FEMM ставятся до имени сценария. После него начинаются аргументы самого сценария: sys.argv[0] содержит его путь, остальные строки нужно самостоятельно преобразовать в числа. Например, --port после sweep.py не перенастраивает FEMM, а поступает в sweep.py. При необходимости разбор именованных параметров выполняет встроенный argparse.
Версия входит в протокол расчёта. femm_headless --version печатает версию и дату сборки без запуска Python и открытия порта; в GUI эти сведения доступны через Help → About. Код возврата процесса и наличие ожидаемого решения проверяются отдельно: файл от прошлого запуска не подтверждает успех нового.
femm-lua предназначен для старых Lua 4 сценариев. Его -h/--headless выбирает headless, тогда как -h у femm_headless означает помощь. Параллельным Lua-клиентам нужны разные порты через -p; аргументы сценария находятся в таблице arg. Новые практикумы курса используют встроенный Python.
Таблица Р.38.1. Режим запуска, аргументы и завершение расчёта
Запуск / код
Документированное действие
femm_gui [--port N] [file]
Открыть задачу/решение или исполнить .py; оставить окно
femm_gui -run script.py [args...]
Исполнить и завершить: 0 успех, 1 ошибка сценария
femm_headless [--port N] [script.py]
После сценария обслуживать TCP; порт по умолчанию 48015
femm_headless -run script.py [args...]
Пакетный запуск: 0 успех; 1 ошибка; 130 Ctrl+C
femm_headless -i [script.py]
Интерактивный REPL; при наличии сначала исполнить сценарий
MicroPython, поиск модулей и библиотечные ограничения
Встроенный интерпретатор FEMM 5 основан на MicroPython. Совпадение имени numpy или scipy с пакетом настольного Python не гарантирует совпадения всего API. Сценарий может использовать числовые и комплексные данные, строки %, str.format и f-строки; FEMM дополнительно разрешает форматировать комплексное число через %g, %e и %f.
Поиск пользовательского модуля начинается с текущего каталога, затем проходит python рядом с исполняемыми файлами и личный каталог FEMM/python. Рабочий каталог автоматически меняется при открытии сценария через интерфейс. Собственные модули храните в личном каталоге с неповторяющимися именами: каталог установки заменяется при обновлении. Переносимые дополнения для встроенного интерпретатора должны быть совместимым чистым Python; расширение CPython на C туда просто скопировать нельзя.
Выберите строку своей операционной системы и создайте личный каталог для собственных модулей. Это третье место в порядке поиска; путь рядом с установленной программой принадлежит поставке FEMM.
Таблица М.Н.1. Личные каталоги модулей Python
Система
Каталог
Windows
%APPDATA%/FEMM/python
macOS
~/Library/Application Support/FEMM/python
Linux, FreeBSD
~/.local/share/FEMM/python; при заданном XDG_DATA_HOME — $XDG_DATA_HOME/FEMM/python
Обратные косые черты Windows здесь заменены прямыми для переносимых строк Python. Личный каталог пользователь создаёт сам.
Общий порядок поиска: текущий рабочий каталог → python рядом с программой → личный python. Не храните свои модули в каталоге поставки: обновление заменяет его содержимое.
Случайные числа в начале работы получают начальное состояние по часам. При сравнении параметрических серий задавайте random.seed. Для времени различайте локальные localtime/mktime и UTC gmtime; time.time использует эпоху 1970 и дробные секунды. time.sleep оставляет интерфейс отзывчивым.
Регулярные выражения в актуальном перечне руководства включают split, findall, finditer, sub, subn, fullmatch и escape, но не поддерживают флаги re.IGNORECASE и подобные, просмотр вперёд/назад и именованные группы. datetime не содержит базы часовых поясов; применяйте фиксированное смещение и strftime. Формат даты внутри f-строки и локализованные названия месяцев/дней не гарантируются.
В PDF сохранены противоречивые старые абзацы: стр.92 описывает csv и re.split, а стр.94–95 отрицает их наличие. Проверка установленной сборки 16.10.2026 подтвердила csv.reader(["a,b"]) и re.split(",", "a,b"). Это малая проверка этих вызовов, а не полная проверка библиотек; для другой поставки сохраните собственный результат вместе с версией.
Таблица Р.39.1. MicroPython, поиск модулей и библиотечные ограничения
Платформа
Личный каталог модулей
Windows
%APPDATA%/FEMM/python
macOS
~/Library/Application Support/FEMM/python
Linux, FreeBSD
~/.local/share/FEMM/python; при заданном XDG_DATA_HOME — $XDG_DATA_HOME/FEMM/python
Таблица Р.39.2. MicroPython, поиск модулей и библиотечные ограничения
Документированные группы модулей
Что проверять при использовании
numpy, scipy (ulab); math, cmath
Массивы, линейная алгебра, действительная и комплексная математика
os, os.path, sys, time, datetime
Пути, окружение сценария, время и ограничения календарных форматов
json, re, csv
Сериализация и синтаксис; учитывать отмеченное противоречие PDF
random, binascii, hashlib, base64
Воспроизводимость seed, кодирование, SHA-256
glob, shutil, tempfile
Поиск и операции с файлами; glob возвращает несортированный список
Имя 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]
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 выполняют вычисления
MathFEMM использует TCP, а не прежний MathLink. Пакет загружается Get["mathfemm.m"], после чего OpenFEMM[] подключается к порту 48015 и при необходимости запускает GUI. OpenFEMM[1] выбирает headless при новом запуске; OpenFEMM[bHide,port] позволяет задать оба параметра.
Если на порту уже есть FEMM, пакет подключается к нему и bHide не изменяет его видимость. Поэтому повторный запуск notebook после прерывания не обязательно создаёт новый процесс. Однако одновременно процесс обслуживает только одного подключённого клиента: второе подключение не становится очередью вычислений.
Обёртки используют синтаксис Mathematica: например, MIAddNode[x,y] и MIAddSegment[x_{1},y_{1},x_{2},y_{2}]. Ответ преобразуется в число, строку или список языка, а не остаётся необработанной TCP-строкой. Завершение CloseFEMM[] закрывает соединение; по общему контракту TCP отключение клиента завершает FEMM. Для оставления окна на осмотр держите соединение открытым.
Проверьте на своей модели
До подключения выберите свободный порт и проверьте, к новому или существующему процессу подключается notebook.
Не приписывайте bHide эффект при подключении к уже запущенному GUI.
Сохраните результаты перед CloseFEMM; отрабатывайте этот дополнительный интерфейс отдельно от обязательного внутреннего Python.
GUI и headless предоставляют один и тот же интерфейс встроенного Python по TCP; порт по умолчанию 48015. Один процесс принимает одного клиента. Второй одновременно подключающийся клиент получает отказ. При разрыве соединения клиентом FEMM завершается, поэтому логика reconnect должна учитывать возможное отсутствие прежнего документа и процесса.
Один запрос состоит из одной строки Python, завершённой переводом строки; ответ также ровно одна строка с завершающим переводом. Пустая строка является корректным подтверждением инструкции без значения. Запрос следующей команды должен следовать после чтения полного ответа предыдущей: TCP сам по себе не сохраняет границы отдельных отправок.
Представление ответа специально предназначено для протокола: комплексное число имеет вид a+I*b, логические значения — true/false, строки передаются без кавычек, элементы кортежа разделяются табуляцией. Поэтому eval(raw_reply) как обычного Python не является корректным универсальным разбором. Лучше использовать готовую обёртку своего языка и её обработку типов и ошибок.
Ошибка начинается с error:. Обычный print и подробный traceback уходят в собственный вывод FEMM, а не в ответ сокета. Нельзя ожидать, что print(csv_row) вернёт CSV клиенту. Для программного результата запрашивайте выражение, сохраняйте файл или используйте специальный механизм обёртки; диагностический вывод процесса собирайте отдельно.
OctaveFEMM, MathFEMM, pyfemm и пакеты Julia, Scilab, Lua являются обёртками этого протокола. Старый ActiveX/COM не является архитектурой FEMM 5. Параллельная серия требует отдельных процессов и портов, а также отдельных файлов результатов, чтобы модель и соединение одного опыта не изменяли другой.
Таблица Р.50.1. TCP-протокол: строки ответа и жизненный цикл
Тип результата
Строка на уровне протокола
Выражение с действительным числом
Число в полной точности
Комплексное число
a+I*b
Кортеж
Элементы, разделённые TAB
Булев результат
true либо false
Строка
Без обрамляющих кавычек
Инструкция без значения
Пустая строка
Исключение
error: и текст сообщения; traceback отдельно
Проверьте на своей модели
Различите пустую успешную строку и error:; не считайте отсутствие чисел ошибкой инструкции.
Проверьте разбор комплексного числа и табулированного кортежа через выбранную обёртку.
Покажите, где сохраняется stderr/traceback и что происходит при отключении клиента.
Проверка описания и границы подтверждённого поведения
Для каждого вызова сверяйте имя, порядок аргументов, числовые коды опций и форму ответа. Сначала выполните небольшой контрольный расчёт с известной величиной; затем используйте команду в серии.
Справочник содержит 556 нативных имён команд. Выбирайте команду по физическому модулю и стадии расчёта; для интегралов заранее задайте нужные области или ориентированный контур. Сопоставляйте размерность и форму ответа с выбранной операцией.
eo_blockintegral(0) возвращает одноэлементный кортеж; извлеките его компоненту перед скалярными вычислениями. Для тепловой задачи проверяйте знак G по профилю температуры и закону Фурье. У getall-вызовов проверяйте форму массивов и индексацию связности. Для работы с CSV и регулярными выражениями используйте csv и re.split. mo_lineintegral(2) возвращает длину контура и площадь соответствующей поверхности.
Таблица Р.51.1. Аргументы и формы ответа команд FEMM 5
Команда и страницы руководства
Правило применения
csv, re.split; стр.92–95
Используйте csv для табличных данных и re.split для разделения строк по регулярному выражению.
getallelements, стр.114–115/128/142/157
getallelements возвращает кортеж из четырёх массивов; связность использует индексы узлов, начинающиеся с 1.
mi_probdef, стр.99; moverotate
Передавайте аргументы внутри скобок; editaction задавайте отдельным аргументом.
mo_lineintegral(2), стр.107
Результат содержит пару: длина контура и площадь соответствующей поверхности.
eo_blockintegral, стр.124
Для силы используйте код 5; код 4 не является этой операцией.
ho_lineintegral, стр.137
Для теплового потока используйте код 1; код 2 относится к геометрии контура.
ho_makeplot, стр.138
Выбирайте тепловые величины T/F/G: температуру, поток и компоненты температурного градиента.
ho_selectconductor, стр.139
Выбирается тепловой проводник; ho_blockintegral не вычисляет механическую силу.
ho_showcontourplot, стр.141
Изолинии относятся к температуре T; имена аргументов границ диапазона — lower_V и upper_V.
co_getpointvalues, стр.152
Смысл и единицы ox/oy сверяйте с материальными параметрами и контрольной токовой задачей; не подставляйте их как магнитную проницаемость.
co_showcontourplot, стр.155
Передавайте type внутри списка аргументов co_showcontourplot.
Проверьте на своей модели
Укажите команду, её аргументы, ожидаемую форму результата и единицы.
Проверьте каждый используемый код интеграла на подходящем контрольном примере.
Сопоставьте численный результат с физическим эталоном, а не только с отсутствием ошибки выполнения.
Проверка: Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Значения получены аналитически и сами по себе не подтверждают выполнения полевого расчёта FEMM.
Практикум в FEMM 5
Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц.
Создайте Current Flow Problem, frequency=0, millimeters, Planar, Depth=10; прямоугольник (0,0)–(100,1).
Материал: \sigma_x=\sigma_y=58000000\,\mathrm{См/м}; диэлектрическую проницаемость оставьте конечной, при f=0 она не определяет ток.
Назначьте торцевым проводникам fixed voltage 0.1 и 0 В. Верх и низ не соединяйте с источником.
Решите задачу и прочитайте токи проводников, V в точке (50,0.5), Jx и интегральную мощность. Проверьте знак тока и баланс двух выводов.
Ожидаемый результат.R=172{,}4137931 мкОм; I=580\,\mathrm{А}; P=58\,\mathrm{Вт}; V_{\mathrm{mid}}=0{,}05\,\mathrm{В}. Для FEMM сравнение действительно только при совпадении идеализации и граничных условий.
Как проверить. Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.
Оценка результата
Можно ли отличить успешный полевой результат от проверки формулы и отказа?
Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.
Повторите выбранную строку по сохранённым входам и проверьте связь числа с файлом и режимом; зафиксируйте причину отказа отдельно.
С чем сравнить. Опора — контрольный пример и протокол воспроизведения этого занятия. Численный self-check программы и фактическое решение FEMM имеют разное происхождение.
Итог работы. Протокол повторного запуска с отдельными рабочими копиями и причинами отказов.
Функция вычисляет I = \sigma SU/L по исходным данным в СИ. Длина, площадь и проводимость должны быть положительными, все четыре аргумента — конечными; напряжение может иметь любой знак. NaN, бесконечность и переполнение приводят к явной ошибке, которую нельзя заменять нулевым током. Встроенный пример проверяет эталон 580 А и отказ при нулевой длине. Это чистый аналитический расчёт, а для повторения FEMM отдельно нужны рабочая копия модели, верные единицы, заданные проводники и фактический файл решения.
Python · встроенный MicroPython FEMM 5
"""Контрольный вычислительный фрагмент.Среда: встроенный MicroPython FEMM 5.Аналитический учебный пример; полевой решатель не вызывается.Параметры, единицы величин и порядок вывода пояснены по стадиям."""# Цель: воспроизводимый аналитический расчёт тока однородного проводника.# Формула I = σSU/L применима при постоянной проводимости, равномерном сечении# и изолированных боковых сторонах; контакты и нагрев здесь не учитываются.# Вход: L [м], S [м²], σ [См/м], U [В]; результат функции — ток I [А].importmathdefreference_current(length_m,area_m2,sigma_sm,voltage_v):"""Вернуть ток в амперах; знак тока совпадает со знаком напряжения."""# Отклоняем NaN и бесконечность до арифметики: сравнение NaN <= 0 ложно.values=(length_m,area_m2,sigma_sm,voltage_v)ifnotall(math.isfinite(value)forvalueinvalues):raiseValueError("Исходные величины должны быть конечными числами")iflength_m<=0.0orarea_m2<=0.0orsigma_sm<=0.0:raiseValueError("Длина, площадь и проводимость должны быть положительными")# Закон Ома: сначала находим проводимость G = σS/L, затем ток I = GU.# Нулевое и отрицательное напряжения допустимы и сохраняют свой смысл.conductance_s=sigma_sm*(area_m2/length_m)current_a=conductance_s*voltage_vifnotmath.isfinite(current_a):raiseValueError("Переполнение при вычислении тока: проверьте масштаб данных")returncurrent_a# 1. Контрольный случай: L = 0,1 м, S = 10⁻⁵ м², σ = 58·10⁶ См/м, U = 0,1 В.I=reference_current(0.1,1e-5,58e6,0.1)assertabs(I-580.0)<1e-9# 2. Проверяем отказ на ошибочных данных; исключение не подменяется током 0 А.try:reference_current(0.0,1e-5,58e6,0.1)raiseAssertionError("Недопустимая нулевая длина была принята")exceptValueError:pass# Ожидаемый отказ означает, что защита входных данных сработала.print("analytic replay PASS",I)# Успешная аналитическая проверка не подтверждает нативный запуск FEMM.
Самостоятельная работа
Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц. Сопоставьте исходный и изменённый режимы, сохраните исходные файлы, результаты и объяснение различия.
Критерий выполнения: Повтор опыта создаёт отдельную рабочую копию; исходные файлы не меняются; сбой имеет статус failed и причину; численный результат хранится только у успешно проверенного режима.