FEMM 5

Часть III · Встроенный Python и воспроизводимая автоматизация → § 16 · Воспроизводимые программы и интерфейсы

Занятие 16.1

Воспроизводимый запуск четырёх модулей: файлы, ошибки и библиотека проверок

Цель и задачи

Цель. Проверить воспроизводимость программ четырёх физических модулей.

Задачи

  • Проверьте детерминированный расчёт аналитического сопротивления и обязательные поля строки результата перед полевым запуском.
  • Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.
Что нужно вспомнить перед началом

Если одно из понятий незнакомо, вернитесь к предыдущему занятию и воспроизведите его численный пример. После этого переходите к новой постановке.

Место занятия в инженерной методике

Подготовительный этап методики · Обеспечение воспроизводимости расчётной последовательности

Инженерный вопрос. Можно ли отличить успешный полевой результат от проверки формулы и отказа?

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

Последовательность решения, отчёт и критерии результата

Результат этого этапа — проверенная постановка или воспроизводимая процедура перед серией расчётов.

Последовательность решения

  1. Обосновать постановку и способ измерения. Разделите исходный файл, изменённую копию, актуальное решение и последующую обработку; каждая команда должна обращаться к ожидаемому документу.

  2. Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц.. Выполните действия практикума по его исходной таблице. Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.

  3. Ответить на вопрос по своим результатам. Повторите выбранную строку по сохранённым входам и проверьте связь числа с файлом и режимом; зафиксируйте причину отказа отдельно.

Что включить в отчёт

Результат этого занятия. Протокол повторного запуска с отдельными рабочими копиями и причинами отказов.

Данные именно этого опыта. Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.

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

Как обосновать результат

Проверка из практикума. Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.

Независимый контроль. Повторите выбранную строку в новой рабочей папке по сохранённым входам; аналитический 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\). При постоянных магнитах и взаимном возбуждении сначала учитывают ненулевое смещение потокосцепления.
  • Положительные направления, оси и специальные индексы определяются в конкретной задаче. Единицу берите из условия или заголовка таблицы; перед подстановкой в формулу СИ переводите миллиметры в метры, миллигенри в генри и градусы в радианы.
  • Численные результаты обычно показаны с четырьмя значащими цифрами; для сравнения близких значений в таблицах сходимости сохранено больше цифр. Полные значения остаются в исходных расчётных данных. Малые остатки вычисления координат на осях показаны как ноль; малые физические величины сохраняются в показательной записи.
Указатель формул этого занятия
  1. (16.1) · Вывод контрольного соотношения

Физический и методический смысл

Единица вычислительного опыта — входная модель, параметры, код, версия среды, решение и журнал. Состояние «успех» устанавливают после проверки результата, а не после отсутствия исключения при сохранении файла.

GUI, запуск с командной строки и внешний TCP-интерфейс являются способами управления одной системой. Основной учебный маршрут использует встроенный Python; Mathematica и совместимость старого Lua описываются в справочном приложении без требования повторять старую архитектуру.

Вывод контрольного соотношения

Проверьте детерминированный расчёт аналитического сопротивления и обязательные поля строки результата перед полевым запуском.

R=\frac{L}{\sigma S},\quad E_x=\frac{U}{L},\quad J_x=\sigma E_x,\quad I=J_xS,\quad P=UI
(16.1)
Постоянная проводимость и равномерное сечение; контакты, нагрев и вытеснение тока в этом эталоне отсутствуют.
  1. Площадь S=0{,}001\cdot 0{,}01=10^{-5}\,\mathrm{м^2}; сопротивление равно 172,4 × 10⁻⁶ Ом.

  2. E=1\,\mathrm{В/м}, J=58\cdot 10^{6}\,\mathrm{А/м^2}; полный ток 580 А.

  3. Мощность 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; при наличии сначала исполнить сценарий
femm_headless без аргументов в терминалеВойти в REPL
femm_headless --version / --helpНапечатать версию / помощь и выйти
Неизвестный параметр femm_headlessОшибка с кодом 2, параметр не считается сценарием
femm-lua -h -p 48016 script.luaСовместимый Lua-клиент с отдельным портом
femm_headless --port 48020 -run sweep.py --port 5
# FEMM слушает 48020; сценарий получает строки "--port", "5".
# Внутри sweep.py: import sys; print(sys.argv)

Проверьте на своей модели

  • Объясните разницу между femm_headless model.py и femm_headless -run model.py.
  • Укажите, кому достанется второй --port в примере ниже; проверьте преобразование числовых sys.argv.
  • Зафиксируйте версию, код завершения и новый путь решения; не считайте старый .ans успешным новым результатом.

Источник: [33]. § 1.1 · § 3.1 · § 3.3

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 возвращает несортированный список
itertools, functools, operator, copyГруппировки, ключи сортировки, независимые копии параметров
contextlib, traceback, types, logging, textwrapКонтекстные менеджеры, диагностика и оформление сообщений
pathlib, stat, string, pprint, bisect, heapq, pickle, abc, inspect, argparseБиблиотечные подмножества; в string нет Template и Formatter
collections, struct, array, io, errno, gcКонтейнеры, двоичные структуры, потоки, ошибки и память
matplotlib, xlsxwriter, zipfile, pandasПеренаправляются во внешний CPython; требуют подходящего внешнего окружения

Проверьте на своей модели

  • Найдите личный каталог модулей на своей платформе и проверьте фактический os.getcwd().
  • Сравните два запуска случайной выборки с одинаковым seed.
  • Проверьте ровно тот режим csv/re, который нужен заданию; не переносите ограничения всей MicroPython-библиотеки на FEMM без проверки.

Источник: [33]. § 3.1 · § 3.2

Файлы, таблицы, память и протокол серии

Имя 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]
os.path.exists/isdir/isfile/getsizeПроверка назначения и размера пути
os.path.abspath/join/split/splitext/dirname/basenameПостроение абсолютных путей и разбор компонентов

Проверьте на своей модели

  • Сохраните и прочитайте CSV с кириллической строкой и запятой в поле, проверьте число строк.
  • Проверьте, что пути модели, решения и таблицы уникальны для параметра серии.
  • Не интерпретируйте gc.mem_free как объём свободной ОЗУ компьютера.

Источник: [33]. § 3.2 · § 3.3 · § 3.5

Какие NumPy и SciPy выполняют вычисления

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 выполняют вычисления
Документировано локальноДля расширенного варианта нужен внешний CPython
linalg: solve,inv,det,eig,qr,svd,pinv,cond,rank,cholesky,norm; комплексные матрицыПроверяйте совместимость сигнатур конкретного метода
polyfit/polyval; interpcurve_fit/least_squares и сплайны
fft, convolve; signal.sosfiltПроектирование фильтров, welch, periodogram
integrate.quad; optimize.bisect/newton/fminodeint, solve_ivp и другие дополнительные алгоритмы
Массивы и доступные элементарные операцииscipy.stats

Проверьте на своей модели

  • Для выбранного алгоритма отметьте процесс исполнения и число передач массивов.
  • Проверьте поддержку нужных аргументов локальной функции на малом массиве.
  • Не передавайте встроенную целевую функцию как callback внешнему SciPy.

Источник: [33]. § 4.5 · § 4.6

Mathematica: подключение и владение процессом

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.

Источник: [33]. § 5 · § 6

TCP-протокол: строки ответа и жизненный цикл

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 и что происходит при отключении клиента.

Источник: [33]. § 6 · § 1.1

Проверка описания и границы подтверждённого поведения

Для каждого вызова сверяйте имя, порядок аргументов, числовые коды опций и форму ответа. Сначала выполните небольшой контрольный расчёт с известной величиной; затем используйте команду в серии.

Справочник содержит 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/157getallelements возвращает кортеж из четырёх массивов; связность использует индексы узлов, начинающиеся с 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.

Проверьте на своей модели

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

Источник: [33]. § 3.2 · § 3.7.1 · § 3.9.1 · § 3.11.1 · § 3.11.2 · § 3.11.4 · § 3.13.1 · § 3.13.4

Разобранный численный пример

Постоянный ток в прямом проводнике — аналитический эталон

Дано. Длина 100 мм; высота 1 мм; глубина 10 мм; \sigma =58\cdot 10^{6}\,\mathrm{См/м}; слева 0,1 В, справа 0 В; боковые стороны изолированы.

  1. Площадь S=0{,}001\cdot 0{,}01=10^{-5}\,\mathrm{м^2}; сопротивление равно 172,4 × 10⁻⁶ Ом.

  2. E=1\,\mathrm{В/м}, J=58\cdot 10^{6}\,\mathrm{А/м^2}; полный ток 580 А.

  3. Мощность 58 Вт совпадает с интегралом J\cdot E по объёму. В центре потенциал 0,05 В.

Ответ: R=172{,}4137931 мкОм; I=580\,\mathrm{А}; P=58\,\mathrm{Вт}; V_{\mathrm{mid}}=0{,}05\,\mathrm{В}.

Проверка: Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Значения получены аналитически и сами по себе не подтверждают выполнения полевого расчёта FEMM.

Практикум в FEMM 5

Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц.

Таблица 16.1. Исходные данные практикума
Исходная величинаЗначениеЕдиница
L100мм
Высота1мм
Глубина10мм
\sigma58 × 10⁶См/м
U0,1В
  1. Создайте Current Flow Problem, frequency=0, millimeters, Planar, Depth=10; прямоугольник (0,0)–(100,1).
  2. Материал: \sigma_x=\sigma_y=58000000\,\mathrm{См/м}; диэлектрическую проницаемость оставьте конечной, при f=0 она не определяет ток.
  3. Назначьте торцевым проводникам fixed voltage 0.1 и 0 В. Верх и низ не соединяйте с источником.
  4. Решите задачу и прочитайте токи проводников, V в точке (50,0.5), Jx и интегральную мощность. Проверьте знак тока и баланс двух выводов.

Ожидаемый результат. R=172{,}4137931 мкОм; I=580\,\mathrm{А}; P=58\,\mathrm{Вт}; V_{\mathrm{mid}}=0{,}05\,\mathrm{В}. Для FEMM сравнение действительно только при совпадении идеализации и граничных условий.

Как проверить. Большая плотность тока здесь нужна для численной проверки. Допустимый нагрев проводника этим стационарным электрическим примером не установлен. Прямое численное сравнение возможно только при совпадении всех исходных данных и постановки.

Оценка результата

Можно ли отличить успешный полевой результат от проверки формулы и отказа?

  1. Проверьте активные документы, пути решений, единицы и статусы четырёх коротких протоколов.
  2. Повторите выбранную строку по сохранённым входам и проверьте связь числа с файлом и режимом; зафиксируйте причину отказа отдельно.

С чем сравнить. Опора — контрольный пример и протокол воспроизведения этого занятия. Численный self-check программы и фактическое решение FEMM имеют разное происхождение.

Итог работы. Протокол повторного запуска с отдельными рабочими копиями и причинами отказов.

Программа с русскими пояснениями: Контрольный вычислительный фрагмент · Порядок запуска

Контрольный вычислительный фрагмент

Функция вычисляет I = \sigma SU/L по исходным данным в СИ. Длина, площадь и проводимость должны быть положительными, все четыре аргумента — конечными; напряжение может иметь любой знак. NaN, бесконечность и переполнение приводят к явной ошибке, которую нельзя заменять нулевым током. Встроенный пример проверяет эталон 580 А и отказ при нулевой длине. Это чистый аналитический расчёт, а для повторения FEMM отдельно нужны рабочая копия модели, верные единицы, заданные проводники и фактический файл решения.

Python · встроенный MicroPython FEMM 5
"""Контрольный вычислительный фрагмент.

Среда: встроенный MicroPython FEMM 5.
Аналитический учебный пример; полевой решатель не вызывается.
Параметры, единицы величин и порядок вывода пояснены по стадиям.
"""

# Цель: воспроизводимый аналитический расчёт тока однородного проводника.
# Формула I = σSU/L применима при постоянной проводимости, равномерном сечении
# и изолированных боковых сторонах; контакты и нагрев здесь не учитываются.
# Вход: L [м], S [м²], σ [См/м], U [В]; результат функции — ток I [А].
import math


def reference_current(length_m, area_m2, sigma_sm, voltage_v):
    """Вернуть ток в амперах; знак тока совпадает со знаком напряжения."""
    # Отклоняем NaN и бесконечность до арифметики: сравнение NaN <= 0 ложно.
    values = (length_m, area_m2, sigma_sm, voltage_v)
    if not all(math.isfinite(value) for value in values):
        raise ValueError("Исходные величины должны быть конечными числами")
    if length_m <= 0.0 or area_m2 <= 0.0 or sigma_sm <= 0.0:
        raise ValueError("Длина, площадь и проводимость должны быть положительными")

    # Закон Ома: сначала находим проводимость G = σS/L, затем ток I = GU.
    # Нулевое и отрицательное напряжения допустимы и сохраняют свой смысл.
    conductance_s = sigma_sm * (area_m2 / length_m)
    current_a = conductance_s * voltage_v
    if not math.isfinite(current_a):
        raise ValueError("Переполнение при вычислении тока: проверьте масштаб данных")
    return current_a


# 1. Контрольный случай: L = 0,1 м, S = 10⁻⁵ м², σ = 58·10⁶ См/м, U = 0,1 В.
I = reference_current(0.1, 1e-5, 58e6, 0.1)
assert abs(I - 580.0) < 1e-9

# 2. Проверяем отказ на ошибочных данных; исключение не подменяется током 0 А.
try:
    reference_current(0.0, 1e-5, 58e6, 0.1)
    raise AssertionError("Недопустимая нулевая длина была принята")
except ValueError:
    pass  # Ожидаемый отказ означает, что защита входных данных сработала.

print("analytic replay PASS", I)
# Успешная аналитическая проверка не подтверждает нативный запуск FEMM.

Самостоятельная работа

Составьте четыре коротких протокола по семействам mi/mo, ei/eo, hi/ho, ci/co; запишите проверки активного документа, файла результата и единиц. Сопоставьте исходный и изменённый режимы, сохраните исходные файлы, результаты и объяснение различия.

Критерий выполнения: Повтор опыта создаёт отдельную рабочую копию; исходные файлы не меняются; сбой имеет статус failed и причину; численный результат хранится только у успешно проверенного режима.
Первоисточники и дополнительное чтение по занятию
  1. [33] — 8–9, 90–97, 165–166
Пояснения и типичные ошибки
Почему одинаковое имя CSV недостаточно для воспроизводимости?

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

Какое контрольное число и единица проверяют этот опыт?

R=172{,}4137931 мкОм; I=580\,\mathrm{А}; P=58\,\mathrm{Вт}; V_{\mathrm{mid}}=0{,}05\,\mathrm{В}.

При каких предположениях получена приведённая формула?

Постоянная проводимость и равномерное сечение; контакты, нагрев и вытеснение тока в этом эталоне отсутствуют.

На что обратить внимание

  • Не формируйте ссылки на контекстные native-команды до открытия соответствующего документа; доступность может регистрироваться лениво.
  • Постоянная проводимость и равномерное сечение; контакты, нагрев и вытеснение тока в этом эталоне отсутствуют.