Skip to content

About

Mesh Grid Studio: interactive structured mesh generator - elastic nets, Winslow and adaptive-tension methods for 2D and 3D grids. Python/Tk/Matplotlib, Windows installer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

20 Commits

Folders and files

Repository files navigation

Mesh Grid Studio

Интерактивная программа и воспроизводимое исследование трёх методов построения двумерных и трёхмерных структурированных расчётных сеток:

  • метода упругих нитей;
  • метода Винслоу;
  • регуляризованного метода адаптивного натяжения.

Интерфейс Mesh Grid Studio

Проект объединяет вычислительное ядро, редактор границы (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 рад), шар из шести гномонических сферических граней и арковая призма (полукольцо, выдавленное по высоте). Все три решателя перенесены в трёхмерный случай на едином методологическом основании:

Трёхмерный режим Mesh Grid Studio

Метод 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

Статья

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

Возможности программы

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

Умные возможности

  • Сравнение методов: кнопка «Сравнить все методы» строит сетку всеми тремя решателями и открывает таблицу метрик с отметкой лучшего значения в каждой строке; любой метод можно сразу применить к основной сцене.
  • Советник по качеству: после расчёта под заголовком появляется рекомендация (инвертированные ячейки, вырождение у границы, вытянутые ячейки, разброс размеров, ортогональность) с цветовой индикацией.
  • Запоминание настроек: язык, размерность, область, размеры сетки, параметры метода и положение окна сохраняются в %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: после открытия проекта она строится повторно из сохранённой границы и параметров. Это исключает несоответствие между настройками и ранее рассчитанными координатами.

Обычный рабочий цикл

  1. Выбрать исходную область и размеры Nξ × Nη.
  2. При необходимости изменить границу одним из режимов перетаскивания.
  3. Выбрать метод и задать только относящиеся к нему параметры.
  4. Нажать «Построить выбранным методом».
  5. Проверить сходимость, Jsc, инверсии, ортогональность, CV_A и AR95.
  6. Сохранить проект либо экспортировать координаты и изображение.

Быстрый запуск

Требуется 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 выполняется отдельно и занимает больше времени.

Сборка Windows-приложения

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  собранная статья

About

Mesh Grid Studio: interactive structured mesh generator - elastic nets, Winslow and adaptive-tension methods for 2D and 3D grids. Python/Tk/Matplotlib, Windows installer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages