Интерактивная программа и воспроизводимое исследование трёх методов построения двумерных и трёхмерных структурированных расчётных сеток:
- метода упругих нитей;
- метода Винслоу;
- регуляризованного метода адаптивного натяжения.
Проект объединяет вычислительное ядро, редактор границы (2D) и режим
трёхмерных областей (3D), автоматические тесты и научную статью. В
article.tex перенесена теоретическая часть
исходной работы, а прежние программные листинги заменены реализациями,
которые действительно соответствуют приведённым дискретным постановкам.
Исходная работа сохранена в main.tex, материалы В. Ф. Тишкина — в
tishkin_grid.tex и отдельной позиции списка литературы.
Единственного лучшего метода для всех рассмотренных областей нет.
| Область | Практический вывод | Численное основание |
|---|---|---|
| Квадрат | Контрольный аффинный случай: методы эквивалентны | Q_orth = 1, Jsc = 1, AR95 = 1 |
| Круг | Винслоу лучше при приоритете ортогональности | Q_orth = 0.9368, на 2.01% выше метода упругих нитей |
| Круг | Адаптивный метод лучше по равномерности площадей и отношению сторон | CV_A = 0.0650, AR95 = 2.0006; CV_A на 49.69% ниже Винслоу |
| Полукольцо | Сбалансированные упругие нити дают лучший совокупный результат | Jsc = 0.9569; балансировка устраняет 104 инвертированные ячейки равножёсткого варианта |
| Полукольцо | Адаптивный вариант при mu = 0.1 неприемлем по форме ячеек |
Jsc в 33.00 раза ниже, AR95 в 14.18 раза выше упругих нитей |
Все опубликованные значения относятся к сеткам 21 × 21 с фиксированными
граничными узлами. Они характеризуют геометрию сеток, а не ошибку решения
последующего дифференциального уравнения.
Программа поддерживает переключатель размерности. В 3D-режиме доступны четыре области: куб (аффинный контроль), скрученный куб (верхняя грань повёрнута на 0.6 рад), шар из шести гномонических сферических граней и арковая призма (полукольцо, выдавленное по высоте). Все три решателя перенесены в трёхмерный случай на едином методологическом основании:
| Метод | 3D-формулировка |
|---|---|
| Упругие нити | линейная задача с весами по трём направлениям и балансировкой суммарных энергий нитей |
| Винслоу | размерностно-инвариантный функционал `( |
| Адаптивное натяжение | функционал (tr D̃ − 3)²/det D̃ + (det D̃ − 1)² − μ·ln(J/J*) с D̃ = G/J*^(2/3) |
Начальная сетка строится трансфинитной интерполяцией шести граней (булева сумма трёх проекторов), которая точностью воспроизводит грани. В трёхмерном режиме граница не редактируется: сцена вращается левой кнопкой мыши, масштаб меняется правой кнопкой или колесом мыши, а кнопки «Изометрия / Сверху / Спереди / Сбоку» и «Поворот» задают готовые ракурсы. Линии трёх направлений ξ, η, ζ отображаются разными яркими цветами (голубой, красный, зелёный) как для предпросмотра TFI, так и для результата, с легендой в углу сцены; нити сортируются по глубине (дальние полупрозрачны, ближние чёткие), а внешняя оболочка области выделяется светлой рамкой поверх сетки — боковые грани видны с любого ракурса. Рамка координатных осей при этом скрыта. Число узлов задаётся по трём направлениям от 5 до 21; для шара верхняя граница равна 9, так как при более плотной сетке угловые ячейки гномонической параметризации теряют положительный якобиан (касательные координатных линий в углах на гладкой границе компланарны).
Показатели качества 3D: коэффициент ортогональности по трём парам
направлений, минимальный масштабированный якобиан по восьми углам
ячейки, число инвертированных ячеек, коэффициент вариации объёмов
CV_V, объём области и 95-й процентиль отношения сторон AR95.
Основной вывод 3D-эксперимента — единого лучшего метода нет, а распределение ролей зависит от области:
| Область | Наблюдение |
|---|---|
| Куб | Аффинный контроль: методы эквивалентны с точностью округления |
| Скрученный куб | Адаптивное натяжение выравнивает объёмы: CV_V = 0.0096 (на 59.8% ниже Винслоу) при равной ортогональности |
| Шар | Винслоу лучший по ортогональности (Q_orth = 0.9897) и AR95 = 2.75; адаптивное натяжение — по CV_V |
| Арковая призма | Винслоу лучший по совокупности показателей; адаптивное натяжение при mu = 0.1 хуже по всем метрикам |
| Арковая призма | Балансировка жёсткостей сошлась к k_eta/k_xi = 16.8 — практически двумерное значение 16.2 |
- Собранная статья в PDF
- Исходный текст статьи
- Аудит исходных алгоритмов
- Описание воспроизводимых материалов
Статья содержит постановку задачи, теорию трёх методов, дискретизацию, контроль аналитических градиентов, критерии качества, явное попарное сравнение, наложение сеток, описание интерфейса, ограничения эксперимента и выводы по выбору метода. Упоминания учебного заведения из неё удалены; документ оформлен как самостоятельная научная статья.
Программа предназначена не только для просмотра готовых примеров. В ней можно сформировать собственную криволинейную четырёхугольную область, построить её разными методами и сразу сопоставить показатели качества.
- Сравнение методов: кнопка «Сравнить все методы» строит сетку всеми тремя решателями и открывает таблицу метрик с отметкой лучшего значения в каждой строке; любой метод можно сразу применить к основной сцене.
- Советник по качеству: после расчёта под заголовком появляется рекомендация (инвертированные ячейки, вырождение у границы, вытянутые ячейки, разброс размеров, ортогональность) с цветовой индикацией.
- Запоминание настроек: язык, размерность, область, размеры сетки,
параметры метода и положение окна сохраняются в
%APPDATA%\MeshGridStudioи восстанавливаются при следующем запуске. - Горячие клавиши:
Ctrl+Enter/F5— построить,Ctrl+1/2/3— выбор метода,Ctrl+S/O— проект,Ctrl+E/P— экспорт CSV/PNG. - Тултипы у основных элементов управления и автоповорот 3D-сцены для наглядной демонстрации сетки.
Интерфейс поддерживает русский и английский языки: переключатель
EN/RU находится вверху панели управления, все надписи меню, метрик и
сообщений обновляются мгновенно.
| Модуль | Назначение |
|---|---|
mesh_methods.py |
Геометрия двумерных областей, сетка Кунса, три численных решателя, функционалы и метрики |
mesh_methods_3d.py |
Шесть граней гексаэдра, 3D-трансфинитная интерполяция, те же три решателя в 3D, метрики и эксперимент |
mesh_gui_model.py |
Независимая от Tk модель редактируемой границы, 3D-пресеты, проверка параметров, проекты и диспетчеризация решателей |
mesh_gui.py |
Окно Tk, элементы управления, Matplotlib (2D и 3D), обработка мыши, фоновые вычисления и экспорт |
Выбор в интерфейсе вызывает именно указанный решатель. Программа не подменяет метод Винслоу или адаптивное натяжение линейным алгоритмом упругих нитей.
Доступны три исходные области: квадрат, круг и полукольцо. Любую из них можно превратить в пользовательскую область. Граница хранится как четыре связанные полилинии в порядке «низ — правая сторона — верх — левая сторона». Общие углы синхронизированы, поэтому при перемещении угла не возникает разрыва между соседними сторонами.
Число узлов задаётся независимо по направлениям ξ и η в диапазоне
от 5 до 81. Кнопка «Применить размер» пересэмплирует текущую границу под
новое разрешение. До численного расчёта светлыми пунктирными линиями
показывается быстрый предпросмотр Кунса.
| Режим | Что изменяется |
|---|---|
| Углы | Один угол и концы двух примыкающих сторон |
| Узлы границы | Отдельный узел одной из четырёх полилиний |
| Сторона целиком | Все узлы выбранной стороны одним переносом |
| Вся область | Вся граница без изменения её формы |
| Внутренние узлы | Отдельный узел уже построенной сетки |
Маркер выбирается левой кнопкой мыши в радиусе 16 экранных пикселей. После изменения границы программа проверяет конечность координат, согласованность углов, ориентацию и самопересечения. Недопустимая граница не передаётся решателю. Флажок «Перестроить после отпускания» позволяет автоматически запускать метод после успешной проверки.
Ручное перемещение внутреннего узла не выдаётся за результат вариационного метода: метрики пересчитываются, но признак сходимости аннулируется и показывается статус ручной правки.
| Метод | Используемые параметры интерфейса |
|---|---|
| Упругие нити | Размер сетки и флаг балансировки жёсткостей |
| Винслоу | Размер сетки, максимум итераций и допуск градиента |
| Адаптивное натяжение | Размер сетки, максимум итераций, допуск градиента и μ |
Максимум итераций может лежать от 1 до 100000, допуск должен быть
положительным, а μ — неотрицательным. Не используемые выбранным методом
поля остаются читаемыми; подсказка под ними явно указывает, какие
параметры войдут в расчёт.
Численный метод работает в отдельном потоке. Окно и индикатор выполнения остаются отзывчивыми, а изменяющие состояние элементы временно блокируются. После завершения показываются:
- подтверждённая сходимость;
- число итераций и время;
- линейная невязка или норма градиента;
- коэффициент ортогональности
Q_orth; - минимальный масштабированный знаковый якобиан
Jsc; - число инвертированных ячеек;
- коэффициент вариации площадей
CV_A; - 95-й процентиль отношения сингулярных чисел
AR95.
Если оптимизатор не достиг критерия, полученная сетка всё равно визуализируется вместе с сообщением и метриками. Это позволяет отдельно оценить остановку алгоритма, допустимость и геометрическое качество.
*.mesh.jsonхранит версию формата, четыре полилинии границы, размеры, выбранный метод, его параметры и режим перетаскивания;- CSV содержит строки
i,j,x,y, координаты записываются с 17 значащими цифрами; - PNG сохраняет текущее поле визуализации с разрешением 220 dpi.
Готовая сетка не включается в проект JSON: после открытия проекта она строится повторно из сохранённой границы и параметров. Это исключает несоответствие между настройками и ранее рассчитанными координатами.
- Выбрать исходную область и размеры
Nξ × Nη. - При необходимости изменить границу одним из режимов перетаскивания.
- Выбрать метод и задать только относящиеся к нему параметры.
- Нажать «Построить выбранным методом».
- Проверить сходимость,
Jsc, инверсии, ортогональность,CV_AиAR95. - Сохранить проект либо экспортировать координаты и изображение.
Требуется Python 3.11 или новее.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python mesh_gui.pyГотовая переносимая Windows-сборка публикуется в разделе
Releases.
Она запускается без установленного Python. Сборка имеет каталожный
формат: исполняемый файл находится рядом с папкой runtime, поэтому
библиотеки не распаковываются при каждом старте. Интерфейс поддерживает
масштабирование DPI Windows.
python -m unittest -v test_mesh_methods.py test_mesh_methods_3d.py test_mesh_gui.py
python mesh_methods.py --output-dir output/generated
python mesh_methods.py --adaptive-mu0-control --output-dir output/generated
python mesh_methods_3d.py --output-dir output/generated
pdflatex -interaction=nonstopmode -halt-on-error -output-directory=output/pdf article.tex
pdflatex -interaction=nonstopmode -halt-on-error -output-directory=output/pdf article.texОсновной эксперимент создаёт CSV с метриками, таблицу LaTeX, PNG/PDF
рисунки и JSON с параметрами, версиями библиотек, историями оптимизации и
признаками сходимости. Контрольный запуск mu = 0 выполняется отдельно и
занимает больше времени.
python -m pip install -r requirements-build.txt
powershell -ExecutionPolicy Bypass -File .\build_exe.ps1Сборка создаётся в output/app/MeshGridStudio/. Проверка собранного
исполняемого файла:
output/app/MeshGridStudio/MeshGridStudio.exe --solver-self-test
output/app/MeshGridStudio/MeshGridStudio.exe --smoke-testУстановщик Windows (Inno Setup) собирается скриптом
build_installer.ps1 из каталожной сборки и появляется в
output/installer/MeshGridStudio-<версия>-Setup.exe. В релизах GitHub
также публикуется однофайловый портативный EXE
(MeshGridStudio-<версия>-win64.exe).
mesh_methods.py 2D: вычислительное ядро, метрики и эксперимент
mesh_methods_3d.py 3D: грани гексаэдра, TFI, три решателя и эксперимент
mesh_gui.py интерфейс Tk, 2D-редактор и 3D-режим
mesh_gui_model.py модель проекта, редактирования границы и диспетчеризация
test_mesh_methods.py 15 тестов 2D-методов
test_mesh_methods_3d.py 15 тестов 3D-методов
test_mesh_gui.py 13 тестов интерфейсной модели и диспетчеризации
article.tex научная статья (2D и 3D)
main.tex архивный исходный текст работы
tishkin_grid.tex материалы В. Ф. Тишкина
output/generated/ 2D- и 3D-результаты, рисунки и таблицы
output/pdf/article.pdf собранная статья


