Мне кажется, я знаю, как должен быть устроен идеальный электродвигатель. Но чтобы это доказать, нужен инструмент.
Существующий софт убивал все желание творить:
Ansys Maxwell - мощный, но тяжелый и часто просто отказывается запускаться.
FEMM - быстрый, но его интерфейс - пример того, как не надо делать UI в 21 веке.
SimScale - удобно, но медленно, и бесплатные лимиты кончаются слишком быстро.
За зимние каникулы (плюс пара дней) мы написали свой солвер.
Почти весь код написан нейросетью. Пару лет назад я бы в это не поверил, но сегодня мы с ней создали сложный инженерный софт.
Весь проект сделан на бесплатной версии Gemini.
Даже очень щедрых лимитов (спасибо Гуглу) постоянно не хватало. Это показательно: будь у нас больше ресурсов - мы бы сделали намного больше. Миру (и особенно мне) нужно намного больше вычислительных мощностей для ИИ.
Весь софт — это один HTML файл. Никаких серверов, установок и зависимостей.
Чтобы считать быстро, мы используем WebGPU. Все вычисления идут на видеокарте.
Разрешение: Спокойно перевариваем сетку 16К (о чем другие реал-тайм солверы могут только мечтать).
Сходимость: Экстремально быстрая (потратили уйму времени на тюнинг алгоритмов).
Рендер: Визуализация на Three.js, так как обычный Canvas 2D тормозил на таких объемах.
Интерфейс, в котором хочется работать:
Декартова или полярная система координат — сетка строится секторами, что идеально для вращающихся машин.
Sweep (Развертка) — задаем диапазон (угол/позицию), софт прогоняет симуляцию и строит графики.
«Зарядка» магнитов — уникальная фича: можно нарисовать «пустой» магнит в поле катушки, нажать кнопку, и он запомнит намагниченность.
Запись видео — рендер вебмки прямо из браузера.
Тут мы сломали немало копий.
Считать силы в реал-тайме через Тензор Максвелла на прямоугольной сетке и полуать качественный результат в котором можно быть уверенным - не получилось(
В итоге мы внедрили Метод Виртуальных Перемещений.
Как видно на скриншоте, он дает идеально гладкие графики момента и сил в режиме Sweep. Результат отличный, но ради этого пришлось пожертвовать интерактивностью - силы считаются только в режиме развертки, а не в реальном времени под мышкой. Даже если вам просто нужно посчитать магнитик на холодильник - нужно прогонять sweep
Проект Open Source.
Потыкать онлайн
Код на GitHub
В далекой перспективе думаю сделать 3D расчет на GPU с использованием адаптивной сетки (уплотнение вокселей в местах интереса).
А пока — буду рад фидбеку. Какого функционала вам не хватает?
Источник


